Selasa, 28 Februari 2017

Tutorial Belajar Arduino Part 5: Animasi LED, Perintah IF, Perintah While dan Perintah For di Arduino

Animasi LED
Sebelumnya kita sudah belajar tentang membuat LED berkedip, saat ini kita akan lebih memahami lebih dekat tentang bahasa pemrograman dan fungsi-fungsi logika yang umum dipakai. Implementasi dari pembelajaran fungsi logika tersebut akan diterapkan pada beberapa model Animasi LED seperti running LED atau yang lainnya.


Perintah IF dan IF - ELSE
Perintah IF memiliki beberapa kombinasi, bisa IF saja, IF-ELSE, IF-ELSE IF-ELSE, dan seterusnya. Semakin kompleks tentu logika yang dipakai akan tampak semakin “rumit”.


Perintah IF
Mari kita modifikasi program menjadi seperti berikut:

1.     // Pin 13 untuk LED
2.     constint pinLED = 13;
3.     voidsetup() {
4.     // pin LED sebagai output
5.      
6.     pinMode(pinLED,OUTPUT);
7.     }
8.      
9.     // awal time delay 1000 | 1 detik
10.   int timeDelay = 1000;
11.    
12.   voidloop() {
13.   // Setiap looping, nilai timeDelay dikurangi 100
14.   timeDelay = timeDelay - 100;
15.   /* Jika timeDelay bernilai 0 atau negatif
16.   maka nilai timeDelay direset ke 1000
17.   */
18.   if(timeDelay <= 0){
19.   timeDelay = 1000;
20.   }
21.    
22.   //Nyalakan dan matikan LED selama timeDelay
23.   digitalWrite(pinLED,HIGH);
24.   delay(timeDelay);
25.   digitalWrite(pinLED,LOW);
26.   delay(timeDelay);
27.   }

Apakah Anda bisa membayangkan apa yang akan terjadi dengan LED tersebut? LED tersebut awalnya akan berkedip pelan, lama-lama akan berkedip cepat, dan akan akhirnya akan berkedip pelan lagi. Percayakah Anda? Jika tidak, silakan dicoba.
Ketika awal dinyalakan, maka timeDelay adalah 1000. Nilai tersebut diinisialisasi pada baris 8. Baris ini tidak dijadikan konstanta (const) sebagaimana pinLED karena nilai timeDelay akan diubah-ubah.
 
10. int timeDelay = 1000;

Setelah masuk ke bagian utama aplikasi, pada baris 18 nilai timeDelay dikurangi 100.

14. timeDelay = timeDelay - 100;

Sehingga timeDelay pertama yang digunakan untuk menyalakan dan mematikan LED adalah 900. Pada perulangan selanjutnya, timeDelay kembali dikurangi 100, sehingga perulangan ke dua menggunakan timeDelay 800 (lebih singkat dari timeDelay yang awal), begitu seterusnya hingga pada timeDelay 100.
Pada waktu melewati timeDelay 100, ketika dikurangi dengan 100, maka timeDelay bernilai 0. Kondisi ini cocok dengan baris ke 18,

18.   if(timeDelay <= 0){
19.   timeDelay = 1000;
20.   }

Jika (IF) timeDelay lebih kecil atau sama dengan 0, maka timeDelay akan diisi dengan 1000. Sehingga nilai timeDelay tidak akan pernah negatif dan hal tersebut akan berulang terus-menerus. Hal ini lah yang membuat durasi nyala hidup-mati LED bisa berubah lebih cepat.
Beberapa operator matematika yang dibutuhkan dalam bahasa pemrograman yaitu:

Perintah IF pasti akan diikuti dengan kondisi yang bernilai True yang diapit dengan tanda kurung, if (kondisi). Pada Sketch 2.1 di atas kondisi yang digunakan adalah timeDelay <= 0, timeDelay lebih kecil atau sama dengan nol. Artinya, jika timeDelay bernilai 0 atau lebih kecil dari 0, maka blok kode dalam if akan dieksekusi.
Selain operator <=, maka berikut ini adalah beberapa operator yang sering digunakan:



Begitulah cara kerja IF dan beberapa operator yang bisa digunakan untuk memeriksa kondisi dalam IF. Simpel sekali bukan?

Perintah IF - ELSE
Pada dasarnya IF-ELSE merupakan pengembangan dari IF. ELSE berarti kondisi yang tidak sesuai dengan kondisi dalam IF. Dengan kata lain, ELSE artinya “jika tidak”. Coba perhatikan kedua pernyataan berikut:

Pada baris 1 sampai 5, maka Main akan terus dieksekusi. Jika sekarang sama dengan jam 10, maka yang dilakukan adalah Main sambil Makan. Jadi kedua kegiatan atau statemen akan dieksekusi.
Berbeda dengan baris 8 sampai 12, jika jam 10 Makan, jika tidak jam 10, Main. Begitulah logika IF-ELSE.
Berikut ini adalah Sketch dengan tambahan ELSE dan pemindahan proses pengurangan:

1.     // Pin 13 untuk LED
2.     constint pinLED = 13;
3.     voidsetup() {
4.     // pin LED sebagai output
5.     pinMode(pinLED,OUTPUT);
6.     }
7.     // awal time delay 1000 | 1 detik
8.     int timeDelay = 1000;
9.     voidloop() {
10.   /* Jika timeDelay bernilai lebih kecil sama dengan 0
11.   maka LED akan diam selama 3 detik
12.   lalu nilai timeDelay direset ke 1000
13.   */
14.   if(timeDelay <= 100){
15.   delay(3000);
16.   timeDelay = 1000;
17.   }else{
18.   // nilai timeDelay dikurangi 100 jika time delay > 100
19.   timeDelay = timeDelay - 100;
20.   }
21.   //Nyalakan dan matikan LED selama timeDelay
22.   digitalWrite(pinLED,HIGH);
23.   delay(timeDelay);
24.   digitalWrite(pinLED,LOW);
25.   delay(timeDelay);
26.   }

Pada Sketch ini jika timeDelay bernilai lebih kecil sama dengan 100, maka akan LED akan diam selama 3 detik lalu nilai timeDelay akan direset ke 1000, jika tidak maka akan dilakukan pengurangan terhadap timeDelay sebanyak 100. Perhatikan, peroses reset dan pengurangan tidak pernah dilakukan bersama-sama. Silakan dicoba dan cek hasilnya!
Setelah membahas tentang IF dan IF-ELSE, kita akan mebahas tentang While. While merupakan salah satu model perulangan dengan karakteristik tertentu. Untuk lebih jelasnya, silakan lanjut ke pembahasan selanjutnya.

Perulangan dengan WHILE
Perintah WHILE merupakan perintah untuk melakukan perulangan berdasarkan suatu kondisi, jadi banyaknya perulangan tidak bisa ditentukan dengan pasti. Dalam WHILE seakan ada pengecekan kondisi seperti perintah IF untuk melakukan perulangan. Bentuk umum dari perintah WHILE yaitu :


Jika kondisi sesuai, maka perintah atau source code yang ada dalam kurung kurawal “{}” tersebut akan dieksekusi. Untuk lebih memahami tentang perintah WHILE, mari kita modifikasi Sketch dengan penambahan WHILE dan beberapa perubahan lainnya.
1.     // Pin 13 untuk LED
2.     const int pinLED = 13;
3.     void setup() {
4.     // pin LED sebagai output
5.     pinMode(pinLED,OUTPUT);
6.     }
7.     // awal time delay 1000 | 1 detik
8.     int timeDelay = 1000;
9.     void loop() {
10.   // selama nilai timeDelay > 0
11.   // eksekusi blok program ini
12.   while(timeDelay > 0){
13.   // LED hidup mati dengan durasi 500 milisekon
14.   digitalWrite(pinLED,HIGH);
15.   delay(500);
16.   digitalWrite(pinLED,LOW);
17.   delay(500);
18.   // kurangi timeDelay dengan 100
19.   timeDelay = timeDelay - 100;
20.   }
21.   // setelah timeDelay dikurangi terus-menerus
22.    // maka pada akhirnya akan bernilai minus atau < 0
23.    // maka while di atas akan berhenti
24.    // selama nilai timeDelay < 1000
25.    // eksekusi blok program ini
26.   while(timeDelay < 1000){
27.    // LED hidup mati dengan durasi 100 milisekon
28.   digitalWrite(pinLED,HIGH);
29.    delay(100);
30.    digitalWrite(pinLED,LOW);
31.    delay(100);
32.   // tambahkan timeDelay dengan 100
33.    timeDelay = timeDelay + 100;
34.    }
35.   }

Program pada Sketch akan mengedipkan LED dengan durasi yang berbeda. Awalnya LED akan berkedip dengan durasi V detik sebanyak 10 kali, selanjutnya LED akan berkedip lebih cepat dengan durasi 1/10 detik sebanyak 10 kali.

Kondisi True dan False
Dalam bahasa pemrograman, kita nantinya akan mempelajari tentang perintah-perintah yang berkaitan dengan kondisi (logika) True dan False. Perintah-perintah yang berkaitan dengan logika yang umum digunakan misalnya IF dan IF-ELSE, dan WHILE yang sudah kita pelajari sebelumnya.
Secara teori, True berarti 1 dan False berarti 0. Dalam pemrograman yang ini, kondisi False memang selalu 0, tapi True tidak selalu 1. Kondisi True adalah selain 0, ingat selain nol (0) akan dianggap True. Coba perhatikan kode di bawah ini:



Program di atas akan dijalankan selamanya (looping forever) selama Arduino belum direset atau listrik tidak diputus. Kenapa? Sebab 1 berarti True. Secara harfiah, baris •while(l) dapat diartikan “selama bernilai benar, maka eksekusi kode ini’.
Ingat, penulisan operator logika “sama dengan” tidak hanya menggunakan satu tanda sama dengan “=”, tapi menggunakan dua sama dengan “==”. Jika hanya menggunakan “=”, maka pertanyaan tersebut bukan untuk logika, tapi untuk operator penetapan isi variabel (assignment). Penulisan yang benar adalah:


Bukannya,



Kombinasi True dan False
Terkadang kondisi True atau False bisa terdiri dari beberapa kondisi. Misal, kita ingin menentukan bilangan timeDelay sebagai angka positif tidak lebih dari 10. Maka kita tidak bisa hanya menggunakan satu kondisi. Kita harus menggunakan 2 kondisi, yaitu timeDelay harus lebih besar dari 0 DAN timeDelay lebih kecil dari 10. Dalam logika, kita bisa menuliskannya dengan cara :


Perhatikan disana ada tanda && yang berarti AND. Penambahan tanda kurung untuk memperjelas bahwa ada dua kondisi yang berbeda dan dihubungkan oleh operator &&. Silakan diingat kembali bahwa operator logika AND akan menghasilkan nilai True jika semua kondisi bernilai True. Selain operator AND, ada juga operator OR dan NOT. Perhatikan tabel berikut:


Jika Anda masih bingung dengan NOT, maka perhatikan kode berikut ini:
int status = HIGH;
int led = !status; // artinya, led TIDAK high (LOW)
Jika status = HIGH atau True, maka !status = LOW (tidak HIGH) atau False (tidak True). Penggunaan juga sering digunakan, jadi tolong diingat-ingat. ©

Perulangan dengan FOR
Berbeda dengan WHILE, dengan FOR kita bisa menentukan jumlah perulangan dengan pasti. Pada Sketch 2.3, masing-masing WHILE akan melakukan perulangan sebanyak 10 kali dengan cara mengurangi angka 1000 dengan 100 secara bertahap. Jika menggunakan FOR, kita bisa melakukan perulangan tersebut lebih sederhana. Format dasar dari FOR adalah :



Statemen yang pertama berisi tentang kondisi awal, biasanya inisialisasi suatu variabel atau data (misal, a=0). Sedangkan statemen yang terakhir adalah perubahan yang akan terjadi pada variabel pada statemen awal (misal a=a+1). Sedangkan kondisi merupakan kondisi dimana perulangan akan terjadi, ketika kondisi sudah tidak sesuai, maka perulangan akan berhenti. untuk lebih jelasnya tentang FOR, berikut contoh sederhananya:

1.     // Pin 13 untuk LED
2.     const int pinLED = 13;
3.     void setup() {
4.     // pin LED sebagai output
5.     pinMode(pinLED,OUTPUT);
6.     }
7.     // awal time delay 1000 | 1 detik
8.     int timeDelay = 3000;
9.     void loop() {
10.   // perulangan sebanyak 10 kali dari 1 hingga 10
11.   for(int i=1; i<=10; i++){
12.   // LED hidup mati dengan durasi 500 milisekon
13.   digitalWrite(pinLED,HIGH);
14.   delay(500);
15.   digitalWrite(pinLED,LOW);
16.   delay(500);
17.   }
18.   // diam selama 3 detik
19.   delay(timeDelay);
20.   }


Ketika program tersebut diupload, maka LED akan berkedip dengan durasi V detik sebanyak 10 kali, kemudian LED akan diam (mati) selama 3 detik (perhatikan, nilai timeDelay diganti 3000), dan melanjutkan berkedip lagi. Perhatikan pada baris 11:

11.   for(int i=1; i<=10; i++){

Pada baris 11 menunjukkan FOR dengan kondisi nilai awal i=1, i akan terus-menerus ditambah dengan 1 (i++) selama perulangan selama i <= 10. Sederhananya, nilai i akan berubah dari 1, 2, 3, 4, ... hingga 10.
Bagian penting yang perlu dipahami adalah i++, i++ sama dengan

i = i + 1;

Selain i++, ada juga ++i, i--, dan --i. Penulisan i-- sama dengan i++, hanya saja i-- berarti i=i-1, atau i akan berkurang 1 terus-menerus selama perulangan.
Penempatan ++ di depan atau di belakang i berarri bahwa : jika ++ nya ada di belakang, maka proses penambahannya dilakukan setelah blok kode dalam for dijalankan. Tapi jika ++ nya ada di depan, maka proses penambahan akan dilakukan sebelum proses dijalankan.

 Setelah ini kita akan merangkai kombinasi LED lebih dari satu karena kita akan mencoba belajar tentang Array.



5 komentar: