Como usar controle remoto de portão no arduino

#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; 
}