// mendefinisikan pin untuk lampu lalu lintas persimpangan 1
#define ledMerah1 13
#define ledKuning1 12
#define ledHijau1 11

// mendefinisikan pin untuk lampu lalu lintas persimpangan 2
#define ledMerah2 10
#define ledKuning2 9
#define ledHijau2 8

// mendefinisikan pin untuk lampu lalu lintas persimpangan 3
#define ledMerah3 7
#define ledKuning3 6
#define ledHijau3 5

// mendefinisikan tombol pedestrian untuk setiap persimpangan
#define pedestrianPersimpangan1 4
#define pedestrianPersimpangan2 3
#define pedestrianPersimpangan3 2

void setup() {
  // Menginisialisasi seluruh pin yang digunakan untuk led sebagai output
  pinMode(ledMerah1, OUTPUT);
  pinMode(ledKuning1, OUTPUT);
  pinMode(ledHijau1, OUTPUT);
  pinMode(ledMerah2, OUTPUT);
  pinMode(ledKuning2, OUTPUT);
  pinMode(ledHijau2, OUTPUT);
  pinMode(ledMerah3, OUTPUT);
  pinMode(ledKuning3, OUTPUT);
  pinMode(ledHijau3, OUTPUT);

  // menginisialisasi input untuk tombol pedestrian pada setiap persimpangan
  pinMode(pedestrianPersimpangan1, INPUT_PULLUP);
  pinMode(pedestrianPersimpangan2, INPUT_PULLUP);
  pinMode(pedestrianPersimpangan3, INPUT_PULLUP);

}

void loop() {
  // Persimpangan 1 lampu hijau
  digitalWrite(ledMerah1, LOW);
  digitalWrite(ledKuning1, LOW);
  digitalWrite(ledHijau1, HIGH);

  // Persimpangan 2 lampu merah
  digitalWrite(ledMerah2, HIGH);
  digitalWrite(ledKuning2, LOW);
  digitalWrite(ledHijau2, LOW);

  // Persimpangan 3 lampu merah
  digitalWrite(ledMerah3, HIGH);
  digitalWrite(ledKuning3, LOW);
  digitalWrite(ledHijau3, LOW);

  // menunggu selama 10 detik atau sampai tombol pedestrian ditekan
  for (int i = 0; i < 100; i++) {
    delay(100);
    if(digitalRead(pedestrianPersimpangan1)== LOW){
      break;
    }
  }

  // persimpangan 1 lampu kuning selama 3 detik
  digitalWrite(ledMerah1, LOW);
  digitalWrite(ledKuning1, HIGH);
  digitalWrite(ledHijau1, LOW);
  delay(3000);

  // persimpangan 1 lampu merah
  digitalWrite(ledMerah1, HIGH);
  digitalWrite(ledKuning1, LOW);
  digitalWrite(ledHijau1, LOW);
  
  // persimpangan 2 lampu hijau 
  digitalWrite(ledMerah2, LOW);
  digitalWrite(ledKuning2, LOW);
  digitalWrite(ledHijau2, HIGH);

  // menunggu selama 10 detik atau sampai tombol pedestrian ditekan
  for (int i = 0; i < 100; i++) {
    delay(100);
    if(digitalRead(pedestrianPersimpangan2)== LOW){
      break;
    }
  }

  // persimpangan 2 lampu kuning selama 3 detik
  digitalWrite(ledMerah2, LOW);
  digitalWrite(ledKuning2, HIGH);
  digitalWrite(ledHijau2, LOW);
  delay(3000);

  // persimpangan 2 lampu merah
  digitalWrite(ledMerah2, HIGH);
  digitalWrite(ledKuning2, LOW);
  digitalWrite(ledHijau2, LOW);

  // persimpangan 3 lampu hijau
  digitalWrite(ledMerah3, LOW);
  digitalWrite(ledKuning3, LOW);
  digitalWrite(ledHijau3, HIGH);

  // menunggu selama 10 detik atau sampai tombol pedestrian ditekan
  for (int i = 0; i < 100; i++) {
    delay(100);
    if(digitalRead(pedestrianPersimpangan3)== LOW){
      break;
    }
  }

  // persimpangan 3 lampu kuning selama 3 detik
  digitalWrite(ledMerah3, LOW);
  digitalWrite(ledKuning3, HIGH);
  digitalWrite(ledHijau3, LOW);

  // persimpangan 3 lampu merah
  digitalWrite(ledMerah3, HIGH);
  digitalWrite(ledKuning3, LOW);
  digitalWrite(ledHijau3, LOW);
  
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
led7:A
led7:C
led8:A
led8:C
led9:A
led9:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
r6:1
r6:2
r7:1
r7:2
r8:1
r8:2
r9:1
r9:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r