Tacómetro 3ro BE

#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.