#define PARADO 0
#define FECHAR 1
#define ABRIR 2
unsigned char estado = 0; //portão parado por defeito.
unsigned char estado_anterior = 0;
unsigned char botao_anterior = 0;
void loop() {
unsigned char botao = digitalRead(2);
if (botao == 1 && botao != botao_anterior){ // estou a assumir que o botao quando pressionado lê 1
//tem de haver uma mudanca de estado.
if (estado == PARADO) {
if (estado_anterior == FECHAR)
estado = ABRIR;
else
estado = FECHAR;
estado_anterior = PARADO;
}
if (estado != PARADO) {
estado_anterior = estado;
estado = PARADO;
}
}// fim da lógica do botão.
switch(estado) { //lógica das saídas
case PARADO:
digitalWrite (ligar, HIGH);
break;
case ABRIR:
digitalWrite (fechar,LOW); // mudança de sentido
digitalWrite (ligar,LOW);
break;
case FECHAR:
digitalWrite (fechar,HIGH); // mudança de sentido
digitalWrite (ligar,HIGH); // motor parado
break;
}
botao_anterior = botao;
}