const int buttonRight = 5; // Pin untuk button ke kanan
const int buttonLeft = 6; // Pin untuk button ke kiri
const int ledPins[] = {7, 8, 9}; // Pin untuk LED
const int numLeds = 3; // Jumlah LED
int ledIndex = 0; // Indeks LED yang aktif
bool buttonRightState = 0; // Status button ke kanan
bool lastButtonRightState = 0; // Status button ke kanan sebelumnya
bool buttonLeftState = 0; // Status button ke kiri
bool lastButtonLeftState = 0; // Status button ke kiri sebelumnya
bool movingRight = false; // Status apakah LED bergerak ke kanan
bool movingLeft = false; // Status apakah LED bergerak ke kiri
void setup() {
// Inisialisasi pin LED sebagai output
for (int i = 0; i < numLeds; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Inisialisasi pin button sebagai input dengan pull-up
pinMode(buttonRight, INPUT_PULLUP);
pinMode(buttonLeft, INPUT_PULLUP);
}
void loop() {
// Membaca status button kanan dan kiri
buttonRightState = digitalRead(buttonRight);
buttonLeftState = digitalRead(buttonLeft);
// Jika button kanan ditekan (LOW karena pull-up)
if (buttonRightState == LOW && lastButtonRightState == HIGH) {
movingRight = true; // Aktifkan gerakan ke kanan
movingLeft = false; // Nonaktifkan gerakan ke kiri
delay(200); // Debouncing sederhana
}
// Jika button kiri ditekan (LOW karena pull-up)
if (buttonLeftState == LOW && lastButtonLeftState == HIGH) {
movingLeft = true; // Aktifkan gerakan ke kiri
movingRight = false; // Nonaktifkan gerakan ke kanan
delay(200); // Debouncing sederhana
}
// Jika gerakan ke kanan aktif
if (movingRight) {
// Mematikan semua LED
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
// Menyalakan LED sesuai indeks saat ini
digitalWrite(ledPins[ledIndex], HIGH);
// Memajukan indeks ke kanan
ledIndex++;
// Jika indeks melebihi jumlah LED, reset ke 0
if (ledIndex >= numLeds) {
ledIndex = 0;
}
delay(300); // Sesuaikan kecepatan gerakan
}
// Jika gerakan ke kiri aktif
if (movingLeft) {
// Mematikan semua LED
for (int i = 0; i < numLeds; i++) {
digitalWrite(ledPins[i], LOW);
}
// Menyalakan LED sesuai indeks saat ini
digitalWrite(ledPins[ledIndex], HIGH);
// Memundurkan indeks ke kiri
ledIndex--;
// Jika indeks kurang dari 0, reset ke LED terakhir
if (ledIndex < 0) {
ledIndex = numLeds - 1;
}
delay(300); // Sesuaikan kecepatan gerakan
}
// Simpan status button sebelumnya untuk deteksi perubahan
lastButtonRightState = buttonRightState;
lastButtonLeftState = buttonLeftState;
}