// Definindo o pino onde o reed switch está conectado
const int reedSwitchPin = 2;
// Variáveis para contagem de pulsos e cálculo de tempo
volatile int pulseCount = 0;
unsigned long lastTime = 0;
unsigned long currentTime = 0;
// Circunferência da roda (em metros)
const float wheelCircumference = 0.5; // ajuste conforme necessário
void setup() {
// Inicializa o pino do reed switch como entrada
pinMode(reedSwitchPin, INPUT);
// Configura a interrupção para contar os pulsos
attachInterrupt(digitalPinToInterrupt(reedSwitchPin), countPulse, FALLING);
// Inicializa a comunicação serial para debug
Serial.begin(9600);
}
void loop() {
// Calcula o tempo atual
currentTime = millis();
// Verifica se houve pelo menos um pulso
if (pulseCount > 0) {
// Calcula o tempo entre os pulsos em segundos
float timeElapsed = (currentTime - lastTime) / 1000.0;
// Calcula a frequência de rotação da roda (em rotações por segundo)
float frequency = 1.0 / timeElapsed;
// Calcula a velocidade do rio (em metros por segundo)
float speed = frequency * wheelCircumference;
// Exibe a velocidade calculada no monitor serial
Serial.print("Velocidade do rio: ");
Serial.print(speed);
Serial.println(" m/s");
// Atualiza o tempo do último pulso
lastTime = currentTime;
// Reseta a contagem de pulsos
pulseCount = 0;
}
}
// Função de interrupção para contar os pulsos do reed switch
void countPulse() {
pulseCount++;
}