// pin tombol
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int ledPin1 = 12;
const int ledPin2 = 11;
const int ledPin3 = 10;
const int ledPin4 = 5;
// Variabel status tombol
bool lastButton1State = HIGH;
bool lastButton2State = HIGH;
bool lastButton3State = HIGH;
// Variabel untuk status LED
bool led1State = LOW;
bool led2State = LOW;
bool led3State = LOW;
bool led4State = LOW;
int currentTask = 0; // 0 = Greeting, 1 = Selection, 2 = Task A, 3 = Task B, 4 = Task C
// Timer untuk Task B
unsigned long previousMillis = 0;
const long interval = 1000; // Interval perubahan 1 detik untuk Task B
int counter = 0;
void setup() {
// Set pin tombol sebagai input dengan pull-up internal
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
// Set pin LED sebagai output
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Matikan semua LED di awal
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
// Greeting
greeting();
}
void loop() {
// Baca status tombol
bool button1State = digitalRead(buttonPin1);
bool button2State = digitalRead(buttonPin2);
bool button3State = digitalRead(buttonPin3);
switch (currentTask) {
case 0: // Greeting
// Tidak ada interaksi tombol saat greeting
return;
case 1: // Selection
// LED kuning menyala untuk menandakan masuk ke task
digitalWrite(ledPin4, HIGH);
// Pindah ke task berikutnya jika tombol ditekan
if (button1State == LOW && lastButton1State == HIGH) {
delay(50); // Debounce delay
currentTask = 2; // Pindah ke Task A
} else if (button2State == LOW && lastButton2State == HIGH) {
delay(50); // Debounce delay
currentTask = 3; // Pindah ke Task B
} else if (button3State == LOW && lastButton3State == HIGH) {
delay(50); // Debounce delay
currentTask = 4; // Pindah ke Task C
}
lastButton1State = button1State;
lastButton2State = button2State;
lastButton3State = button3State;
break;
case 2: // Task A
// Toggle LED1 dengan Button 1
if (button1State == LOW && lastButton1State == HIGH) {
led1State = !led1State;
digitalWrite(ledPin1, led1State);
delay(50); // Debounce delay
}
lastButton1State = button1State;
// Toggle LED2 dengan Button 2
if (button2State == LOW && lastButton2State == HIGH) {
led2State = !led2State;
digitalWrite(ledPin2, led2State);
delay(50); // Debounce delay
}
lastButton2State = button2State;
// Toggle LED3 dan LED4 dengan Button 3
if (button3State == LOW && lastButton3State == HIGH) {
led3State = !led3State;
led4State = !led4State; // LED4 mengikuti LED3
digitalWrite(ledPin3, led3State);
digitalWrite(ledPin4, led4State);
delay(50); // Debounce delay
}
lastButton3State = button3State;
break;
case 3: // Task B
// Binary counter 4-bit
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
counter++;
if (counter > 15) counter = 0; // Reset counter jika lebih dari 15 (4-bit)
// Update LED status sesuai counter
digitalWrite(ledPin4, HIGH); // MSB
digitalWrite(ledPin3, counter & 1); // LSB
// Update LED lainnya sesuai bit counter
}
break;
case 4: // Task C
// Toggle LED1 dengan Button 1
if (button1State == LOW && lastButton1State == HIGH) {
led1State = !led1State;
digitalWrite(ledPin1, led1State);
delay(50); // Debounce delay
}
// Toggle LED2 dengan Button 2 (LED1 harus menyala)
if (led1State == HIGH && button2State == LOW && lastButton2State == HIGH) {
led2State = !led2State;
digitalWrite(ledPin2, led2State);
delay(50); // Debounce delay
}
// Toggle LED3 dan LED4 dengan Button 3 (LED1 mati dan LED2 menyala)
if (led1State == LOW && led2State == HIGH && button3State == LOW && lastButton3State == HIGH) {
led3State = !led3State;
led4State = !led4State;
digitalWrite(ledPin3, led3State);
digitalWrite(ledPin4, led4State);
delay(50); // Debounce delay
}
lastButton1State = button1State;
lastButton2State = button2State;
lastButton3State = button3State;
break;
}
}
void greeting() {
// Menyalakan LED sesuai urutan dengan delay 2 detik
digitalWrite(ledPin1, HIGH);
delay(2000);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
delay(2000);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
delay(2000);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, HIGH);
delay(2000);
digitalWrite(ledPin4, LOW);
// Setelah greeting, pindah ke task selection
currentTask = 1;
}