Go Down

Topic: Como usar controle remoto de portão no arduino (Read 243 times) previous topic - next topic

mardialsil

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



bubulindo

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?
This... is a hobby.

mardialsil

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...

bubulindo

Code: [Select]


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


This... is a hobby.

Go Up