#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C de la pantalla: 0x27, 16 caracteres y 2 líneas
const int sensorPin = 2; // Pin digital donde está conectado el sensor IR
volatile int contador = 0; // Contador de pulsos
unsigned long tiempoAnterior = 0; // Variable para almacenar el tiempo del último conteo
float rpm = 0; // Variable para almacenar las RPM
void contarPulsos() {
contador++; // Incrementar el contador de pulsos
}
void setup() {
Serial.begin(9600); // Inicializar comunicación serial
lcd.init(); // Inicializar la pantalla LCD
lcd.backlight(); // Encender retroiluminación
lcd.setCursor(0, 0); // Colocar cursor en la primera línea
lcd.print("RPM: "); // Mostrar etiqueta de RPM
pinMode(sensorPin, INPUT); // Configurar el pin del sensor como entrada
attachInterrupt(digitalPinToInterrupt(sensorPin), contarPulsos, RISING); // Configurar la interrupción en flanco ascendente
}
void loop() {
unsigned long tiempoActual = millis(); // Obtener el tiempo actual en milisegundos
if (tiempoActual - tiempoAnterior >= 1000) { // Calcular RPM cada segundo
detachInterrupt(digitalPinToInterrupt(sensorPin)); // Desactivar la interrupción para leer el contador
rpm = contador * 60/ 2.0; // Calcular RPM (se asume que hay dos interrupciones por revolución)
lcd.setCursor(5, 0); // Colocar cursor después de "RPM: "
lcd.print(rpm); // Mostrar las RPM en la pantalla LCD
lcd.print(" "); // Limpiar restos de caracteres
contador = 0; // Reiniciar el contador de pulsos
tiempoAnterior = tiempoActual; // Actualizar el tiempo anterior
attachInterrupt(digitalPinToInterrupt(sensorPin), contarPulsos, RISING); // Reactivar la interrupción
}
}
Y la pregunta es?
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.