#include <LiquidCrystal.h> // Se declara la libreria de la pantalla
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Se inicializan los pines que usara
const int releReedPin = 2; // Entrada del pulso
int estadoRele = 1; // Estado inicial del pulso
int ultimoEstadoRele = 1; // Estado anterior del pulso que ira cambiando
long tiempo_anterior = 0; // Tiempo anterior medido
long tiempo_una_rev = 0; // Tiempo de una revolucion
unsigned long tiempo_ahora; // Tiempo actual medido
long rpm; // Valor de RPM primario
long vueltas; // Valor de RPM secundario
void setup()
{
// Se inicializa la pantalla y se declara el pulso como entrada ademas se imprime la leyenda velocidad en la lcd
pinMode(releReedPin, INPUT);
lcd.begin(16,2);
lcd.print(" Velocidad ");
}
void loop()
{
estadoRele = digitalRead(releReedPin); // Lee el estado del rele
// Compara el estado del rele con el estado previo
if (estadoRele != ultimoEstadoRele)
{
// Si el estado ha cambiado realiza el calculo de las RPM y lo despliega
if (estadoRele == LOW)
{
tiempo_ahora =millis();
tiempo_una_rev = tiempo_ahora - tiempo_anterior;
rpm = 60000 / tiempo_una_rev; // 1 minuto = 60000 ms
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(rpm);
lcd.setCursor(6,1);
lcd.print(" RPM");
}
else {
// Si el estado actual es HIGH pasa de ON a OFF y se despliega el valor de RPM secundario que seraia el valor anterior
vueltas=rpm;
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(vueltas);
lcd.setCursor(6,1);
lcd.print(" RPM");
tiempo_anterior = tiempo_ahora;
}
}
// Guarda el estado actual como ultimo estado
ultimoEstadoRele = estadoRele;
}
No hay comentarios:
Publicar un comentario