Jump to content

"if" encadeados em Arduino


leonardo cunha

Recommended Posts

leonardo cunha

Boa tarde, eu estou a realizar um projeto da escola, onde tenho que usar um Arduíno como controlador...

A minha ideia de projeto era criar um elevador, com 3 andares, onde consoante a seleção do andar ele subia ou descia, usando um motor step, push button, e reed switchs...

Eu já comecei a fazer o código da leitura dos valores do sensor, para assim determinar se desce ou sobe, mas por alguma razão está constantemente a dar erro.

Código:

//   Projeto 5 - <span style="font-weight: 400">Interruptor de luz</span>
#include <Stepper.h>  
int botao1 = 1;
int botao2 = 2;
int botao3 = 3;
int sensor1 = 4;
int sensor2 = 5;
int sensor3 = 6;
const int stepsPerRevolution = 500; 
Stepper myStepper(stepsPerRevolution, 8,10,9,11);

void setup()
{
  pinMode(botao1, INPUT);// define o pino do botao como entrada "INPUT"
  pinMode(botao2, INPUT);// define o pino do botao como entrada "INPUT"
  pinMode(botao3, INPUT);// define o pino do botao como entrada "INPUT"
  myStepper.setSpeed(60);  //velocidade do motor
  botao1 == LOW;  //colocar os botoes a zero no inicio
  botao2 == LOW;  //colocar os botoes a zero no inicio
  botao3 == LOW;  //colocar os botoes a zero no inicio
}
 
void loop()
{
  //Colocar o Elevador no Primeiro Piso sempre que iniciado
     if(digitalRead(sensor1) == LOW) && (digitalRead(sensor2) == HIGH || digitalRead(sensor3) == HIGH) 
       {
        do{ 
           myStepper.step(-10);  //sobe ou desce o motor, neste caso, como é negativo desce
         } while (sensor1 == LOW);
       }
  //Esperar as instruções do utilizador
    if(digitalRead(botao1) == HIGH) // Se o botão for pressionado
     {
      if(digitalRead(sensor1) == LOW) && (digitalRead(sensor2) == HIGH || digitalRead(sensor3) == HIGH) //Se o sensor não estiver ativo
       {
        do{ 
           myStepper.step(-10);  //sobe ou desce o motor, neste caso, como é negativo desce
         } while (sensor1 == LOW);
       }
    else
     {
     }
    if(digitalRead(botao2) == HIGH) // Se o botão for pressionado
     {
      if(digitalRead(sensor2) == LOW) && (digitalRead(sensor1) == HIGH) //Se o sensor não estiver ativo
       {
        do{ 
           myStepper.step(10);   //sobe ou desce o motor, neste caso, como é positivo sobe
         } while (sensor2 == LOW);
       }
      if(digitalRead(sensor2) == LOW) && (digitalRead(sensor3) == HIGH) //Se o sensor não estiver ativo
       {
        do{ 
           myStepper.step(-10);  //sobe ou desce o motor, neste caso, como é negativo desce
         } while (sensor3 == LOW);
       }
     }
    else
     {
     }
    if(digitalRead(botao3) == HIGH) // Se o botão for pressionado
     {
      if(digitalRead(sensor3) == LOW) && (digitalRead(sensor2) == HIGH || digitalRead(sensor1) == HIGH)
       {
        do{ 
          myStepper.step(10);  //sobe ou desce o motor, neste caso, como é positivo sobe
         }  while (sensor3 == LOW); 
       }
     }
    else
     {
     }
}

 

Alguém sabe o porque, e como resolver isto? é que o erro é apenas nos "ifs" que tem de analisar os 3 sensores.

Desde já obrigado pela ajuda.👍

Leonardo Cunha

Link to post
Share on other sites
Rui Carlos

Sem perceber grande coisa de Arduino, parece-me que isto é um potencial ciclo infinito:

        do{ 
           myStepper.step(-10);  //sobe ou desce o motor, neste caso, como é negativo desce
         } while (sensor1 == LOW);

Diria que esses loops deviam sair do código.  Adicionalmente, tens aí if (...) {...} else {} if (...) que deviam dar para converter em if (...) {...} else if (...).  E com isto simplificavas o código, o que ajudava a encontrar outros bugs.

 

Por último, dava jeito ler os avisos que te são mostrados ao criares um tópico, em particular o relativo à formatação de código, e às mensagens de erro.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.