Como usar controle remoto de portão no arduino

Bom dia pessoal!!!!

Estou começando um projeto de portão automático com arduino, porem não tenho muita experiência com programação.
Comecei a fazer o código mas não consigo continuar pois quando vou testar não funciona.

Segue o código abaixo, espero que me ajudem!

#define controle 2 // entrada do controle remoto
#define abrir 10 // saída para abrir o portão
#define fechar 11 // saída para fechar o portão
#define ligar 12 // relé liga/desliga motor

int sinal_controle = 0; // determina o modo de operação
boolean flag;

void setup()
{
pinMode(controle, INPUT_PULLUP); // entrada para sinal do contole remoto
pinMode(abrir, OUTPUT); // saída para abrir o portão
pinMode(fechar, OUTPUT); // saída para fechar o potão
pinMode(ligar, OUTPUT); // relé liga/desliga motor

digitalWrite(ligar,HIGH); // inicia desligado
digitalWrite(abrir,HIGH); // inicia desligado
digitalWrite(fechar,LOW); // inicia desligado

}

void loop()
{

if (digitalRead(controle) && !flag) // sinal do controle verdadeiro
{
flag =1;
sinal_controle += 1; // incrementa número do modo

if (sinal_controle > 3) // se maior que 3, reinicia

sinal_controle = 0;
delay (1000); // segurança

}

else if (!digitalRead(controle) && flag) // sinal do relé falso
{
flag=0;
sinal_controle+=1; //incrementa número do modo

if (sinal_controle > 3) // maior que três reinicia

sinal_controle = 0;
delay (1000); //segurança
}

switch (sinal_controle) // determinando operação
{
case 0:
digitalWrite (ligar, HIGH); // motor parado
break;

case 1:
digitalWrite (ligar,LOW); // motor ligado. Portão abrindo
break;

case 2:
digitalWrite (ligar,HIGH); // motor parado
digitalWrite (fechar,HIGH); // mudança de sentido
break;

case 3:
digitalWrite (ligar,HIGH); // motor ligado
break;

} // end switch
} // end loop

De onde copiaste esse código?

Para já os comentários não condizem com o código... o que torna tudo dificil de entender.
Depois o modo como tens o botão ligado não condiz com os testes que fazes.

Queres explicar o que o código é suposto fazer?

Bom dia!!!

Copiei esse código de projeto semelhante e fiz algumas modificações.

No projeto original funciona normal, mas não consigo usar no meu projeto. Não consigo identificar o erro!

O que eu quero fazer é:

1 toque no controle abrir o portão;

1 toque no controle parar o portão;

1 toque no controle fechar o portão;

continuamente...

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