leonardo cunha Posted May 14, 2021 at 06:23 PM Report Share #622314 Posted May 14, 2021 at 06:23 PM 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 comment Share on other sites More sharing options...
Rui Carlos Posted May 15, 2021 at 11:53 AM Report Share #622319 Posted May 15, 2021 at 11:53 AM 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. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now