#define selatan 0 //Ini mendefinisikan konstanta selatan sebagai 1.
#define barat 1 // Ini mendefinisikan konstanta barat sebagai 2.
#define utara 2 // Ini mendefinisikan konstanta utara sebagai 3.
#define timur 3 // Ini mendefinisikan konstanta timur sebagai 4.
int pinLed[] = {2,3,4,5,6,7,8,9,10,11,12,13};//array bernama pinLed bertipe data int, dan nomor" nya.
void lampuUtara(int R, int Y, int G) //lampu di bagian utara yang bertipe data int dan berwarna merah, kining, hijau.
{
//
digitalWrite(pinLed[0], R); //digunakan untuk mengatur keadaan lampu merah
digitalWrite(pinLed[1], Y); //digunakan untuk mengatur keadaan lampu kuning
digitalWrite(pinLed[2], G); //digunakan untuk mengatur keadaan lampu hijau
}
void lampuBarat(int R, int Y, int G)//lampu di bagian Barat yang bertipe data int dan berwarna merah, kining, hijau.
{
digitalWrite(pinLed[3], R); //digunakan untuk mengatur keadaan lampu merah
digitalWrite(pinLed[4], Y); //digunakan untuk mengatur keadaan lampu kuning
digitalWrite(pinLed[5], G); //digunakan untuk mengatur keadaan lampu hijau
}
void lampuTimur(int R, int Y, int G) //lampu di bagian timur yang bertipe data int dan berwarna merah, kining, hijau.
{
digitalWrite(pinLed[6], R); //digunakan untuk mengatur keadaan lampu merah
digitalWrite(pinLed[7], Y); //digunakan untuk mengatur keadaan lampu kuning
digitalWrite(pinLed[8], G); //digunakan untuk mengatur keadaan lampu hijau
}
void lampuSelatan(int R, int Y, int G) //lampu di bagian Selatan yang bertipe data int dan berwarna merah, kining, hijau.
{
digitalWrite(pinLed[9], R); //digunakan untuk mengatur keadaan lampu merah
digitalWrite(pinLed[10], Y); //digunakan untuk mengatur keadaan lampu kuning
digitalWrite(pinLed[11], G); //digunakan untuk mengatur keadaan lampu hijau
}
void setup()
//untuk melakukan inisialisasi atau konfigurasi awal pada mikrokontroler.
{
for (int i = 0; i<12; i++)// digunakan untuk melakukan iterasi (pengulangan) sebanyak 12 kali. Secara lebih spesifik akan menghasilkan iterasi sebanyak 12 kali, dimulai dari i = 0 dan berakhir ketika i = 11, karena kondisi i < 12. Setiap iterasi, nilai i akan bertambah satu.
{
pinMode (pinLed[i], OUTPUT);// Mengatur pin sebagai output
digitalWrite(pinLed[i], 1);// lampu menyala kuning
}
delay(1000); //
for (int i = 0; i<12; i++) // digunakan untuk melakukan iterasi (pengulangan) sebanyak 12 kali. Secara lebih spesifik akan menghasilkan iterasi sebanyak 12 kali, dimulai dari i = 0 dan berakhir ketika i = 11, karena kondisi i < 12. Setiap iterasi, nilai i akan bertambah satu.
{
pinMode (pinLed[i], OUTPUT); // Mengatur pin sebagai output
digitalWrite(pinLed[i], 0); // lampu menyala merah
}
}
unsigned long LastTime = 0; // menyimpan informasi tentang waktu atau informasi terkait waktu lainnya
int count; //
int timeGreen = 10; // menyala selama 10 detik
int timeToleransi = 2; // ntuk menyimpan batas toleransi waktu dalam suatu program, misalnya, toleransi waktu dalam detik untuk sebuah operasi
int mode = selatan; // misalnya, selatan didefinisikan sebagai konstanta 1
void loop() // salah satu dari dua fungsi utama yang ada dalam setiap program Arduino
{
if (millis() - LastTime >= 500) // memeriksa apakah telah berlalu 500 milisecond (0.5 detik) sejak waktu terakhir suatu peristiwa terjadi.
{
LastTime = millis();// mengembalikan jumlah waktu dalam milisecond sejak perangkat dimulai atau dihidupkan.
count++; // untuk menghitung sesuatu dalam perulangan atau menghitung jumlah kejadian tertentu.
switch (mode) // untuk menyimpan waktu saat ini (dalam milisecond sejak perangkat dimulai atau dihidupkan) ke dalam variabel
{
case selatan: // Blok kode yang dieksekusi jika nilai direction adalah selatan
if (timeGreen - count > timeToleransi) // mengevaluasi apakah suatu periode waktu tertentu telah berlalu melebihi batas toleransi yang telah ditentukan.
{
lampuSelatan(0, 0, 1); // lampu hijau menyala
lampuBarat(1, 0, 0); // lampu merah menyala
lampuUtara(0, 0, 1); // lampu hijau menyala
lampuTimur(1, 0, 0); // lampu merah menyala
}
else if (timeGreen - count == timeToleransi && timeGreen - count > 0) //
{
lampuSelatan(0, 1, 0); // lampu kuning menyala
lampuBarat(1, 0, 0); // lampu merah menyala
lampuUtara(0, 1, 0); // lampu kuning menyala
lampuTimur(1, 0, 0); // lampu mrah menyala
}
else if (timeGreen - count == 0) // mengevaluasi apakah suatu periode waktu tertentu telah berlalu melebihi batas toleransi yang telah ditentukan.
{
lampuSelatan(1, 0, 0); // lampu merah menyala
lampuBarat(0, 0, 1); // lampu hijau menyala
lampuUtara(1, 0, 0); // lampu merah menyala
lampuTimur(0, 0, 1); // lampu hijau menyala
count = 0;
mode = barat;
}
break;
case barat: // Blok kode yang dieksekusi jika nilai direction adalah barat
if (timeGreen - count > timeToleransi) //
{
lampuSelatan(0, 0, 1); // lampu hijau menyala
lampuBarat(0, 1, 0); // lampu kuning menyala
lampuUtara(0, 0, 1); // lampu hijau menyala
lampuTimur(0, 1, 0); // lampu kuning menyala
}
else if (timeGreen - count == timeToleransi && timeGreen - count > 0)//
{
lampuSelatan(0, 1, 0); // lampu kuning menyala
lampuBarat(1, 0, 0); // lampu merah menyala
lampuUtara(0, 1, 0); // lampu kuning menyala
lampuTimur(1, 0, 0); // lampu merah menyala
}
else if (timeGreen - count == 0) //
{
lampuSelatan(1, 0, 0); // lampu merah menyala
lampuBarat(0, 0, 1); // lampu hijau menyala
lampuUtara(1, 0, 0); // lampu merah menyala
lampuTimur(0, 0, 1); // lampu hijau menyala
count = 0;
mode = utara;
}
break;
case utara:
if (timeGreen - count > timeToleransi)//
{
lampuSelatan(0, 1, 0); // lampu kuning menyala
lampuBarat(1, 0, 0); // lampu merah menyala
lampuUtara(0, 1, 0); // lampu kuning menyala
lampuTimur(1, 0, 0); // lampu merah menyala
}
else if (timeGreen - count == timeToleransi && timeGreen - count > 0)//
{
lampuSelatan(1, 0, 0); // lampu merah menyala
lampuBarat(0, 0, 1); // lampu hijau menyala
lampuUtara(1, 0, 0); // lampu merah menyala
lampuTimur(0, 0, 1); // lampu hijau menyala
}
else if (timeGreen - count == 0) //
{
lampuSelatan(0, 0,1); // lampu hijau menyala
lampuBarat(0, 1, 0); // lampu kuning menyala
lampuUtara(0, 0, 1); // lampu hijau menyala
lampuTimur(0, 1, 0); // lampu kuning menyala
count = 0;
mode = timur;
}
break;
case timur:
if (timeGreen - count > timeToleransi) // mengevaluasi apakah suatu periode waktu tertentu telah berlalu melebihi batas toleransi yang telah ditentukan
{
lampuSelatan(0, 1, 0); // lampu kuning menyala
lampuBarat(1, 0, 0); // lampu merah menyala
lampuUtara(0, 1, 0); // lampu kuning menyala
lampuTimur(1, 0, 0); // lampu merah menyala
}
else if (timeGreen - count == timeToleransi && timeGreen - count > 0) // memeriksa apakah hasil pengurangan antara timeGreen dan count sama dengan nilai dari variabel timeToleransi
{
lampuSelatan(1, 0, 0); // lampu merah menyala
lampuBarat(0, 0,1); // lampu hijau menyala
lampuUtara(1, 0, 0); // lampu merah menyala
lampuTimur(0, 0, 1); // lampu hijau menyala
}
else if (timeGreen - count == 0) // memeriksa apakah hasil pengurangan antara timeGreen dan count sama dengan nilai dari variabel timeToleransi
{
lampuSelatan(0, 0, 1); // lampu hijau menyala
lampuBarat(0, 1, 0); // lampu kuning menyala
lampuUtara(0, 0, 1); // lampu hijau menyala
lampuTimur(0, 1, 0); // lampu kuning menyala
count = 0; // mengatur atau menginisialisasi ulang variabel
mode = barat;
}
break;
}
}
}