Een knop voor twee functies rolluik

Hallo allemaal,
ik ben aan het proberen mijn rolluik te automatiseren en het relaygedeelte is al gelukt maar ik loop er tegenaan dat ik niet met één knop open en dicht kan afwisselen, als ik deze code upload gaat de relay die het rolluik omlaag laat gaan altijd aan en de relay die het rolluik ophoog laat gaan nooit. Heeft er iemand een idee hoe het wel kan? Bij voorbaat dank

//going down = 14 sec, going up = 15 sec

int greenLight = 7;
int redLight = 6;
int button = 5;
int shutterState;

void goDown() {
digitalWrite(greenLight, LOW);
digitalWrite(redLight, HIGH);
digitalWrite(3, LOW);
delay(14000);
digitalWrite(3, HIGH);
digitalWrite(redLight, LOW);
digitalWrite(greenLight, HIGH);
shutterState = 2;
//1= shutters are up,2= shutters are down

}

void goUp() {
digitalWrite(greenLight, LOW);
digitalWrite(redLight, HIGH);
digitalWrite(4, LOW);
delay(15000);
digitalWrite(4, HIGH);
digitalWrite(redLight, LOW);
digitalWrite(greenLight, HIGH);
shutterState = 1;
}

void setup() {
// put your setup code here, to run once:
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
pinMode(5, INPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
digitalWrite(greenLight, HIGH);

}

void loop() {

if(digitalRead(button) == HIGH){
if (shutterState = 1){
goDown();
}
if (digitalRead(5) == HIGH){
if (shutterState = 2){
}
goUp();
}
}
}

je moet ook nog kijken of de knop uit is geweest en button is 5 dus nu blijft hij in 1 stand staan.

Naast een paar standaard C taal fouten.....

Het verschil tussen '=' en '==' ?

Dit is ook niet erg zinvol:

      if (shutterState = 2) {
      }

En heb je er al eens over nagedacht wat er gebeurt als de 220V halverwege een actie (omhoog of omlaag) verdwijnt? Je rolluik is nu ergens halverwege en als de boel weer aan de gang is zou je de relays maar de halve periode moeten activeren; tenzij er een schakelaar op het rolluik zelf zit die voorkomt dat de motor blijft draaien.

Het beste wat je kunt doen is een sensor aan de rolluik maken om te bepalen wat zijn positie is.
ook een blockade sensor voor als je fiets of voet of beide eronder zit.

Verder zou de state machine de volgende states moeten hebben (imho)

State	event		newstate
INIT	-		CLOSING		ga altijd sluiten bij opstart indien nog niet gesloten
OPEN	release		CLOSING		druk op knop, trigger op release is vaak beter. 
					Je weet niet hoelang ingedrukt

CLOSING	release		OPENING		druk op knop - reverse motor
CLOSING	sensor		CLOSED		deur detecteert eindpositie
CLOSING	blocked		OPENING		deur detecteert fiets eronder

CLOSED	release		OPENING

OPENING	release		CLOSING		druk op knop - reverse motor
OPENING	sensor		OPEN		deur detecteert endstate

Hoi chieldd, en welkom !

Zoals je aan Rob's antwoord ziet, is het goed om je wensen en eisen te noteren.
Het liefst lekker old school op een stuk papier dat je naast je toetsenbord kunt leggen terwijl je aan het werk bent.
Met potlood zodat je de inhoud van dat stuk papier gemakkelijk kunt editen.

Dat betekent dat je voor dat je gaat coden, je eerst eens een paar keer goed moet nadenken over wat je wil en moet doen.

Daarna kun je dat dan gaan uitwerken en als je iets onder controle hebt kun je er een vinkje bij zetten op je lijst.
Ik kan je beloven dat je lijst een stukkie groter zal worden als dat wat Rob je alvast heeft voorgeschoteld.