Hola que tal pasa que debemos de entregar un tacometro hecho con arduino 1 , motor amarillo , iman, pwm, diodo, potenciometro, sensor de efecto hall, pantalla LSD 1602A, ya lo pusimos a prueba y hasta ahi todo bien mide las revoluciones y numero de vueltas pero el unico problema es que al tener revoluciones bajas no decrementa la cuenta hasta 0, se queda en un numero de revoluciones por arriba de 25 , ya buscamos 1001 formas y no nos ha funcionado , estaria bastante agradecido si nos pudieran ayudar , cabe recalcar que mi profesor no acepta que de 25 revoluciones pasa a 0 cuando deje de detectar campo magnetico, les paso el codigo.
#include <LiquidCrystal.h>
const int sensorPin = 9;
unsigned long tiempoActual = 0;
unsigned long tiempoAnterior = 0;
int vueltaCount = 0;
int currentSensorValue;
int previousSensorValue = HIGH;
double velocidad = 0;
int rpm = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Pines para el LCD
void setup() {
lcd.begin(16, 2);
pinMode(sensorPin, INPUT);
Serial.begin(9600);
}
void loop() {
currentSensorValue = digitalRead(sensorPin);
// Detectar transición de HIGH a LOW (imán detectado)
if (currentSensorValue == LOW && previousSensorValue == HIGH) {
vueltaCount++;
calcularRPM();
mostrarLCD();
previousSensorValue = LOW;
} else if (currentSensorValue == HIGH && previousSensorValue == LOW) {
previousSensorValue = HIGH;
}
}
void calcularRPM() {
tiempoActual = micros();
unsigned long tiempoDiferencia = tiempoActual - tiempoAnterior;
if (tiempoDiferencia > 0) {
rpm = 60000000 / tiempoDiferencia; // Calcular RPM directamente
tiempoAnterior = tiempoActual;
}
}
void mostrarLCD() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RPM: ");
lcd.print(rpm);
lcd.setCursor(0, 1);
lcd.print("Vuelta: ");
lcd.print(vueltaCount);
delay(500);
}