#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ganti alamat I2C sesuai dengan LCD Anda
const int encoderPin = 32; // Pin GPIO untuk sinyal A dari encoder
volatile int pulseCount = 0;
unsigned long lastTime = 0;
float speed = 0.0;
const float wheelCircumference = 0.628; // Keliling roda dalam meter (contoh: 20cm diameter roda)
void IRAM_ATTR handleEncoder() {
pulseCount++;
}
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(encoderPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(encoderPin), handleEncoder, RISING);
lastTime = millis();
}
void loop() {
unsigned long currentTime = millis();
if (currentTime - lastTime >= 1000) { // Menghitung kecepatan setiap detik
detachInterrupt(digitalPinToInterrupt(encoderPin));
speed = (pulseCount / (currentTime - lastTime)) * wheelCircumference * 60.0;
pulseCount = 0;
lastTime = currentTime;
attachInterrupt(digitalPinToInterrupt(encoderPin), handleEncoder, RISING);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Speed: ");
lcd.print(speed);
lcd.print(" m/min");
Serial.println(speed);
}
}