#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Address 0x27 for a 16x2 I2C LCD
const int sensorPin = A0; // RPM sensor input pin
const int potPin = A1; // Slide potentiometer input pin
const int rpmMin = 700; // Minimum RPM
const int rpmMax = 8000; // Maximum RPM
const int lcdWidth = 16; // LCD width
const int barWidth = 15; // Width of the bar graph
const int numReadings = 10; // Number of readings to average
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("RPM:");
// Set up serial communication for debugging
Serial.begin(9600);
}
void loop() {
// Array to store sensor readings
int sensorReadings[numReadings];
int sensorTotal = 0;
// Take multiple sensor readings and calculate average
for (int i = 0; i < numReadings; i++) {
sensorReadings[i] = analogRead(sensorPin);
sensorTotal += sensorReadings[i];
delay(10); // Delay between readings
}
// Calculate average sensor reading
int sensorAverage = sensorTotal / numReadings;
// Map average sensor value to RPM
int rpm = map(sensorAverage, 0, 1023, rpmMin, rpmMax);
// Print RPM on LCD
lcd.setCursor(5, 0);
lcd.print(" "); // Clear previous RPM value
lcd.setCursor(5, 0);
lcd.print(rpm);
// Display RPM as a bar graph
int barLength = map(rpm, rpmMin, rpmMax, 0, barWidth);
lcd.setCursor(0, 1);
for (int i = 0; i < barLength; i++) {
lcd.print("#");
}
for (int i = barLength; i < barWidth; i++) {
lcd.print(" ");
}
// Debugging: print RPM value to serial monitor
Serial.println(rpm);
delay(100); // Adjust as needed for responsiveness
}