2. Dasar Dasar Pemrograman Arduino untuk Menangani Pengulangan
Materi:
Pembelajaran ini menjelaskan tiga jenis pernyataan yang berkaitan dengan pengulangan suatu proses, yaitu while, d0..while, dan for. Beberapa contoh proyek disertakan untuk menunjukkan penggunaan ketiga jenis pernyataan tersebut.
2.1 Persiapan Menyusun Rangkaian Tiga LED
Beberapa percobaan yang dibahas di bab ini melibatkan tiga LED.Masing-masing berwarna merah,hijau,dan kuning.Komponen yang diperlukan ditunjukkan di Tabel 2.1.
Selain itu,siapkan sejumlah kabel. Kemudian, buat rangkaian seperti terlihat di Gambar 2.1.Contoh penyusunan rangkaian diperlihatkan di Gambar 2.2.
Gambar 2.2 Contoh penyusunan rangkaian tiga LED
Informasi tentang LED
LED adalah singkatan dari Light Emitting Display.Komponen ini merupakan salah satu Itulah sebabnya, LED hanya menghantarkan arus dalam satu arah, yaitu jika kaki yang anoda dihubungkan ke sumber bertegangan positif dan kaki satunya yang dinama disambungkan ke sumber tegangan negatif.
Bentuk umum rangkaian untuk LED seperti berikut:
Umumnya,LED memerlukan arus sebesar 220mA agar LED memancarkan cahaya yang Berdasarkan hal itu,resistor yang diperlukan dapat dihitung melalui rumus:
R=V/I
Dalam hal ini,R adalah resistor, V adalah tegangan yang memberikan catu daya ke LED,dan I adalah arus listrik yang melewJati LED.Jika tegangan berupa 5V (yang dihasilkan oleh pin digital di Arduino ketika dalam keadaan HIGH), resistor yang diperlukan berupa:
R= 5/0.022 =227.27 Ω
Berdasarkan hal itu, resistor sebesar 220 Ω atau 240Ω boleh digunakan.
Informasi tentang Resistor
Resistor atau kadang disebut hambatan adalah komponen yang dapat digunakan untuk mengatur arus listrik. Semakin besar nilai hambatan, semakin kecil arus yang mengalir. Nilai hambatan dinyatakan dengan warna pada gelang-gelang yang melekat di komponen.Contoh ditunjukkan di gambar berikut:
Untuk memahami nilai hambatan berdasarkan gelang-gelang warna, rujuklah Tabel 2.1.Sebagai contoh,resistor dengan gelang pertama berwarna kuning, gelang kedua berwarna berupa ungu,dan gelang ketiga berwarna merah di depan mempunyai hambatan sebesar 4,7KΩ.Cara penentuan hambatan seperti berikut:
Kuning-ungu-merah-→4-7-102=4700Ω=4,7KΩ
Berikut adalah daftar resistor yang umum tersedia di pasaran:
10,1,50,2,20,3,3Ω,4,7Ω,6,8Ω
10Ω,15Ω,22Ω,33Ω,47Ω,68Ω
1KΩ,1,5KΩ,2,2KΩ,3,3KΩ,4,7KΩ,6,8KΩ
10KΩ,15KQ,22KΩ,33KΩ,47KΩ,68KΩ
100KΩ,150KΩ,220KΩ,330KΩ,470KΩ,680KΩ
1MQ
Tabel 2.2 Ped0man untuk menentukan nilai hambatan
Warna
Hitam
Gelang 1
0
Gelang 2
0
Gelang 3
10°
Gelang 4
(Toleransi)
Cokelat
1
1
10
Merah
2
2
10
Jingga
3
3
103
Kuning
4
4
104
Hijau
5
5
105
Biru
6
6
106
Ungu
7
7
107
Abu-abu
8
8
108
Putih
10°
Emas
10-1
+5%
Perak
10-2
+10%
2.2 Percobaan Menghidupkan Tiga LED Secara Bergantian
Sekarang,akan dibahas tentang cara untuk menghidupkan salah satu dari tiga LED secara bergantian. Prosesnya dapat dinyatakan dalam algoritma berikut.
Ulang secara terus-menerus:
a) nyalakan LED merah dalam 1 detik;
b) matikan LED merah;
c) nyalakan LED kuning dalam 1 detik;
d) matikan LED kuning;
e) nyalakan LED hijau dalam 1 detik;
f) matikan LED hijau.
Proses tersebut dapat dinyatakan dalam sketch berikut:
Sketch:tigaled
const int PIN_10=10;
const int PIN_11=11;
const int PIN_12=12;
void setup()
{
pinMode(PIN_10, OUTPUT);
pinMode(PIN_11, OUTPUT);
pinMode(PIN_12, OUTPUT);
}
void loop()
{
// LED merah
digitalWrite(PIN_12, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_12, LOW);
delay(1000); // Tunda 1 detik
// LED kuning
digitalWrite(PIN_11, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, LOW);
delay(1000); // Tunda 1 detik
// LED hijau
digitalWrite(PIN_10, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_10, LOW);
delay(1000); // Tunda 1 detik
}
Pada sketch di atas, terdapat tiga pin yang digunakan untuk mengendalikan LED. Masing-masing dinyatak dengan konstanta bernama PIN_10, PIN_11, dan PIN_12. Selanjutnya,dengan membuat pin masing-masin bernilai HIGH and LOW secara bergantian.
Setelah sketch di atas dibuat, verifikasilah dan kemudian unggahkan ke papan Arduino. Cek untuk melihat hasilnya.
Informasi tentang HIGH dan LOW di Pin
Di sepanjang sketch yang diulas di buku ini, Anda akan sering menjumpai konstanta HIGH dan LOW, HIGH identik dengan 1 dan low identik dengan akan sernt mi jika diukur secara fisik, pin dengan mode OUTPUT yang diberi nilai LoW akan bertegangan 0V,sedangkan HIGH bertegangan 5V.
2.3 Setiap LED Berkedip Tiga Kali
Sekarang, akan dibahas mengenai pernyataan untuk mengulang suatu proses. Sebagai contoh, dikehendaki untuk membuat setiap LED akan berkedip tiga kali, sebelum digantikan oleh LED lain. Nah, tentu saja Anda bisa mewujudkannya dengan menuliskan sketch berikut:
Sketch:tigaled2
// ——————————————–
// Setiap LED berkedip tiga kali
// tanpa menggunakan pernyataan pengulangan
// ——————————————–
const int PIN_10=10;
const int PIN_11=11;
const int PIN_12=12;
void setup()
{
pinMode(PIN_10,OUTPUT);
pinMode(PIN_11,OUTPUT);
pinMode(PIN_12,OUTPUT);
}
void loop()
{
// LED merah
digitalWrite(PIN_12,HIGH);
delay(1000); 11 Tunda 1 detik
digitalWrite(PIN_12, LOW);
delay(1000); 11 Tunda 1 detik
digitalWrite(PIN_12,HIGH); delay(1000); // Tunda 1 detik
digitalWrite(PIN_12, LOW); delay(1000); // Tunda 1 detik
digitalWrite(PIN_12,LOW); delay(1000); // Tunda 1 detik
// LED kuning
digitalWrite(PIN_11, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, LOW);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, LOW);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, LOW);
delay(1000); // Tunda 1 detik
// LED hijau
digitalWrite(PIN_10,HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_10,LOW);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_10, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_10, LOW);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_10, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_10, LOW);
delay(1000); // Tunda 1 detik
}
Perhatikan bahwa terdapat pengulangan sebanyak tiga kali untuk mengendalikan setiap LED.Hal seperti itu terpaksa dilakukan jika pernyataan yang berkaitan dengan pengulangan tidak digunakan. Kalau Anda menguji sketch,akan diperoleh hasil seperti yang diharapkan.Namun,kode yang Anda tulis cukup panjang.Tentu saja,sketch akan menjadi lebih panjang lagi sekiranya setiap LED dikehendaki agar berkedip 10 kali.
Untuk menyederhanakan persoalan-persoalan semacam itu, pernyataan d0..while, while atau for bisa dimanfaatkan.Akibatnya,kode menjadi lebih pendek.
Solusi dengan while
Pernyataan while mempunyai bentuk umum seperti berikut:
while(ungkapan)
{
Pernyataan_1;
…
pernyataan _n;
}
Dalam hal ini,ungkapan adalah suatu kondisi yang bernilai true (benar) atau false (salah).Selama ungkapan bernilai benar,semua pernyataan yang berada di dalam {}akan dijalankan,Gambar 2.3 memberikan ilustrasi while dalam bentuk diagram alir.
Penerapan while untuk membuat setiap LED berkedip tiga kali diperlihatkan di sketch berikut:
Sketch:tigaled3
// Membuat setiap LED berkedip tiga kali
// dengan penanganan menggunakan while
const int PIN_10=10;
const int PIN_11=11;
const int PIN_12=12;
void setup()
{
pinMode(PIN_10,OUTPUT);
pinMode(PIN_11,OUTPUT);
pinMode(PIN_12,OUTPUT);
}
void loop()
{
int pencacah;
// LED merah
pencacah =1;
while (pencacah <=3)
{
digitalWrite(PIN_12,HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_12,LOW);
delay(1000); // Tunda 1 detik
pencacah++;// Naikkan pencacah sebesar 1
}
// LED kuning
pencacah =1;
while (pencacah <=3)
{
digitalWrite(PIN_11, HIGH);
delay(1000);// Tunda 1 detik
digitalwWrite(PIN_11,LOW);
delay(1000);// Tunda 1 detik
pencacah++;//Naikkan pencacah sebesar 1
}
// LED hijau
pencacah =1;
while (pencacah <=3)
{
digitalWrite(PIN_10,HIGH);
delay(1000);// Tunda 1 detik
digitalWrite(PIN_10,LOW);
delay(1000); // Tunda 1 detik
pencacah++;//Naikkan pencacah sebesar 1
}
Rahasia pengulangan dengan while terletak pada tiga hal.
Bagian ini tugasnya adalah memberikan nilai awal terhadap suatu variabel yang berkedudukan seba variabel pencacah.Disebut variabel pencacah karena tugasnya memang mencacah, seperti ketika ora menghitung,
satu
dua
tiga
dan seterusnya.
Pada contoh di depan,bagian inisialisasi diwakili oleh:
pencacah=1;
Variabel tersebut perlu dideklarasikan terlebih dahulu.Perintahnya berupa:
int pencacah;
Pernyataan tersebut menyatakan bahwa pencacah adalah variabel bertipe int sehingga dapat digunakan untuk menyimpan bilangan bulat.
Tugasnya adalah untuk menaikkan (atau menurunkan) variabel pencacah. Normalnya, kalau kita menghitung satu,dua,tiga,dst., kenaikannya adalah satu. Bagian inilah yang akan membuat suatu ketika kondisi di while akan bernilai false (salah).Pada contoh di depan, pernyataan yang mengatur kenaikan ini adalah
pencacah++;
Dengan pernyataan seperti itu, isi pencacah akan dinaikkan sebesar satu. Kelupaan atau kesalahan logika dalam menuliskan bagian ini dapat menyebabkan pengulangan yang tidak pernah berakhir.
Nilai kondisi while ketika saatnya diuji akan membuat perulangan akan berakhir atau tidak. Pernyataan d0..while akan berakhir manakala nilai kondisi berupa false.
Pada contoh di depan,kondisi pengulang pencacah <= 3 akan bernilai salah ketika pencacah bernilai 4.
Dengan mengganti 3 pada pencacah <=3 menjadi 10 di setiap while,setiap LED akan berkedip sebanyak 10 kali.Terlihat bahwa pengubahan kode menjadi sangat praktis berapa pun pengulangan dikehendaki. Untuk memahami kode secara lengkap, silakan lihat Gambar 2.4.
Sekadar untuk memahami penerapan pencacahan yang menurun, Anda bisa mencoba sketch berikut:
Sketch:tigaled4
// Membuat setiap LED berkedip tiga kali
// dengan menggunakan pencacahan menurun
// memakai while
const int PIN_10=10;
const int PIN_11=11;
const int PIN_12=12;
void setup()
{
pinMode(PIN_10,OUTPUT);
pinMode(PIN_11,OUTPUT);
pinMode(PIN_12,OUTPUT);
void loop()
{
int pencacah;
// LED merah
pencacah=3;
while (pencacah>0)
{
digitalWrite(PIN_12, HIGH); delay(1000); // Tunda 1 detik
digitalWrite(PIN_12, LOW);
delay(1000); // Tunda 1 detik
pencacah–; // Turunkan pencacah sebesar 1
}
// LED kuning
pencacah=3;
while (pencacah>0)
{
digitalWrite(PIN_11, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, LOW);
delay(1000); // Tunda 1 detik
pencacah–;// Turunkan pencacah sebesar 1
}
// LED hijau
pencacah=3;
while (pencacah>0)
{
digitalWrite(PIN_10, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_10, LOW);
delay(1000); // Tunda 1 detik
pencacah–; // Turunkan pencacah sebesar 1
}
}
Pada pencacahan menurun, variabel yang digunakan ntuk mencacah diberi nilai awal berupa nilai
pengulangan.Pada contoh di atas berupa:
pencacah = 3;
Kemudian,kondisi di while diatur agar bernilai benar selama pencacah >0.Terakhir,di bagian yang diulang perlu terdapat pernyataan untuk menurunkan isi variabel yang digunakan untuk mencacah sebesar satu.Itulah sebabnya,di dalam ()terdapat pernyataan:
pencacah–;
Berdasarkan contoh di tigaled2 dan tigaled3,terlihat keberadaan operator> dan<,Operator operator seperti dinamakan operator hubungan atau relasional. Tujuannya adalah melakukan pembandingan dan hasilnya berupa benar atau salah saja.
Semua jenis operator relasional dicantumkan di Tabel 1.16.
Hati-hati di dalam menuliskan kondisi pembandingan seperti berikut:
while (ungkapan-nilai)
{
pernyataan;
}
Kesalahan yang sering terjadi terletak pada penulisan =yang hanya ditulis satu kali seperti berikut:
while (ungkapan= nilai)
{
pernyataan;
}
Kalau hanya satu tanda=,operasi yang dilakukan adalah penugasan,bukan pembandingan.
Solusi dengan d0..while
Pernyataan d0..while juga berguna untuk mengulang suatu proses. Formatnya:
d0
}
pernyataan_1;
pernyataan_2;
…
pernyataan_N;
}while (ungkapan);
Bagian pernyataan_1 hingga pernyataan_N dijalankan secara berulang sampai ungkapan di while bernilai salah (sama dengan nol).Namun,berbeda dengan while,pengujian ungkapan dilakukan di bagian pernyataan).Diagram alir d0..while diperlihatkan di Gambar 2.5.
Oleh karena pengujian ungkapan di d0.. while dilakukan belakangan,b pernyataan pada d0..while minimal akan dijalankan sekali. Pada while, pernyataan yang bergantung pada kondisi while berkemungkinan tidak dieksekusi sama sekali.
Contoh berikut menunjukkan penggunaan d0..while untuk membuat setiap LED berkedip tiga kali:
Sketch:tigaled5
// ——————————————–
// Membuat Setiap LED berkedip tiga kali
// dengan penanganan menggunakan d0 while
// ——————————————–
const int PIN_10=10;
const int PIN_11=11;
const int PIN_12=12;
void setup()
{
pinMode(PIN_10, OUTPUT);
pinMode(PIN_11, OUTPUT);
pinMode(PIN_12, OUTPUT);
}
void loop()
{
int pencacah ;
// LED merah
pencacah=1:
d0
{
digitalWrite(PIN_12,HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_12, LOW);
delay(1000); // Tunda 1 detik
pencacah++;// Naikkan pencacah sebesar 1 }
while (pencacah <=3);
// LED kuning
pencacah=1;
d0 {
digitalWrite(PIN_11, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, LOW);
delay(1000); // Tunda 1 detik
pencacah++; // Naikkan pencacah sebesar 1
} while (pencacah <=3);
// LED hijau
pencacah=1;
d0
{
digitalWrite(PIN_10, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN 10, LOW);
delay(1000); // Tunda 1 detik
pencacah++;// Naikkan pencacah sebesar 1
}while (pencacah <=3);
}
Solusi dengan for
Pernyataan for mempunyai kegunaan yang sama dengan while atau d0..while dalam konteks untuk mengulang suatu proses.Jika jumlah pengulangan telah diketahui di depan (misalnya untuk mengulang tiga kali), for lebih baik diterapkan daripada while.Bentuk umum pernyataan for seperti berikut:
for (ungkapan_1; ungkapan_2; ungkapan_3)
pernyataan;
Sama halnya dengan while,ada tiga bagian penting di dalam while yang menangani pengulangan. Masing-masing berupa ungkapan dengan antar ungkapan dipisahkan oleh titik koma. Pernyataan for di depan identik dengan:
ungkapan_1;
while (ungkapan_2)
{
pernyataan;
ungkapan_3;
}
Jadi:
ungkapan_1 merupakan pernyataan inisialisasi sebelum masuk ke while;
ungkapan_2 berlaku sebagai kondisi yang menentukan pengulangan terhadap pernyataan atau tidak;
ungkapan_3 digunakan sebagai pengatur variabel yang digunakan di dalam ungkapan_1.
Contoh for untuk memuat setiap LED berkedip tiga kali diperlihatkan di sketch berikut:
Sketch:tigaled6
// ——————————————–
// Membuat Setiap LED berkedip tiga kali
// dengan penanganan menggunakan for
// ——————————————–
const int PIN_10=10;
const int PIN_11=11;
const int PIN_12=12;
void setup()
{
pinMode(PIN_10, OUTPUT);
pinMode(PIN_11, OUTPUT);
pinMode(PIN_12, OUTPUT);
}
void loop()
{
int pencacah ;
// LED merah
for (int pencacah =1; pencacah <=3; pencacah++)
{
digitalWrite(PIN_12,HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_12, LOW);
delay(1000); // Tunda 1 detik
}
// LED kuning
for (int pencacah =1; pencacah <=3; pencacah++)
{
digitalWrite(PIN_11, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN_11, LOW);
delay(1000); // Tunda 1 detik
}
// LED hijau
for (int pencacah =1; pencacah <=3; pencacah++)
{
digitalWrite(PIN_10, HIGH);
delay(1000); // Tunda 1 detik
digitalWrite(PIN 10, LOW);
delay(1000); // Tunda 1 detik
}
}
Pada sketch di atas,
for (int pencacah = 1; pencacah <= 3; pencacah++)
{
…
}
akan membuat bagian { } diproses ketika pencacah bernilai 1, 2,dan 3. Ungkapan
int pencacah=1
digunakan untuk mendeklarasikan pencacah bertipe int dan diberi nilai awal sama dengan 1. Selanjutnya, ungkapan pencacah <=3 akan diuji. Tentu saja, hasilnya berupa true. Akibatnya, bagian {} akan dijalankan. Selanjutnya, ungkapan pencacah++ akan dieksekusi, yang membuat pencacah bernilai 2. Ungkapan pencacah <=3 akan diuji kembali dan hasilnya adalah true. Maka, bagian {} akan dijalankan untuk yang kedua kali. Lalu, ungkapan pencacah++ akan dieksekusi,yang membuat pencacah bernilai 3. Ungkapan pencacah <=3 akan diuji kembali dan hasilnya adalah true. Maka, bagian {} akan dijalankan untuk yang ketiga kali. Kemudian, ungkapan pencacah++akan dieksekusi,yang membuat pencacah bernilai 3. Ungkapan pencacah <=3 akan diuji kembali dan hasil kali ini berupa false (salah).Dengan demikian, bagian {} dijalankan tiga kali,yang berimplikasi pada LED yang berkedip tiga kali.
Pencacahan pada for dapat dilakukan menurun. Penulisannya semacam berikut:
for (int pencacah = 3; pencacah>0; pencacah–)
Perhatikan bahwa nilai awal untuk pencacah berupa jumlah pengulangan.Ungkapan kedua berupa pencacah > 0, yang dimaksudkan untuk memastikan bahwa nilainya berupa true selama pencacah lebih besar daripada 0. Adapun ungkapan ketiga berupa ungkapan untuk menurunkan nilai pencacah sebesa satu.
Contoh sketch yang menggunakan for dengan pencacahan menurun: