#include <LiquidCrystal.h>
LiquidCrystal lcd(13,12,11,10,9,8);
const int hallSensorPin = 2; // connect the hall effect sensor on pin 2
const unsigned long sampleTime = 1000;
const int maxRPM = 1260; // maximum RPM for LCD Bar
int rpmMaximum = 0;
void setup()
{
pinMode(hallSensorPin,INPUT);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("MoToR_____12v DC");
delay(1000);
lcd.clear();
}
void loop()
{
delay(100);
int rpm = getRPM();
if (rpm > rpmMaximum) rpmMaximum = rpm;
lcd.clear();
displayRPM(rpm);
displayBar(rpm);
}
int getRPM()
{
int count = 0;
boolean countFlag = LOW;
unsigned long currentTime = 0;
unsigned long startTime = millis();
while (currentTime <= sampleTime)
{
if (digitalRead(hallSensorPin) == HIGH)
{
countFlag = HIGH;
}
if (digitalRead(hallSensorPin) == LOW && countFlag == HIGH)
{
count++;
countFlag=LOW;
}
currentTime = millis() - startTime;
}
int countRpm = int(60000/float(sampleTime))*count;
return countRpm;
}
void displayRPM(int rpm)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(rpm,DEC);
lcd.setCursor(7,0);
lcd.print(rpmMaximum, DEC);
lcd.setCursor(13,0);
lcd.print("MAX");
Serial.print("RPM = ");
Serial.print(rpm);
Serial.print(" MAX RPM = ");
Serial.println(rpmMaximum);
}
void displayBar(int rpm)
{
int numOfBars=map(rpm,0,maxRPM,0,15);
lcd.setCursor(0,1);
if (rpm!=0)
{
for (int i=0; i<=numOfBars; i++)
{
lcd.setCursor(i,1);
lcd.write(1023);
}
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
lcd:VSS
lcd:VDD
lcd:V0
lcd:RS
lcd:RW
lcd:E
lcd:D0
lcd:D1
lcd:D2
lcd:D3
lcd:D4
lcd:D5
lcd:D6
lcd:D7
lcd:A
lcd:K
pot1:GND
pot1:SIG
pot1:VCC
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO