#include <LiquidCrystal_I2C.h>
// integrasi led
const int col = 16;
const int row = 2;
LiquidCrystal_I2C lcd(0x27, col, row);
int pcc = 0;
// pin led
const int led[] = {5, 18, 19, 23};
// pin pot
const int pot = 35;
// variabel untuk millis
unsigned long previousMillis = 0;
unsigned long previousMillisLcd = 0;
unsigned long intervalLcd = 1000; // Interval untuk tampilan pesan di LCD
int ledIndex = 0;
int nilaidelay = 250;
void setup() {
Serial.begin(115200);
// validasi lcd
lcd.init();
lcd.backlight();
// validasi led
for (int i = 0; i < 4; i++) {
pinMode(led[i], OUTPUT);
}
}
void tampilkanPesan(String pesan) {
lcd.setCursor(pcc, 0);
lcd.print(pesan);
previousMillisLcd = millis(); // Catat waktu saat pesan mulai tampil
}
void loop() {
unsigned long currentMillis = millis();
// Baca nilai potensiometer dan hitung nilai delay
int nilaipot = analogRead(pot);
int nilaidelayBaru = map(nilaipot, 0, 4095, 500, 50);
// Cek apakah nilai delay berubah
if (nilaidelayBaru != nilaidelay) {
nilaidelay = nilaidelayBaru;
}
// Mengatur led dengan millis
if (currentMillis - previousMillis >= nilaidelay) {
previousMillis = currentMillis;
// Matikan semua LED
for (int i = 0; i < 4; i++) {
digitalWrite(led[i], LOW);
}
// Nyalakan LED sesuai index
digitalWrite(led[ledIndex], HIGH);
// Pindah ke LED berikutnya
ledIndex++;
if (ledIndex >= 4) {
ledIndex = 0;
}
}
// Tampilkan pesan di LCD tanpa menghambat LED
if (currentMillis - previousMillisLcd >= intervalLcd) {
lcd.clear(); // Hapus pesan setelah interval tertentu
}
// Menampilkan pesan sesuai dengan nilaidelay
if (nilaidelay < 50) {
tampilkanPesan("cepat bet");
} else if (nilaidelay < 150) {
tampilkanPesan("cepat ");
} else if (nilaidelay < 250) {
tampilkanPesan("sedang ");
} else if (nilaidelay < 500) {
tampilkanPesan("pelan ");
}
}