Kali ini kita akan membuat LED yang memiliki efek bergerak saling
mengejar. Disini kita akan belajar mengenai konsep dari arrays.
Komponen yang diperlukan
- 10 buah LED 5mm
- 10 buah Resistors
Skema
Sketch
// Project 5 - LED Chase Effect
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // Create array for LED pins
int ledDelay = 65; // delay between changes
int direction = 1;
int currentLED = 0;
unsigned long changeTime;
void setup() {
for (int x=0; x<10; x++) { // set all pins to output
pinMode(ledPin[x], OUTPUT);
}
changeTime = millis();
}
void loop() {
if ((millis() - changeTime) > ledDelay) { // if it has been ledDelay ms since last change
changeLED();
changeTime = millis();
}
}
void changeLED() {
for (int x=0; x<10; x++) { //turn off all LED's
digitalWrite(ledPin[x], LOW);
}
digitalWrite(ledPin[currentLED], HIGH); //turn on the current LED
currentLED += direction; //increment by the direction value
// change direction if we reach the end
if (currentLED == 9) {direction = -1;}
if (currentLED == 0) {direction = 1;}
}
Penjelasan Sketch
byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
Perintah diatas untuk mendeklarasikan variable dengan tipe array dengan tipe data byte. semua element dapat diakses melalui nama yang sama, dalam hal ini adalah variable ledPin. contoh ledPin[0] akan menunjukkan nilai 4.
Tanda [] setelah nama variable menunjukkan pada compiler tipe array adalah array variable. Pada array ini kita inisialisasi nilai untuk menunjukkan pin Arduino.
Jika hendak mengdeklarasikan array tanpa inisialisasi nilai, kita perlu memberi tahu Arduino besar dari array. Contoh: byte ledPin[10];
Pada sketch kita, variable array ini digunakan untuk mengakses LED. Pada fungsi loop(), kita cek apakah ledDelay sudah dilewati sejak perubahan LED terakhir, jika sudah, maka fungsi ChangeLED() akan dipanggil.
Yang dilakukan fungsi ChangeLEDadalah mematikan semua LED dan menyalakan LED yg harus aktif saat ini., yang disimpan di variable currentLED.
Setelah currentLED dinyalakan, nilai currentLED akan ditambahkan atau dikurangkan, berdasar variable direction. Variable direction ditentukan oleh blok if, jika currentLED bernilai 9, direction akan -1, bila currentLED bernilai 0 maka direction akan +1;
Program kita akan membuat nyala LED bergerak bolak-balik.