// Deklarasi pin
int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9}; // Pin untuk 8 LED
int jumlahLed = 8; // Jumlah LED yang digunakan
int pinTombol = 10; // Pin untuk tombol push-button
// Variabel untuk mengontrol posisi LED
int posisiLed = 0; // Posisi LED yang sedang menyala
int statusTombol = 1; // Status tombol saat ini (1 = tidak ditekan, 0 = ditekan)
int statusTombolSebelumnya = 1; // Status tombol sebelumnya
int jeda = 1000; // Interval default untuk menggerakkan LED jeda = n
int ledBerjalan = 1; // Status apakah LED sedang bergerak (1 = bergerak, 0 = berhenti)
void setup() {
// Inisialisasi pin LED sebagai output
for (int i = 0; i < jumlahLed; i++) {
pinMode(ledPins[i], OUTPUT); // Set setiap pin LED sebagai output
digitalWrite(ledPins[i], LOW); // Matikan semua LED di awal
}
// Inisialisasi pin tombol sebagai input pull-up
pinMode(pinTombol, INPUT_PULLUP); // Menggunakan internal pull-up resistor
}
void loop() {
// Membaca status tombol (tombol aktif LOW karena menggunakan pull-up)
statusTombol = digitalRead(pinTombol); // Baca status tombol saat ini
// Jika tombol ditekan (LOW), hentikan pergerakan LED
if (statusTombol == 0 && statusTombolSebelumnya == 1) {
delay(50); // Debounce sederhana untuk mencegah pembacaan ganda
if (digitalRead(pinTombol) == 0) { // Pastikan tombol tetap ditekan setelah debounce
ledBerjalan = 0; // Hentikan pergerakan LED
digitalWrite(ledPins[posisiLed], HIGH); // Nyalakan LED yang terakhir menyala
jeda = jeda - 100; // Kurangi jeda durasi nyala LED untuk mempercepat
if (jeda < 100) {
jeda = 100; // Jangan biarkan jeda kurang dari kecepata yang ditentukkan jeda = n
}
}
}
// Jika tombol dilepas, lanjutkan pergerakan LED
if (statusTombol == 1 && statusTombolSebelumnya == 0) {
delay(50); // Debounce sederhana
if (digitalRead(pinTombol) == 1) { // Pastikan tombol tetap dilepas
ledBerjalan = 1; // Aktifkan pergerakan LED
digitalWrite(ledPins[posisiLed], LOW); // Matikan LED saat ini sebelum melanjutkan
}
}
// Jika LED aktif, gerakkan LED sesuai jeda menggunakan delay()
if (ledBerjalan == 1) {
// Matikan LED saat ini
digitalWrite(ledPins[posisiLed], LOW);
// Pindah ke LED berikutnya (selalu maju ke kanan)
posisiLed = posisiLed + 1;
// Jika mencapai akhir, kembali ke awal (LED pertama)
if (posisiLed >= jumlahLed) {
posisiLed = 0;
}
// Nyalakan LED berikutnya
digitalWrite(ledPins[posisiLed], HIGH);
// Tunggu sesuai dengan jeda yang telah ditentukan
delay(jeda);
}
// Simpan status tombol sebelumnya
statusTombolSebelumnya = statusTombol; // Simpan status tombol untuk pembacaan berikutnya
}