Foi me proposto a produção de um brinquedo, dai eu decidi que faria uma Caixa teimosa, mas agora que eu terminei e fui testar o meu código não funciona, eu sei que o problema é no loop, e que esta relacionado com o o laço "do while" mas não sei como resolver. Alguém me dá uma forcinha, o código está abaixo:

#include <Servo.h>


const int buttonPin = 2;
int buttonState = 0;
int vezes = 0;

Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos; // variable to store the servo position
long timeDelay;

void setup()
{
pinMode(buttonPin, INPUT_PULLUP);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop()
{
buttonState = digitalRead(buttonPin); // Read the button position
if (buttonState == HIGH) {
vezes += 1;
do{
for(pos = myservo.read(); pos >=20; pos -= 1) { // goes from 90 degrees to 20 degrees in 1 step
myservo.write(pos); // tell servo to go to position in variable 'ONpos'
timeDelay = random(15, 30);
delay(5); // randomize wait time for the servo to reach the position
}
} while (vezes >= 1 && vezes <= 10);
do{
delay(5000);
for(pos = myservo.read(); pos >=20; pos -= 1) { // goes from 90 degrees to 20 degrees in 1 step
myservo.write(pos); // tell servo to go to position in variable 'ONpos'
timeDelay = random(10, 30);
delay(1); // randomize wait time for the servo to reach the position
}
} while (vezes = 11);
do{
for(pos = myservo.read(); pos >=20; pos -= 1) { // goes from 90 degrees to 20 degrees in 1 step
myservo.write(pos); // tell servo to go to position in variable 'ONpos'
timeDelay = random(10, 30);
delay(timeDelay); // randomize wait time for the servo to reach the position
}
} while (vezes > 12 && vezes <= 30);
do{
delay(5000);
for(pos = myservo.read(); pos >=20; pos -= 1) { // goes from 90 degrees to 20 degrees in 1 step
myservo.write(pos); // tell servo to go to position in variable 'ONpos'
timeDelay = random(10, 30);
delay(1); // randomize wait time for the servo to reach the position
}
} while (vezes = 31);
do{
for(pos = myservo.read(); pos >=20; pos -= 1) { // goes from 90 degrees to 20 degrees in 1 step
myservo.write(pos); // tell servo to go to position in variable 'ONpos'
timeDelay = random(10, 30);
delay(timeDelay); // randomize wait time for the servo to reach the position
}
} while (vezes > 31 && vezes <= 60);
do{
delay(5000);
for(pos = myservo.read(); pos >=20; pos -= 1) { // goes from 90 degrees to 20 degrees in 1 step
myservo.write(pos); // tell servo to go to position in variable 'ONpos'
timeDelay = random(10, 30);
delay(1); // randomize wait time for the servo to reach the position
}
} while (vezes = 61);
do{
for(pos = myservo.read(); pos >=20; pos -= 1) { // goes from 90 degrees to 20 degrees in 1 step
myservo.write(pos); // tell servo to go to position in variable 'ONpos'
timeDelay = random(15, 30);
delay(5); // randomize wait time for the servo to reach the position
}
} while (vezes >= 62 && vezes <= 80);

}
/****************************************Volta a Posição Inicial*******************************************************************/
else {
timeDelay = random(1, 4);
for(pos = myservo.read(); pos <=90; pos += timeDelay) {// goes from 20 degrees to 90 degrees in 1 step
myservo.write(pos); // tell servo to go to position in variable 'OFFpos'
delay(timeDelay); // randomize wait time for the servo to reach the position
}
}
}

Exibições: 373

Anexos

Responder esta

Respostas a este tópico

Depois de uma conversa com o companheiro Luiz Antônio, aqui no lab, eu descobri que o problema está no contador que não para, alguém sabe como resolver isso?

Leandro vc iniciou o buttonPin com o resistor de pullup, e logo em seguida no if ele verifica se o estado do botão esta HIGH e incrementa a variavel vezes, mas como ele sempre vai estar HIGH por conta do resistor interno de pullup sempre irá incrementar. Verifica isso ae e tenta mudar para LOW ok? 

Eu já tirei essa parte do pullup e usei com resistor normal e mesmo assim ele continua com o mesmo erro

vc desabilitou o pullup e colocou o resistor de pullup? da na mesma

Eu posso mudar para vezes++ ? ou daria na mesma?

 

Se seu circuito esta com o botao acionado no GND vc pode colocar if (buttonState == LOW) {

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço