Progra,
Não consigo perceber pois a variável voltas só é incrementada quando o estado da porta muda e essa mudança é para LOW.
O funcionamento seria Igual ao de um botão, botão pressionado (pino norte = HIGH) ou solto (pino norte = LOW)
Como estão as conexões do teu circuito?
Em repouso (sem imã por perto) o sensor é HIGH, certo?
Tenta usar o resistor pull up da porta para manter a porta HIGH (evitar oscilações) até que o sensor a coloque LOW, pode se isso.
int estadoanterior = 1; //O estado HIGH
int voltas = 0;
unsigned long tempo = 0;
int norte=13;
void setup(){
Serial.begin(9600);
pinMode(norte, INPUT); //define a porta como input
digitalWrite(norte, HIGH); // ativa o resistor pullup
}
void loop(){
unsigned long agora;
agora = millis();
int estado = digitalRead(norte);
int rotacao = 0;
if (estado != estadoanterior){ //Se o estado da porta mudou
if(estado == LOW) //Se o estado mudou para LOW
{
Serial.println("polo sul");
voltas++; //Incrementa 1
}
else
Serial.println("polo norte");
}
if (agora - tempo >= 1000){ //1000 milesegundos = 1 segundo
rotacao = voltas/1000; //rotação por segundos
Serial.print("passou um segundo e ");
Serial.print(voltas);
Serial.print(" voltas");
Serial.print(", ");
Serial.print(", RPS ");
Serial.println(rotacao);
tempo = agora; //guarda o tempo atual para que a mensagem apareça um segundo depois
voltas = 0; //zera o contador
}
}
Teu código ficou parecido com o acima? Qual resultado agora? Infelizmente estou no trabalho, mas, a não ser que eu precise de internação imediata, deve funcionar rs
Ou o Hugo pede para trazerem a camisa de força