#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Inisialisasi LCD dengan alamat 0x27 dan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
pinMode(A0, INPUT); // Input dari potensiometer
pinMode(4, OUTPUT); // Lampu hijau
pinMode(3, OUTPUT); // Lampu kuning
pinMode(2, OUTPUT); // Lampu merah
Serial.begin(9600); // Inisialisasi komunikasi serial
lcd.init(); // Memulai LCD
lcd.backlight(); // Menghidupkan lampu latar LCD
lcd.clear(); // Membersihkan layar LCD
lcd.setCursor(0, 0); // Set posisi awal LCD
lcd.print("Potensio Value:");
}
void loop()
{
int potValue = analogRead(A0); // Membaca nilai analog dari potensiometer
int percent = map(potValue, 0, 1023, 0, 100); // Memetakan nilai ke persentase (0-100%)
// Menampilkan nilai di Serial Monitor
Serial.print("Potentiometer Value: ");
Serial.print(potValue);
Serial.print(" (");
Serial.print(percent);
Serial.println("%)");
// Menampilkan nilai di LCD
lcd.setCursor(0, 1); // Pindah ke baris kedua
lcd.print("Persen: ");
lcd.print(percent);
lcd.print("% "); // Spasi tambahan untuk menghapus nilai lama
// Logika kontrol lampu
if (percent <= 33)
{
// Hanya lampu hijau menyala
digitalWrite(4, HIGH); // Hijau ON
digitalWrite(3, LOW); // Kuning OFF
digitalWrite(2, LOW); // Merah OFF
lcd.setCursor(0, 0);
lcd.print("Lampu: Hijau "); // Status lampu di baris pertama
}
else if (percent <= 66)
{
// Lampu hijau dan kuning menyala
digitalWrite(4, HIGH); // Hijau ON
digitalWrite(3, HIGH); // Kuning ON
digitalWrite(2, LOW); // Merah OFF
lcd.setCursor(0, 0);
lcd.print("Lampu: Hijau+Kuning");
}
else if (percent <= 99)
{
// Ketiga lampu menyala
digitalWrite(4, HIGH); // Hijau ON
digitalWrite(3, HIGH); // Kuning ON
digitalWrite(2, HIGH); // Merah ON
lcd.setCursor(0, 0);
lcd.print("Lampu: Semua ON ");
}
else
{
// Ketiga lampu berkedip pada nilai 100%
lcd.setCursor(0, 0);
lcd.print("Lampu: Berkedip ");
digitalWrite(4, HIGH); // Hijau ON
digitalWrite(3, HIGH); // Kuning ON
digitalWrite(2, HIGH); // Merah ON
delay(200); // Jeda 200 ms
digitalWrite(4, LOW); // Hijau OFF
digitalWrite(3, LOW); // Kuning OFF
digitalWrite(2, LOW); // Merah OFF
delay(200); // Jeda 200 ms
}
delay(100); // Jeda untuk kestabilan pembacaan
}