// NOTE KOMPONEN
//1.Arduino Uno IR
//2.IR Sensor (menggunakan IR Receiver)
//3.16x2 LCD (pilih yang I2C, lebih praktis)
//4.DC Motor (Gunakan push button sebagai pengganti "deteksi putaran", dengan asumsi bahwa setiap kali tombol ditekan = satu putaran terdeteksi)
//5.Breadboard FULL
//6.LED
//7.Resistor (220 ohm untuk LED)
//8.9V Battery (bisa di-skip karena Wokwi otomatis menyuplai daya)
//Tachometer Digital (Simulasi Tombol)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C umum = 0x27
const byte sensorPin = 2; // Pin tombol / IR
volatile unsigned int pulseCount = 0;
unsigned long lastMeasureTime = 0;
void setup() {
pinMode(sensorPin, INPUT); // gunakan INPUT_PULLUP jika pakai GND langsung
attachInterrupt(digitalPinToInterrupt(sensorPin), countPulse, FALLING);
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Tachometer");
delay(1000);
lcd.clear();
}
void loop() {
unsigned long currentTime = millis();
if (currentTime - lastMeasureTime >= 1000) { // Hitung tiap 1 detik
unsigned int rpm = pulseCount * 60; // 1 detik x 60 = RPM
pulseCount = 0;
lastMeasureTime = currentTime;
lcd.setCursor(0, 0);
lcd.print("RPM:");
lcd.setCursor(5, 0);
lcd.print(rpm);
lcd.print(" "); // untuk bersihkan digit sebelumnya
}
}
void countPulse() {
pulseCount++;
}