Sie sind auf Seite 1von 9

BBROBOTINDONESIA

PANDUAN PRAKTIKUM
DASAR ARDUINO

www.BELAJARBIKINROBOT.WEEBLY.com

Praktikum 11 Belajar Arduino


Blink LED (Tanpa Fungsi Delay())
Pada praktikum kita kali ini, kita akan mencoba kembali praktikum blink LED. Namun, kali ini dengan metode
yang sangat berbeda. Saya yakin, metode ini akan membuka pola pikir kita bahwa ada banyak jalan menuju
Romaada banyak cara menuju blinking LED.
Ingat kembali, pada praktikum 1 tentang Blinking LED, kita menggunakan fungsi delay() di antara fungsi
digitalWrite() yang kita gunakan untuk menunda lama program digitalWrite() dieksekusi sebelum melanjutkan
eksekusi kode berikutnya. Inilah yang menyebabkan LED menyala dalam kurun waktu satu detik dan kemudian
padam pada detik berikutnya.
Baiklah, sekarang kita sudah paham bahwa fungsi delay() bekerja dengan baik, lalu mengapa kita perlu
memperbaikinya?!. Benar, fungsi delay() memang bekerja sangat baik, namun di sini, kita memiliki metode
alternative yang saya rasa perlu untuk kita ketahui dan tentunya, saya akan coba jelaskan alasannya.
Salah satu alasan utama untuk TIDAK menggunakan fungsi delay() adalah karena, fungsi ini akan
menghentikan seluruh alur track program kecuali hanya program yang sedang di delay olehnya. Katakanlah,
kita mencoba untuk membaca informasi dari port serial atau menerima input dari pin Analog maka semua
hal yang kita coba lakukan itu tidak akan dieksekusi selama delay sedang berlangsung.
Kita coba analogikan. Saya yakin, Anda sudah pernah mengikuti lomba cerdas cermat di sekolah dulu.
Setidaknya, pernah menonton perlombaannya. Dalam lomba cerdas cermat tersebut, ada bel yang disediakan
untuk masing-masing regu. Jika salah satu regu sudah menekan bel untuk menjawab pertanyaan rebutan,
maka bel pada regu yang lainnya tidak akan berfungsi.Nah, kira-kira seperti itulah fungsi delay() bekerja.
Semoga Anda paham analoginya.
Untuk itulah, pada praktikum kali ini, kita akan mencoba untuk mengeksplor salah satu metode yang
menggunakan clock builtin yang ada pada Arduino untuk mengatur timing tanpa harus menghentikan jalannya
alur program yang lainnya. Sekarang, kita langsung ke praktikumnya.

Komponen yang Dibutuhkan

Arduino Uno 1x

Protoboard 1x

LED5mm 1x

Resistor 330--1kOhm 1x

Kabel Jumper Male 2x

Langkah-Langkah Praktikum

Susunlah komponen-komponen praktikum seperti gambar di atas, caranya :


1. hubungkanlah kaki + Anoda LED ke Pin 13 Arduino menggunakan kabel jumper Male (warna kuning, saya
gunakan untuk membedakan saja. Bisa menggunakan warna apa saja)
2. hubungkan kaki - Katoda LED dengan kaki 1 Resistor (resistor tidak ada kaki + atau - nya).
3. hubungkan kaki 2 Resistor dengan Pin Gnd Arduino menggunakan kabel jumper Male (warna hitam, biasa
digunakan untuk Gnd atau 0 Volt. Sedangkan Merah, biasa digunakan untuk Voltase +).
4. hubungkan board Arduino Uno dengan Komputer menggunakan kabel USB.
5. Bukalah IDE Arduino, kemudian ketikkan kode program/sketch berikut:
const int pinnyaLED = 13;
int kondisiLED = LOW;
long MillisSebelumnya = 0;
long intervalWaktu = 1000;
void setup()
{
pinMode(pinnyaLED, OUTPUT);
}
void loop()
{
unsigned long MillisSaatIni = millis();
if (MillisSaatIni - MillisSebelumnya > intervalWaktu)
{
MillisSebelumnya = MillisSaatIni;

if (kondisiLED = LOW)
{
kondisiLED = HIGH;
}
else
{
kondisiLED = LOW;
}
digitalWrite(pinnyaLED, kondisiLED);
}
}
6. compile menggunakan verify button (tanda ceklist pada IDE arduino) untuk mengecek ada atau tidaknya
error/kesalahan dalam pengetikan.
7. upload program ke arduino dengan cara, pilih File > Upload to I/O board, atau tekan tombol tanda panah
pada jendela IDE arduino.
Amati hasilnya. Jika program yang anda ketikkan benar maka, hasilnya adalah LED akan berkelap-kelip dengan
durasi nyala 1 detik kemudian padam 1 detik dan terus berulang-ulang seperti pada praktikum 1 blinking LED.

Diskusi dan Pembahasan Sketch


Baiklah, kali ini saya akan mencoba menjelaskan alur program/sketch yang tadi sudah diketikkan, dicompile
dan di Upload ke arduino. Silahkan perhatikan kembali program/sketch yang tadi sudah kita ketikkan untuk
kita bahas satu-persatu.

Blok Pertama
Kode program kita pada blok pertama ini, dimulai dengan mendeklarasikan dan menginisialisasikan variablevariable yang kita butuhkan. Berikut inilah variable-variable tersebut.
const int pinnyaLED = 13;
int kondisiLED = LOW;
long MillisSebelumnya = 0;
long intervalWaktu = 1000;
variable yang pertama adalah variable pinnyaLED yang kita gunakan untuk mengunci pin 13 sebagai pin
untuk LED. Penggunaan constanta pada variable ini, bertujuan agar variable ini tidak dapat diubah oleh-kodekode program berikutnya.
Variable yang selanjutnya, yaitu variable kondisiLED. Variable ini bertipe integer dan kita gunakan untuk
menyimpan kondisi dari LED.Apakah LED menyala atau padam. Untuk setting awalnya, LED kita kondisikan
padam. Itulah mengapa pada deklarasi variable ini, kita inisialisasikan sebagai LOW.

Dua variable selanjutnya yang kita perlukan yaitu variable MillisSebelumnya dan intervalWaktu. Berbeda
dari variable-variable sebelumnya, tipe data yang digunakan pada variable ini adalah tipe data long. Tipe data
ini dapat menyimpan data yang lebih besar dari pada tipe integer. Namun, dampak dari penggunaan tipe data
long akan memakan lebih banyak memory yang dimiliki Arduino. Sebagai perbandingan, tipe data integer
dapat menyimpan nilai dari (-)32,767 sampai (+)32,767. Sedangkan tipe data long dapat menyimpan jauh lebih
bersar yaitu dari (-)2,147,483,647 sampai (+)2,147,483,647. Itulah mengapa dalam praktikum kita yang lalu,
kita lebih sering menggunakan tipe data integer. Tipe long ini, kita gunakan hanyalah pada saat kita
membutuhkan nilai yang tidak mampu ditampung oleh tipe data integer.
Jadi mengapa kali ini kita menggunakan tipe data long ini?. Tipe ini kita gunakan karena dalam praktikum ini,
kita akan menyimpan nilai dari sebuah fungsi yang bernama fungsi millis(). Fungsi ini, akan membaca nilai
waktu Arduino mengeksekusi program setiap mili detik. Setiap mili detik fungsi ini akan terus bertambah
nilainya. karena nilai ini terus bertambah, maka kita membutuhkan tipe data yang cukup besar untuk
menampung pertambahan nilai tersebut. Itulah alasan kita menggunakan tipe data long pada praktikum kali
ini. Baiklah, sekarang kita lanjutkan terlebih dahulu pembahasan kita ke blok yang berikutnya.

Blok Kedua
Setelah sebelumnya kita sudah membahas tentang deklarasi variable, sekarang kita lanjutkan kembali ke blok
yang selanjutnya yaitu routine setup ( ). Pada routine ini, tidak banyak yang kita lakukan, kita hanya mengatur
mode dari pin 13 atau pinnyaLED menjadi OUTPUT. Tentunya Anda sudah sangat mengenal kode seperti
berikut.
void setup ( )
{
pinMode ( pinnyaLED , OUTPUT ) ;
}
Apabila Anda mengikuti praktikum-praktikum sebelumnya, saya rasa sudah tidak ada yang perlu diperjelas lagi
untuk kode pada routine setup() di atas. Untuk itu, mari kita lanjutkan saja ke blok program yang ketiga.

Blok Ketiga
Blok kita selanjutnya yaitu routine loop(). Seperti yang telah kita pahami bersama, routine inilah yang biasanya
kita gunakan untuk meletakkan program atau sketch utama kita. Sekarang, kita bahas apa yang ada pada
routine loop() kita kali ini.
Barisan kode pada routine loop() ini, kita buka dengan sebuah deklarasi variable yang kita berinama
MillisSaatIni dan menginisialisasikannya dengan nilai dari sebuah fungsi yang bernama millis(). Berikut ini
kodenya.
unsigned long MillisSaatIni = millis ( ) ;
Ada hal baru di sini, pertama kita coba perhatikan pada tipe variablenya. Di situ tertulis unsigned long.
apakah itu? Unsigned adalah sebuah qualifier yang gunanya untuk membatasi sebuah variable menyimpan
nilai negative. Contohnya, sebuah tipe data long secara default dapat menyimpan nilai dari (-)2,147,483,647
sampai (+)2,147,483,647. Nah, apabila kita menggunakan unsigned long, maka nilai yang akan kita simpan

akan bernilai positif yaitu dari 0 sampai (+)4,294,967,295. -- Intinya, lebar data yang dapat disimpan tetap
sama, hanya saja semuanya bernilai positif.
Seperti telah kita bahas di atas, bahwa variable ini akan menyimpan nilai dari fungsi millis(). Fungsi millis() ini
bekerja dengan menghitung waktu yang digunakan oleh Arduino untuk mengeksekusi setiap program yang
berjalan. Jadi, setiap mili detik Arduino bekerja, maka setiap mili detik tersebut pula nilainya akan dibaca oleh
fungsi millis() ini. Fungsi ini sebenarnya membaca nilai yang berasal dari internal clock yang ada pada ic
mikrokontroler yang ada pada Arduino kita.
Secara sederhananya, jika kita menyalakan atau me-reset Arduino, maka satu detik kemudian fungsi millis() ini
akan membaca nilai 1000. Jika kita Arduino telah bekerja selama 5 detik, maka fungsi ini akan membaca nilai
5000. Semoga Anda paham maksud saya.
Baiklah,-- sekarang pertanyaannya, untuk apa kita menghitung lamanya Arduino bekerja?dengan memiliki
nilai lamanya Arduino bekerja, kita bisa menggunakan nilai tersebut, untuk kita bandingkan dengan variable
yang telah kita buat mengatur lama LED kita nyalakan atau kita padamkan. Dalam hal ini kita akan bandingkan
dengan variable intervalWaktu yang telah kita deklarasikan dan kita inisialisasikan dengan nilai 1000. Untuk
membandinkannya, kita gunakan fungsi if. Berikut ini kode keseluruhan yang ada pada routine loop().
unsigned long MillisSaatIni = millis();
if (MillisSaatIni - MillisSebelumnya > intervalWaktu)
{
MillisSebelumnya = MillisSaatIni;
if (kondisiLED = LOW)
{
kondisiLED = HIGH;
}
else
{
kondisiLED = LOW;
}
digitalWrite(pinnyaLED, kondisiLED);
}
Kita akan coba membahasnya secara perlahan. Kita mulai dari kode berikut.
if (MillisSaatIni - MillisSebelumnya > intervalWaktu)
Ingat, pada awal program kita telah memberikan nilai untuk variable MillisSebelumnya dengan nilai awal 0
dan variable intervalWaktu dengan nilai 1000. Kita juga telah membahas bahwa nilai pada variable
MillisSaatIni nilainya diambil dari fungsi millis() yang membaca lamanya Arduino bekerja. Jadi, saat Arduino
mulai bekerja kira-kira seperti inilah kondisi yang diperiksa oleh fungsi if.
if (0 - 0 >1000) //kondisi belum terpenuhi, program dalam kurung kurawal fungsi if tidak di eksekusi.
Jika kita tunggu kira-kira 1 detik berikutnya, maka nilai ini akan menjadi,
if (1001 - 0 >1000) //kondisi terpenuhi, program dalam kurung kurawal akan di eksekusi.

Baiklah, sekarang kondisi pada fungsi if sudah terpenuhi, kemudian apa yang akan dilakukan oleh program
pada fungsi if ini.
Hal yang kita lakukan adalah meng-update nilai dari variable MillisSebelumnya menjadi sama dengan
MillisSaatIni. Berikut ini kodenya.
MillisSebelumnya = MillisSaatIni;
Ini dilakukan, agar saat fungsi if telah selesai di eksekusi dan program kembali membaca kode dari routine
loop(), maka nilai dari MillisSebelumnya tidak lagi bernilai 0. Namun, nilainya menjadi 1001. Kira-kira kondisi
pada fungsi if pada putaran kedua, setelah Arduino bekerja lebih dari 2,2 detik yaitu akan terbaca seperti ini.
if (2002 -1001 >1000)
Oke, sekarang kita lanjutkan terlebih dahulu membahas apa yang ada pada fungsi if selanjutnya. Setelah kita
meng-update nilai pada variable MillisSebelumnya, kita akan mengatur kondisi LEDapakah menyala atau
padam. Untuk melakukannya, kita menggunakan kode-kode berikut.
if (kondisiLED = LOW)
{
kondisiLED = HIGH;
}
else
{
kondisiLED = LOW;
}
digitalWrite(pinnyaLED, kondisiLED);
Pada kode di atas, kita menggunakan sebuah fungsi if lainnya untuk memeriksa nilai dari variable
kondisiLED. Karena pada blok pertama program variable ini sudah kita berikan inisialisasi awal LOW maka
untuk putaran pertama kondisi fungsi if ini terpenuhi.
Kemudian, kita meng-update kondisiLED menjadi HIGH menggunakan kode berikut,
kondisiLED = HIGH;
Sehingga pada putaran kedua, kondisi pada fungsi if tidak terpenuhi, karena nilai dari kondisiLED sudah
berubah menjadi HIGH. Itulah mengapa, pada putaran kedua fungsi else lah yang dieksekusi. Pada fungsi else
kita meng-update kembali nilai dari variable kondisiLED menjadi LOW dengan kode berikut.
kondisiLED = LOW;
Sekarang sebaliknya, kondisi fungsi if akan terpenuhi lagi karena fungsi else telah meng-update kondisiLED
menjadi LOW kembali. Selanjutnya akan terus bergilir seperti apa yang terjadi pada pembahasan di atas.
Semoga Anda paham maksud saya..
Baiklah, sekarang setidaknya kita sudah paham bahwa variable kondisiLED akan berubah secara bergiliran
dari LOW kemudian HIGH dan kembali lagi. Nah, perubahan dari variable kondisiLED inilah, yang kita

manfaatkan untuk mengatur LED pada pin 13 menyala dan padam secara bergantian. Untuk itu, kita gunakan
fungsi digitalWrite() untuk melakukannya. Berikut kode yang kita gunakan.
digitalWrite(pinnyaLED, kondisiLED);
Seperti telah kita pahami bersama, fungsi digitalWrite() membutuhkan dua parametert.nomor pin yang
digunakan dan hasil yang diinginkanpada kode di atas, kedua parametert yang dibutuhkan tersebut kita isi
dengan menggunakan variable. Variable pinnyaLED untuk nomor pin dan kondisiLED untuk hasil yang
diinginkan.
Mungkin bagi Anda cara ini terlihat cukup rumit. Padahal, kita hanya membuat blink LED saja. ya benar, tapi
dengan metode ini, sekarang kita bisa dengan bebas memasukkan kode-kode program lainnya, tanpa perlu
mengganggu LED kita tetap berkelap-kelip.
Nah, selesai sudah pembahasan kita pada diskusi sketch kita kali ini. Sampai jumpa lagi di praktikum
berikutnya dan terimakasih..

Latihan Mandiri
Untuk meningkatkan kemampuan dan pemahaman Anda, coba kerjakan latihan mandiri berikut.
1. Ubahlah lama kedipan nyala-padam LED menjadi 3 detik sekali.
2. Tambahkan sebuah potensiometer pada rangkaian seperti praktikum 4 (Membaca Nilai Analog).
Kemudian, sisipkan kode tersebut kedalam praktikum ini. Pastikan program tersebut bisa tetap di
eksekusi dan berjalan tanpa mengganggu kedipan LED di praktikum ini.

www.BELAJARBIKINROBOT.WEEBLY.com

Das könnte Ihnen auch gefallen