/*
02 - 8 x LED
Membuat delapan LED menyala dengan pola yang berbeda-beda.
*/
int ledPins[] = {2,3,4,5,6,7,8,9}; //membuat sebuah array untuk menyimpan nomor pin untuk 8 LED.
//sebuah array merupakan kumpulan variabel yang dapat di akses dengan nomor index.
//Sebuah daftar dialam array mempunyai nomor index berurutan dimulai dari 0 yang ditulis didalam tanda kurung [ ].
//Lihat contoh penggunaannya pada fungsi pinMode() dibawah.
void setup()
{
pinMode(ledPins[0],INPUT); //ledPins[0] = 2
pinMode(ledPins[1],INPUT); //ledPins[1] = 3
pinMode(ledPins[2],OUTPUT); //ledPins[2] = 4
pinMode(ledPins[3],INPUT); //ledPins[3] = 5
pinMode(ledPins[4],OUTPUT); //ledPins[4] = 6
pinMode(ledPins[5],INPUT); //ledPins[5] = 7
pinMode(ledPins[6],OUTPUT); //ledPins[6] = 8
pinMode(ledPins[7],INPUT); //ledPins[7] = 9
}
void loop() {
//Pada loop() ini memanggil beberapa fungsi yang sudah dituliskan sebelumnya.
//Kamu dapat menonaktifkan pemanggilan beberapa fungsi dengan cara merubah menjadi sebuah comment
//(dengan menuliskan tanda "//" didepan pemanggilan fungsi dibawah ini).
oneAfterAnother(); //Nyalakan semua LED secara bergantian
oneOnAtATime(); //Nyalakan LED satu per satu secara bergantian
pingPong(); //Sama dengan oneOnAtATime() tapi berganti arah ketika nyala LED sampai keujung
marquee(); //Lampu kejar seperti yang ada dipertunjukan teater
randomLED(); //Membuat LED-LED berkedip secara acak
}
/**********************
* oneAfterAnother()
*
* Fungsi ini menyalakan semua LED, ada jeda, dan kemudian semua
* LED mati. Didalam fungsi ini menggunakan kelebihan dari "for() loop" dan
* penggunaan array sehingga meeminimalkan penulisan program.
/***********************/
void oneAfterAnother()
{
int index;
int delayTime = 300; //jeda dalam milliseconds untuk berhenti antara LED
//rubah menjadi lebih kecil untuk membuat perpindahan lebih cepat
//Menyalakan semua LED:
for(index = 0; index <= 8; index = ++index) //langkah pada setiap variabel index dari 0 hingga 7
{
digitalWrite(ledPins[index], HIGH);
delay(delayTime);
}
//Mematikan semua LED:
for(index = 7; index >= 0; index = --index) //langkah pada setiap variabel index dari 7 hingga 0
{
digitalWrite(ledPins[index], LOW);
delay(delayTime);
}
}
/***********************
* oneOnAtATime()
*
* Pada fungsi ini akan menyalakan LED seperti berjalan satu arah.
* Membuat tiap LED nyala dan kemudian mati sebelum berpindah
* ke LED berikutnya.
/**********************/
void oneOnAtATime()
{
int index;
int delayTime = 300; //jeda dalam milliseconds untuk berhenti antara LED
//rubah menjadi lebih kecil untuk membuat perpindahan lebih cepat
for(index = 0; index <= 8; index = ++index) //langkah pada masing-masing LED, dari 0 sampai 7
{
digitalWrite(ledPins[index], HIGH); //menyalakan LED
delay(delayTime); //jeda untuk memperlambat
digitalWrite(ledPins[index], LOW); //mematikan LED
}
}
/***********************
* pingPong()
*
* Pada fungsi ini akan menyalakan LED seperti berjalan bulak balik.
* Tidak ada jeda antara LED yang amti dengan LED yang berikutnya nyala,
* sehingga dapat menciptakan pola smooth. .
*/
/**********************/
void pingPong()
{
int index;
int delayTime = 300; //jeda dalam milliseconds untuk berhenti antara LED
for(index = 0; index <= 8; index = ++index) //langkah pada masing-masing LED, dari 0 hingga 7
{
digitalWrite(ledPins[index], HIGH); //menyalakan LED
delay(delayTime); //jeda untuk memperlambat
digitalWrite(ledPins[index], LOW); //mematikan LED
}
for(index = 7; index >= 0; index = --index) //langkah pada masing-masing LED, dari 7 hingga 0
{
digitalWrite(ledPins[index], HIGH); //menyalakan LED
delay(delayTime); //jeda untuk memperlambat
digitalWrite(ledPins[index], LOW); //mematikan LED
}
}
/***********************
* marquee()
*
* Fungsi ini akan menirukan nyala LED seperti "lampu kejar" yang
* ada pada pertunjukan teater..
/**********************/
void marquee()
{
int index;
int delayTime = 300; //jeda dalam milliseconds untuk berhenti antara LED
for(index = 0; index <= 8; index++) //langkah dari 0 hingga 3
{
digitalWrite(ledPins[index], HIGH); //menyalakan LED
digitalWrite(ledPins[index+8], HIGH); //lewati empat LED, dan nyalakan LED tersebut
delay(delayTime); //jeda untuk memperlambat perpindahan
digitalWrite(ledPins[index], LOW); //mematikan LED
digitalWrite(ledPins[index+8], LOW); //lewati empat LED, dan matikan LED tersebut
}
}
/***********************
* randomLED()
*
* Fungsi ini akan meyalakan LED secara acak. Dapatkah kamu memodifikasi program
* sehingga jeda waktunya juga secara acak?
/**********************/
void randomLED()
{
int index;
int delayTime;
index = random(8); //memilih angka secara acak antara 0 sampai 7
delayTime = 500;
digitalWrite(ledPins[index], HIGH); //menyalakan LED
delay(delayTime); //jeda untuk memperlambat
digitalWrite(ledPins[index], LOW); //mematikan LED
}