const int ledPins[] = {3, 4, 5, 6}; // LED pins
const int tombol = 2; // Push button pin
const int potensio = A0; // Potentiometer pin
int potValue = 0; // Potentiometer value
bool tombolDitekan = false; // Button press flag
bool arahLed = true; // LED direction flag (true: left to right, false: right to left)
bool statusLed = false; // LED state flag (true: LEDs are on, false: LEDs are off)
bool arahSebelumnya = true; // Previous LED direction flag
bool arahBerubah = false; // Flag to indicate direction change
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(tombol, INPUT);
Serial.begin(9600);
}
void loop() {
potValue = analogRead(potensio);
// supaya tombol bisa sekali pencet
if (digitalRead(tombol) == HIGH && !tombolDitekan) {
tombolDitekan = true;
if (potValue > 300) {
if (arahBerubah) {
arahLed = !arahLed;
arahBerubah = false;
}
statusLed = !statusLed; // efek toogle dari led
}
}
// pengecekan kondisi dari nilai potensio
if (potValue > 300 && potValue <= 800) {
// kontrol potensio untuk led kiri-kanan
if (arahSebelumnya != true) {
arahBerubah = true;
statusLed = false;
}
arahSebelumnya = true;
} else if (potValue > 800) {
// kontrol potensio untuk led kanan-kiri
if (arahSebelumnya != false) {
arahBerubah = true;
statusLed = false;
}
arahSebelumnya = false;
} else {
// matiin led
statusLed = false;
}
// kondisi led
if (statusLed) {
if (arahLed) {
// nyalain led dari kanan ke kiri
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], HIGH);
delay(50); // delay for each LED
digitalWrite(ledPins[i], LOW);
delay(50); // delay between LEDs
}
} else {
// nyalain led dari kanan ke kiri
for (int i = 3; i >= 0; i--) {
digitalWrite(ledPins[i], HIGH);
delay(50); // delay for each LED
digitalWrite(ledPins[i], LOW);
delay(50); // delay between LEDs
}
}
} else {
// matiin led
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[i], LOW);
}
}
// cetak potensio dan tombol di serial monitor
Serial.print("Potentiometer value: ");
Serial.print(potValue);
Serial.print(" | Button state: ");
Serial.println(digitalRead(tombol));
// reset led mati
if (digitalRead(tombol) == LOW) {
tombolDitekan = false;
}
delay(100); // delay untuk serial print
}