const int ledPins[] = {5, 18, 19, 21}; // Array pin untuk LED
const int buttonPins[] = {32, 33, 25}; // Array pin untuk tombol
const int potPin = 13; // Pin untuk potensiometer

int buttonStates[] = {0, 0, 0}; // Array status tombol
int ledState = 0; // Variabel status LED
int potValue = 0; // Variabel untuk nilai potensiometer
int ledIndex = 0; // Variabel untuk indeks LED yang sedang menyala
int direction = 1; // Arah gerakan lampu, 1 untuk ke kanan, -1 untuk ke kiri
int delayTime = 100; // Waktu delay awal
int minDelayTime = 20; // Waktu delay minimum (kecepatan maksimum)
int maxDelayTime = 500; // Waktu delay maksimum (kecepatan minimum)

void setup() {
  // Inisialisasi pin LED sebagai OUTPUT
  for (int i = 0; i < 4; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
  // Inisialisasi pin tombol sebagai INPUT_PULLUP
  for (int i = 0; i < 3; i++) {
    pinMode(buttonPins[i], INPUT_PULLUP);
  }
}

void loop() {
  // Baca nilai potensiometer dan ubah menjadi waktu delay
  potValue = analogRead(potPin);
  delayTime = map(potValue, 0, 4095, minDelayTime, maxDelayTime);
  
  // Baca status tombol untuk mengubah arah gerakan lampu
  for (int i = 0; i < 3; i++) {
    if (digitalRead(buttonPins[i]) == LOW) {
      // Tombol ditekan, ubah arah gerakan
      direction *= -1;
      delay(100); // Debouncing
    }
  }
  
  // Nyalakan LED sesuai dengan indeks
  digitalWrite(ledPins[ledIndex], HIGH);
  delay(delayTime);
  digitalWrite(ledPins[ledIndex], LOW);
  
  // Perbarui indeks LED
  ledIndex += direction;
  if (ledIndex >= 4) {
    ledIndex = 0;
  } else if (ledIndex < 0) {
    ledIndex = 3;
  }
}
Loading
esp32-devkit-v1