3. Cara Penanganan Seleksi dan Penggunaan Array serta Fungsi
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.
3.1 Pernyataan Seleksi dan Manfaatnya
Di dalam membuat sketch, kadang kala diperlukan untuk menangani pemilihan salah satu dari dua atau lebi alternatif.Keadaan seperti itulah yang memerlukan pernyataan seleksi. Dalam hal ini, terdapat du pernyataan yang dapat digunakan, yaitu if dan switch.
Gambaran mengenai seleksi dari dua atau tiga alternatif sebagai berikut:
- Dua alternatif:Tombol ditekan dan tombol tidak ditekan. Aplikasi: Kalau tombol ditekan, LED dinyalakan dan kalau tombol tidak ditekan, LED dimatikan.
- Tiga alternatif: Tiga kemungkinan nilai adalah 0,1,dan 2.Aplikasi:
- kalau nilai=0, LED merah dinyalakan;
- kalau nilai=1,LED kuning dinyalakan;
- kalau nilai=2,LED hijau dinyalakan.
Selain melalui pernyataan seleksi, ungkapan berkondisi juga dapat digunakan untuk memilih satu dari du kemungkinan yang tersedia. Di bab ini,pernyataan if dan switch serta ungkapan kondisi akan dibahas. Dengan demikian, Anda mempunyai beberapa alternatif dalam menyelesaikan persoalan seleksi.
3.2 Kaidah Pernyataan if
Beberapa bentuk pernyataan if dibahas di subbab ini.
Pernyataan if Sederhana
Pernyataan if yang paling sederhana berbentuk:
If (kondisi)
pernyataan;
Dalam hal ini,
- kondisi digunakan untuk menentukan pengambilan keputusan;
- penyataan dapat berupa sebuah pernyataan ataupun pernyataan majemuk. Bagian ini dijalankan hanya kalau kondisi bernilai benar (bernilai tidak sama dengan nol).
Gambar 3.1 menunjukkan diagram alir pernyataan if.
Gambar 3.1 Pernyataan if
Jika pernyataan yang mengikuti i f berupa pernyataan majemuk,bentuknya sebagai berikut:
if (kondisi)
{
pernyataan 1;
pernyataan 2;
…
pernyataan_N;
}
Pernyataan-pernyataan yang berada di dalam { } akan dijalankan kalau kondisi bernilai benar.
Pernyataan if..else
Pernyataan i f dapat mengandung bagian else. Bentuk dasarnya seperti berikut:
if (kondisi)
pernyataan_1;
else
pernyataan_2;
Pada bentuk di atas, pernyataan_1 dijalankan kalau kondisi bernilai benar (tidak sama dengan nol). Adapun pernyataan_2 hanya dieksekusi kalau kondisi bernilai salah (sama dengan nol). Gambar 3.2 memperlihatkan diagram alir pernyataan if..else.
Pernyataan pada if maupun else dapat berupa pernyataan tunggal ataupun majemuk Berbagai kemungkinan lain selain bentuk di atas seperti berikut.
Kemungkinan 1:
if (kondisi)
pernyataan_1;
else
{
pernyataan 21;
pernyataan_22;
}
Pada contoh di atas, bagian else berupa peinyataan majemuk.Itulah sebabnya,terdapat {} dan dalamnya terdapat lebih dari satu pernyataan.
Kemungkinan 2:
if (kondisi)
{
pernyataan 11;
pernyataan 12;
}
else
pernyataan_2;
Pada contoh di atas,bagian if berupa pernyataan majemuk. Itulah sebabnya,terdapat dana dalamnya terdapat lebih dari satu pernyataan.
- Kemungkinan 3:
if (kondisi)
{
pernyataan_11;
pernyataan_12;
}
else
{
pernyataan_21:
pernyataan_22;
}
Pernyataan if di dalam if
Pernyataan if yang terletak di dalam if sering disebut nested if atau if bersarang. Salah satu bentuknya seperti berikut:
if (kondisi_1)
pernyataan_1;
else
if (kondisi_2)
pernyataan_2;
else
if (kondisi_3)
pernyataan_3;
else
if (kondisi_M)
pernyataan_M;
else // Opsional
pernyataan_N; // Opsional
Bentuk pernyataan if seperti itu bermanfaat untuk menyeleksi sejumlah kemungkinan tindakan. Penyeleksian dilakukan bertingkat. Begitu ada kondisi yang bernilai benar, pernyataan yang bersesuaian dengan kondisi tersebut akan dijalankan. Sekiranya tidak ada kondisi yang memenuhi, pernyataan_N akan dijalankan. Gambar 3.3 menggambarkan diagram alur pernyataan bertingkat di depan.
3.3 Aplikasi if untuk Mengontrol LED dengan Tombol
Gambar 3.4 Skema rangkaian.
Informasi tentang Tactile Switch
Tactile switch adalah saklar yang akan membuat dua bagian yang dalam keadaan bawaan tidak terhubung menjadi terhubung kalau tombolnya ditekan. Komponen ini memiliki 4 pin.Ada pasangan pin yang saling terhubung. Jika sisi yang mengandung pin diamati, akan terlihat keberadaan jalur yang melekuk ke dalam. Masing-masing dua pin yang berada di seberang jalur tersebut saling terhubung.Pin-pin yang berseberangan terhadap jalur tersebut akan terhubung kalau tombol ditekan.
Kode yang diperlukan seperti berikut:
// ——————————————–
// Penyalaan LED dengan saklar
// ——————————————–
const int PIN_12=12;
const int PIN_7=7;
void setup()
{
pinMode(PIN_12, OUTPUT);
pinMode(PIN_7, INPUT);
}
void loop()
{
int nilai = digitalRead(PIN_7);
if (nilai ==HIGH)
digitalWrite(PIN 12, HIGH);
else
digitalWrite(PIN 12, LOW);
}
Kode diatas akan membuat LED menyala selama tomboltekan (tactile switch)ditekan dan akan padamlei tombol tidak ditekan. Bagaimana hal itu terjadi? Berikut adalah penjelasannya.
Pernyataan
int nilal = digitalRead(PIN_7);
digunakan untuk membaca data digital di pin 7.Hasilnya ditaruh di variabel nilai dengan kemungkinan nilainya adalah HIGH atau LOW.Oleh karena pin tersebut untuk dibaca,terdapat pengaturan seperti berikut di setup():
pinMode(PIN 7,INPUT):
Pernyataan berikut digunakan untuk mengatur pin 12 bernilai HIGH untuk menyalakan LED dan LOW untuk mematikan LED:
if (nilaiHIGH)
digitalWrite(PIN_12,HIGH);
else
digitalWrite(PIN_12,LOW);
Informasi tentang Mode OUTPUT dan INPUT pada Pin
Setiap pin digital yang digunakan dalam sketch perlu pengaturan mengenai modenya.Hal ini dilakukan melalui fungsi pinMode() di setup(). Mode OUTPUT perlu dipilih jika Anda ingin mengatur nilainya melalui kode di sketch. Sebagai contoh,
digitalWrite(PIN_12,HIGH);
Perintah di atas memberikan nilai HIGH pada pin 12. Dalam hal ini,digitalWrite() perlu
digunakan sekiranya hanya nilai HIGH dan LOW yang akan diberikan ke pin.
Mode INPUT digunakan sekiranya kode di sketch bermaksud membaca nilai di pin.Sebagai contoh,
pin terhubung ke saklar dan saklar akan menentukan nilai pada pin berupa LOW atau HIGH.Pada keadaan seperti ini, mode untuk pin harus berupa INPUT. Perintah yang diperlukan:
pinMode(nomor_pin, INPUT);
Untuk membaca nilai di pin yang nilainya hanya berupa HIGH atau LOW, gunakan digitalRead().Namun,terkadang Anda perlu membaca nilai pin dengan analogWrite().
Untuk pin analog,penentuan mode dengan pinMode() tidak diperlukan.
3.4 Aplikasi LED yang Menyala Bergantian Arah
Contoh berikut memberikan gambaran penggunan If bertingkat untuk mewujudkan sebaris LED A. menyala bergantian dengan pola diperlihatkan di Gambar 3.6.
Gambar 3.8 Contoh perwujudan rangkaian
Sketch yang digunakan untuk mengontrol rangkaian di atas seperti berikut:
// ——————————————–
// Aplikasi untuk menampilkan LED secara bergantian
// secara maju dan mundur
//
// Penanganan dengan if-else bertingkat
// ——————————————–
const int PIN_4 = 4;
const int PIN_5 = 5;
const int PIN_6 = 6;
const int PIN_7 = 7;
const int PIN_8 = 8;
const int PIN_9 = 9;
const int PIN_10 = 10;
const int PIN_11 = 11;
const int PIN_12 = 12;
const int PIN_13=13;
int arah =1;
int indeksLed = 0;
void setup()
{
pinMode(PIN_4, OUTPUT);
pinMode(PIN_5,OUTPUT);
pinMode(PIN_6,OUTPUT);
pinMode(PIN_7,OUTPUT);
pinMode(PIN_8, OUTPUT);
pinMode(PIN_9,OUTPUT);
pinMode(PIN_10,OUTPUT);
pinMode (PIN_11,OUTPUT);
pinMode(PIN_12,OUTPUT);
pinMode(PIN_13,OUTPUT);
void loop()
{
if (indeksLed==0)
pin = PIN_13;
else
if (indeksLed==1)
pin=PIN_12;
else
if (indeksLed==2)
pin = PIN_11;
else
if (indeksLed==3)
pin = PIN_10;
else
if (indeksLed==4)
pin = PIN_9;
else
if (indeksLed ==5)
pin = PIN_8;
else
if (indeksLed==6)
pin = PIN_7;
else
if (indeksLed==7)
pin = PIN_6;
else
if (indeksLed == 8)
pin = PIN_5;
else
pin = PIN_4:
// Nyalakan LED dan kemudian matikan
digitalWrite(pin, HIGH);
delay(2000);
digitalWrite(pin, LOW);
atur arah
if (indeksLed==9)
arah=-1;
else
if (indeksLed==0)
arah=1;
indeksLed=indeksLed +arah;
}
Di sketch di depan,dua pernyataan berikut digunakan untuk mengatur arah LED akan ditampilkan dan LED yang akan dinyalakan:
int arah=1;
int indeksLed=0;
Nilai 1 pada arah menyatakan bahwa arah penyalaan LED adalah ke kanan. Sebaliknya,nilai-1 pada arah akan digunakan untuk menyalakan LED ke arah kiri. Adapun nilai 0 pada indeksLed menyatakan bahwa LED trkiri yang akan ditampilkan.
pernyataan
if (indeksLed==0)
pin=PIN_13;
if (indeksLed==1)
pin =PIN_12;
else
if (indeksLed==2)
pin = PIN 11;
else
. . .
adalah contoh if..else bertingkat, yakni di dalam if..else terdapat if..else lain. Hal ini bermanfaat untuk melakukan seleksi terhadap banyak alternatif. Sebagai contoh,pernyataan pin = PIN_13; dijalankan sekiranya indeksLed bernilai 0 dan pengujian terhadap if lainnya berakhir.Jika tidak,if (indeksLed==1) akan diproses.Dalam hal ini,pernyataan pin=PIN_12; akan dijalankan kalau indeksLed bernilai 1.Jika tidak,pernyataan if berikutnya akan diproses dan seterusnya.
Setelah if berakhir,variabel pin akan berisi angka yang menyatakan nomor pin yang akan dinyalakan dan dimatikan.Itulah sebabnya,pernyataan-pernyataan berikutnya berupa:
digitalWrite(pin, HIGH);
delay(2000);
digitalWrite(pin, LOW);
Dalam hal ini,delay(200); digunakan untuk mengatur lama LED dinyalakan.
Pernyataan
if (indeksLed==9)
arah=-1;
else
if (indeksLed ==0)
arah=1;
adalah instruksi untuk mengatur arah LED akan dinyalakan,Jika LED terakhir yang menyala adalah yang memilki indeks sama dengan 9(LED terkanan),arah perlu diubah ke kirl.Oleh karena itu,arah perlu dils dengan-1.Apabila,LED terakhir yang menyala adalah yang memiliki indeks sama dengan 0 (LED terkiri),arah perlu diubah ke kanan.Oleh karena itu,arah perlu diisi dengan-1.
Terakhir,
indeksLed-indekaLed +arah ;
menentukan LED berikutnya yang akan dinyalakan.
3.6 Pernyataan switch
Pernyataan switch adalah pernyataan yang digunakan untuk menjalankan salah satu pernyataan dan beberapa kemungkinan pernyataan,berdasarkan nilai dari sebuah ungkapan dan nilai penyeleksi.Secan singkat,pernyataan ini merupakan pernyataan pilihan berganda.
Kaidah umum pernyataan switch:
switch (ungkapan)
{
case literal_1:
pernyataan_ 1;
break;
case literal_2:
pernyataan_2;
break;
default: /* Opsional */
pernyataan_x; /*Opsional */
}
Pada pernyataan switch,ungkapan yang terletak sesudah kata swicth dapat berupa ungkapan konstanta,ataupun variabel.Adapun literal_1,literal_2 dan seterusnya dapat berupa sebarang konstanta bertipe int atau char.
Pencocokan ungkapan dengan literal_1,literal_2 dan sebagainya dilakukan secara berurutan, dimulai yans pertama.Sekiranya ada yang cocok,pernyataan yang mengikuti case bersangkutan dijalankan.Kalau selanjutnya pernyataan break dijalankan,eksekusi pernyataan switch berakhir.Perlu diketahui,bagia default hanya akan dijalankan kalau ungkapan pada bagian case tidak ada yang cocok dengan ungkapa” switch.Diagram alir pernyataan switch diperlihatkan di Gambar 3.9.
Gambar 3.9 Diagram alir switch
Aplikasi switch pada Penyalaan Satu LED dari Tiga LED Secara Acak
persoalan multi-alternatif semacam pada kasus penyalaan satu LED dari sepuluh LED di rangkaian di switch dapat digunakan. Pernyataan berikut
if (indeksLed==0)
PIN_= PIN_13;
else
if (indeksLed==1)
pin=PIN_12;
else
if (indeksLed==2)
pin = PIN_11;
else
if (indeksLed==3)
pin = PIN_10;
else
if (indeksLed==4)
pin = PIN_9;
else
if (indeksLed ==5)
pin = PIN_8;
else
if (indeksLed==6)
pin = PIN_7;
else
if (indeksLed==7)
pin = PIN_6;
else
if (indeksLed == 8)
pin = PIN_5;
else
pin = PIN_4:
dapat digantikan dengan swi tch dengan menuliskannya seperti berikut:
{
case 0:
pin=PIN 13;
break;
case 1:
pin = PIN 12;
break;
case 2:
pin= PIN 11;
break;
case 3:
pin= PIN 10;
break;
case 4:
pin=PIN 9;
break;
case 5:
pin=PIN 8;
break;
case 6:
pin = PIN 7;
break;
case 7:
pin=PIN 6;
break;
case 8:
pin=PIN_5;
break;
case 9:
pin=PIN_4;
}
Berikut adalah contoh sketch yang mengunakan swi tch untuk menyalakan salah satu LED dari sepuluh LED secara bergantian:
// ——————————————–
// Aplikasi untuk menampilkan LED secara bergantian
// secara maju dan mundur
//
// Penanganan dengan switch
// ——————————————–
const int PIN_4 = 4;
const int PIN_5 = 5;
const int PIN_6 = 6;
const int PIN_7 = 7;
const int PIN_8 = 8;
const int PIN_9 = 9;
const int PIN_10 = 10;
const int PIN_11 = 11;
const int PIN_12 = 12;
const int PIN_13=13;
int arah =1;
int indeksLed = 0;
void setup()
{
pinMode(PIN_4, OUTPUT);
pinMode(PIN_5,OUTPUT);
pinMode(PIN_6,OUTPUT);
pinMode(PIN_7,OUTPUT);
pinMode(PIN_8, OUTPUT);
pinMode(PIN_9,OUTPUT);
pinMode(PIN_10,OUTPUT);
pinMode (PIN_11,OUTPUT);
pinMode(PIN_12,OUTPUT);
pinMode(PIN_13,OUTPUT);
void loop()
{
int pin;
switch (indeksLed)
{
case 0:
pin=PIN 13;
break;
case 1:
pin = PIN 12;
break;
case 2:
pin= PIN 11;
break;
case 3:
pin= PIN 10;
break;
case 4:
pin=PIN 9;
break;
case 5:
pin=PIN 8;
break;
case 6:
pin = PIN 7;
break;
case 7:
pin=PIN 6;
break;
case 8:
pin=PIN_5;
break;
case 9:
pin=PIN_4;
}
// Nyalakan LED dan kemudian matikan
digitalWrite(pin, HIGH);
delay(2000);
digitalWrite(pin, LOW);
// atur arah
if (indeksLed==9)
arah=-1;
else
if (indeksLed==0)
arah=1;
indeksLed=indeksLed +arah;
}
3.8 Ungkapan Berkondisi dan Penerapannya
Operator berkondisi adalah ungkapan yang memungkinkan proses seleksi. Bentuk umumnya seperti berikut
ungkapan_boolean ? nilai_1 : nilai_2
Dalam hal ini,ungkapan_boolean adalah sebarang ungkapan yang menghasilkan nilai benar atau salah. PA0 operator berkondisi, hasil ungkapan berupa nilai_1 sekiranya ungkapan_boolean bernilai benar atau nilai_2 kalau ungkapan_boolean bernilai salah. Gambar 3.10 memberikan ilustrasi mengenai operator berkondisi.
Gambar 3.10 Pernyataan berkondisi
Sebagai contoh,pernyataan
if (bil==0)
pin=12;
else
pin=11;
yang digunakan untuk menentukan nilai pin berdasarkan kondisi bil == 0 dapat ditulis menjadi:
pin=bil ==0 ? 12 : 11;
3.9 Aplikasi Tombol On-Off
Contoh berikut menunjukkan penggunaan operator and untuk kepentingan mengimplementasikan tombol tekan sebagai tombol on-off, yang dapat dipakai untuk menghidupkan atau mematikan LED secara bergantian.
// ——————————————–
// Pemakaian tombol tekan sebagai saklar on-off
// ——————————————–
const int PIN_12=12;
const int PIN_7 = 7;
boolean ledMenyala = false;
int keadaanSebelumnya = LOW;
void setup()
{
int arah =1;
int indeksLed = 0;
void setup()
{
pinMode(PIN_12, OUTPUT);
pinMode(PIN_7, INPUT);
}
void loop()
{
int keadaanSekarang = digitalRead(PIN_7);
if ((keadaanSekarang ==HIGH) and
(keadaanSekarang !=keadaanSebelumnya))
{
// Balik keadaan di ledMenayala
ledMenyala = not ledMenyala;
// Atur LED berdasarkan nilai ledMenyala if (ledMenyala)
digitalWrite(PIN _12, HIGH);
else
digitalWrite (PIN_12, LOW);
delay(30); // Tunda sebentar
}
// Perbaharui status keadaan sebelumnya
keadaanSebelumnya = keadaanSekarang;
}
Sketch di atas melibatkan dua variabel yang bersifat global, yakni led Menyala dan keadaan Sebelumnya, sehingga kedua variabel tersebut dapat dikenali di fungsi loop(). Variabe ledMenyala mula-mula bernilai false,yang menyatakan LED tidak menyala. Variabe keadaanSebelumnya mula-mula berisi LOW, yang menyatakan bahwa pin untuk mengendalikan LED (pin 12) bernilai 0.
Di setup (), pin 12 diprogram sebagai OUTPUT. Itulah sebabnya,terdapat pernyataan:
pinMode(PIN_12, OUTPUT);
Adapun pin 7 dipakai untuk membaca tombol dalam keadaan ditekan atau tidak (HIGH berarti tombol ditekan dan LOW berarti tidak). Oleh karena itu, pin 7 berfungsi sebagai masukan (INPUT). Maka, pernyataan berikut diperlukan:
pinMode(PIN_7, INPUT);
Proses pemantauan nilai di pin 7 dilakukan di loop (). Pernyataannya berupa:
int keadaanSekarang = digitalRead(PIN_7);
Dengan cara seperti itu,variabel keadaanSekarang akan berisi HIGH atau LOW tergantung tombol dalam keadaan ditekan atau tidak.
Untuk membuat tombol tekan berfungsi sebagai tombol on-off, perubahan LED untuk dinyalakan atau
dimatikan adalah pada saat pin 7 bernilai HIGH. Hal ini dilakukan melalui pernyataan:
if ((keadaanSekarang ==HIGH) and
(keadaanSekarang!=keadaanSebelumnya))
{
…
}
Kondisi tambahan di if, yaitu keadaanSekarang != keadaanSebelumnya,dimaksudkan untuk melakukan perubahan keadaan LED (menyala atau mati) tidak hanya tergantung pada pin 7 yang bernilai HIGH, melainkan juga harus memperhatikan keadaan nilai keadaanSebelumnya. Dalam hal ini, perubahan keadaan LED hanya akan dilakukan ketika pin 7 bernilai HIGH dan isi keadaanSekarang tidak sama dengan isi keadaanSebelumnya. Hal ini didasarkan kenyataan bahwa ketika tombol ditekan, maka secara mekanis akan terjadi keadaan pemantulan yang berulang beberapa kali dari tertekan dan tidak tertekan tetapi dalam waktu singkat sebelum akhirnya menetap pada posisi tertekan. Hal serupa terjadi pula saat tombol dilepas (lihat Gambar 3.11).
Gambar 3.11 Keadaan saklar ketika ditekan dan dilepas, baik secara ideal maupun secara aktual
Perubahan keadaan LED dilakukan melalui:
ledMenyala = not ledMenyala;
Dalam hal ini, operator not akan membalik keadaan di led Menyala. Kalau awalnya bernilai false, isi led Menyala berubah menjadi true.Sebaliknya, Kalau awalnya bernilai true, isi ledMenyala berubah menjadi false.Keadaan inilah yang menjadikan tombol tekan sebagai tombol on-off.
Adapun penyalaan atau pemadaman LED secara fisik didasarkan nilal ledMenyala dan dilakukan melalui :
if (ledMenyala)
digitalWrite(PIN 12,HIGH) ;
else
digitalWrite(PIN 12,LOW) ;
Untuk memperbarul nilai untuk keadaansebe lumnya,pernyataan berikut diperlukan:
keadaanSebelumnya = keadaanSekarang ;
3.10 Aplikasi Array
Array adalah sebuah nama yang dapat digunakan untuk menyimpan beberapa nilal.Dengan menggunakan sebuah array,sejumlah nama variabel dapat disederhanakan dengan melibatkan satu nama saja, Sebagai contoh,Gambar 3.12 menunjukkan array yang mencatat data pin yang digunakan di sketch baris untuk mengontrol LED.Dengan cara seperti itu, konstanta PIN_4 hingga PIN_13 tidak diperlukan,Sebagal pengganti,nama pinLed bisa digunakan.
Gambar 3.12 Gambaran array untuk menampung sejumlah nilai
Pada Gambar 3.12,array pinLED memiliki sepuluh elemen. Setiap elemen di array tersebut bisa dr secara tersendiri.Caranya adalah dengan menyebutkan nama array dan indeks di dalam [ ],sebagaimana diperlihatkan di Gambar 3.13.
Gambar 3.13 Indeks untuk mengakses elemen array
Berdasarkan hal di atas,kode
pinMode(PIN_4, OUTPUT);
pinMode(PIN_5, OUTPUT);
pinMode(PIN_6, OUTPUT);
pinMode(PIN 7, OUTPUT);
pinMode(PIN_8, OUTPUT);
pinMode(PIN 9, OUTPUT);
pinMode(PIN_10, OUTPUT);
pinMode(PIN 11, OUTPUT);
pinMode(PIN_12, OUTPUT);
pinMode(PIN_13, OUTPUT);
yang terdapat di sketch baris, dapat disederhanakan dengan menuliskan kode
for (int k = 0; k < 10; k++)
pinMode(pinLed[k], OUTPUT);
Selain itu, deretan kode if..else di sketch baris pun dapat disederhanakan. Supaya lebih jelas, Anda bisa menggunakan sketch berikut untuk mengontrol sepuluh LED yang telah dipraktikkan di depan menggunakan sketch baris :
int pinLed[] = {13, 12, 11, 10, 9, 8, 7,6, 5, 4};
int arah=1;
int indeksLed=0;
void setup()
{
for (int k=0;k<10; k++)
pinMode (pinLed[k], OUTPUT);
}
// Nyalaan LED dan kemudian matikan
digitalWrite(pinLed[indeksLed], HIGH);
delay(2000);
digitalWrite (pinLed[indeksLed],LOW);
// atur arah
if (indeksLed==9)
arah=-1;
else
if (indeksLed==0)
arah=1;
indeksLed = indeksLed + arah;
}
Tampak bahwa stetch baris3 lebih sederhana darpada sketch baris dan baris2 Perintah yang diaa untuk menentukan pin yang akan dibuat HiGH atau LOW untuk mengontrol LED cukup ditulis menja
digitalWrite(pinLed(indekaLed),HIGH)/
delay(2000);
digitalWrite(pinted[indekaLed),Low);
Kode
pinLed[indeksLed]
berfungsi menentukan nilai elemen di pinLed yang memiliki indeks sama dengan nilai indeksled.
3.11 Fungsi
Fungsi adalah suatu kumpulan pernyataan yang diberi nama dan memungkinkan pelewatan nilai atau pemberian nilai hasil ketika fungsi dipanggil.Bentuk umum fungsi telah dijelaskan di Bab 1 seperti berikut
tipe nilai balik nama_fungsi(daftar_parameter)
{
pernyataan_fungsi
}
Secara prinsip,Anda boleh menciptakan fungsi sendiri. Sebagai contoh,Anda bisa membuat fungsi yang digunakan untuk menghidupkan dan mematikan LED pada pin tertentu selama waktu tertentu dengan cara menuliskan definisi seperti berikut:
void prosesLED(int pin, int n)
{
digitalWrite(pin, HIGH);
delay(n); // Tunda selama n detik
digitalWrite(pin, LOW);
delay(n); // Tunda selama n detik
}
Fungsi di atas mendefinisikan fungsi bernama prosesLED yang tidak memiliki nilai balik tetapi mempunyai dua parameter,yaitu pin dan n yang masing-masing bertipe int. Dalam hal ini, pin menyatakan pin untuk mengontrol LED dan n menyatakan lama untuk menyalakan dan mematikan LED.
Dengan adanya definisi tersebut,fungsi dapat dipanggil dengan menuliskan kode seperti berikut:
prosesLED(PIN_12, 1000);
Pada contoh tersebut,PIN_12 adalah argumen yang menentukan pin yang dikontrol dan 1000 menyatakan argumen untuk mengatur waktu penundaan LED menyala dan padam.
Berikut adalah contoh sketch yang menggunakan definisi fungsi prosesLED():
// Contoh penggunaan fungsi untuk
// menyalakan dan mematikan LED
// yang dipasang di pin tertentu
// selama waktu tertentu
// ——————————————–
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
prosesLED(PIN_12, 1000);
// LED kuning
prosesLED(PIN_11, 500);
// LED hijau
prosesLED(PIN_10, 200);
}
void prosesLED(int pin, int n)
// ——————————————–
// Argumen:
// 1. pin : pin yang diatur
// 2. n :lama penundaan untuk menyalakan dan
// mematikan LED
// ——————————————–
{
digitalWrite(pin, HIGH);
delay(n); // Tunda selama n detik
digitalWrite(pin, LOW);
delay(n); // Tunda selama n detik
}
Untuk menguji sketch di depan,gunakan rangkaian di Gambar 2.1.
Informasi tentang Fungsi dengan Nilai Balik
Contoh berikut memperlihatkan definisi fungsi yang memiliki nilai balik, yang digunakan untuk melakukan konversi nilai temperatur dalam derajat Celcius ke Fahrenheit:
float perolehFahrenheit(float celcius)
{
float fahren = 9.0 / 5 * celcius + 32; return fahren;
return fahren;
}
Dalam hal ini,tipe nilai balik fungsi perolehFahrenheit() berupa float (bilangan pecahan). Fungsi memiliki sebuah parameter, yang menyatakan nilai suhu dalam Celcius, yang akan dikonversi ke Fahrenheit. Di dalam tubuh fungsi ({}), pernyataan berikut digunakan untuk memperoleh nilai suhu dalam Fahrenheit berdasarkan nilai suhu di celcius:
float fahren=9.0/5* celcius + 32;
Penulisan 9.0 diperlukan agar 9 dibagi 5 menghasilkan 1.8. Jika ditulis 9/5,hasilnya akan berupa 1. Selanjutnya,pernyataan berikut digunakan untuk memberikan nilai yang terkandung di variabel fahren sebagai nilai balik.Pernyataan return diperlukan sekiranya fungsi mempunyai nilai balik.