// Deklarasi pin untuk tombol dan LED
const int buttonPin = 2; // Pin untuk tombol
const int ledPins[] = {27, 14, 12, 13}; // Pin untuk 4 LED
int buttonState; // Variabel untuk menyimpan keadaan tombol
int lastButtonState = LOW; // Keadaan tombol terakhir
unsigned long lastDebounceTime = 0; // Waktu tombol terakhir ditekan
unsigned long debounceDelay = 50; // Debounce delay (50ms)
// Variabel untuk menghitung jumlah penekanan
int pressCount = 0;
// Variabel untuk menyimpan status LED terakhir
int lastLedState = 0;
// Variabel untuk jeda setelah penekanan tombol
unsigned long lastPressTime = 0; // Waktu tombol terakhir ditekan
unsigned long waitTime = 1000; // Jeda 1 detik sebelum LED menyala
void setup() {
// Set LED sebagai output
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Set tombol sebagai input
pinMode(buttonPin, INPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
// Cek apakah tombol mengalami perubahan (debounce)
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
// Jika tombol stabil selama debounce delay, update state
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
// Jika tombol ditekan (HIGH ke LOW transition)
if (buttonState == HIGH) {
pressCount++; // Tambah hitungan penekanan
// Hitungan berulang setelah 16 (0-15), reset ke 0 setelah mencapai 16
pressCount = pressCount % 16;
// Catat waktu terakhir tombol ditekan untuk mulai menghitung jeda
lastPressTime = millis();
// Simpan status LED terbaru sesuai dengan pressCount
lastLedState = pressCount;
}
}
}
// Cek apakah jeda 1 detik sudah berlalu setelah tombol ditekan
if ((millis() - lastPressTime) >= waitTime) {
// Update LED berdasarkan hitungan setelah 1 detik
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], (lastLedState >> i) & 1);
}
// Setelah LED menyala, reset pressCount segera
pressCount = 0; // Reset hitungan penekanan
}
lastButtonState = reading; // Simpan state tombol terakhir
}