Estou desenvolvendo um programa para posicionar um embolo mecânico, não há necessidade de muita precisão, eu coloquei uma roda dentada em um eixo que gera 20 pulsos por volta e habilitei a seguinte interrupção:
attachInterrupt(digitalPinToInterrupt(2), encoder, CHANGE);
A ISR está assim:
void encoder(){
if(dir == 1)pulso ++; // Se o driver gira em um sentido incrementa variável
if(dir == 0)pulso --; // Se o driver gira em outro sentido decrementa variável
conta ++; // Esas são instruções apenas
if(conta == 10){ // para confimrar
digitalWrite(led, !digitalRead(led)); // que os pulsos chegam no pino 2
conta = 0; //
}
}
a variável dir eu a defino como "0" quando o driver faz o motor girar em um sentido e defino como "1" quando ele gira em outro sentido.
Quando eu faço:
while(pulso < x){
Serial.println(pulso);
}
O while funciona perfeito, mas se eu tirar o Serial.println() de dentro do while:
while(pulso < x){
}
Ele não funciona mais, eu não preciso ficar enviando nada de dentro do while, apenas quero que o programa espere até o embolo chegar em uma determinada posição de acordo com os pulsos enviados.
Alguém poderia me ajudar?