Boas sou iniciante no arduino e na programaçao, estou a desenvolver um mecanismo e tenho um microswitch ligado.
o código está assim:
if (digitalRead(switchPin2) == LOW)
{
digitalWrite(motortubo, HIGH); // liga o motor
delay(6000); // fica ligado 6segundos
digitalWrite(motortubo, LOW); // desliga o motor do tubo
}
else
{
digitalWrite(motortubo, LOW); // Aqui é que a porca torce o rabo
}
preciso que se o switchPin2 estiver HIGH ele fique á espera sem avançar mais o programa até que fique LOW
Podes usar um while(switchPin2){};
Quando o pino estiver alto a avaliaçao que o while fará sera verdadeira e entrara dentro do while e so saira ate que seja falso.Desta forma penso que fara o que queres
while(switchPin2){};//Nao faz nada se entrar neste loop
if (digitalRead(switchPin2) == LOW)
{
digitalWrite(motortubo, HIGH); // liga o motor
delay(6000); // fica ligado 6segundos
digitalWrite(motortubo, LOW); // desliga o motor do tubo
}
else
{
digitalWrite(motortubo, LOW); // Aqui é que a porca torce o rabo
}
Já agora... e desculpa se o tom não for o mais adequado...
Tira esse delay() daí. Isso é uma má prática. (pensando nisso, acho que talvez valha a pena fazer um tutorial sobre porque não usar um delay. :\
Se quiseres atingir o mesmo resultado, faz assim:
unsigned long now=0, then=0;
while(digitalRead(switchPin2) == HIGH);//Nao faz nada se entrar neste loop
if (digitalRead(switchPin2) == LOW)
{
digitalWrite(motortubo, HIGH); // liga o motor
then = millis();
}
now = millis();
if ((now - then) > 6000) {
digitalWrite(motortubo, LOW); // desliga o motor do tubo
}
Assim o teu código não fica "preso" naquele delay.
Reparei que tens outro problema com a porca... mas não percebi o que era. No entanto, isso pode ser resolvido na nova condicão que coloquei.
tentei o que o HugoPT disse e nao resultou, ficava parado nessa parte, mesmo que o switchPin2 passase a LOW, nao andava mais, faltava á frente o == HIGH.
De momento ficou assim:
while(digitalRead(switchPin2) == HIGH) { }
if (digitalRead(switchPin2) == LOW)
{
digitalWrite(motortubo, HIGH); // liga o motor do tubo
delay(6000); // fica ligado 6segundos
digitalWrite(motortubo, LOW); // desliga o motor do tubo
}
Resumindo adicionei a linha while(digitalRead(switchPin2) == HIGH) { }, e apaguei o ELSE .
Bubulindo, mais tarde coloco o codigo como postaste e depois deixo feedback, sou muito novato nisto mas já li por ai que nao se deve usar o DELAY, mas não percebi o porquê,
o que o HugoPT falha porque, como vês no meu código, a variável switchpin nunca é actualizada. Ou seja;
while(switchPin2){};//mas não tens funcão nenhuma para mudar o estado de switchpin2... para isso terias de fazer while(digitalRead(switchPin2));
if (digitalRead(switchPin2) == LOW) //aqui já alteras o estado da variável, mas nunca entras aqui se a variável não mudar de estado na linha anterior.