Anda di halaman 1dari 114

BAHASA PEMROGRAMAN

ARDUINO

Muhammad Pauzan

Penerbit K-Media
Yogyakarta, 2020
BAHASA PEMROGRAMAN ARDUINO
vi + 106 hlm.; 14 x 20 cm

ISBN: 978-602-451-777-9

Penulis : Muhammad Pauzan


Tata Letak : Muhammad Pauzan
Desain Sampul : Muhammad Pauzan

Cetakan : Mei 2020

Copyright © 2020 by Penerbit K-Media


All rights reserved

Hak Cipta dilindungi Undang-Undang No 19 Tahun 2002.

Dilarang memperbanyak atau memindahkan sebagian atau seluruh


isi buku ini dalam bentuk apapun, baik secara elektris mau pun
mekanis, termasuk memfotocopy, merekam atau dengan sistem
penyimpanan lainnya, tanpa izin tertulis dari Penulis dan Penerbit.

Isi di luar tanggung jawab percetakan

Penerbit K-Media
Anggota IKAPI No.106/DIY/2018
Banguntapan, Bantul, Yogyakarta.
e-mail: kmedia.cv@gmail.com

ii
KATA PENGANTAR

Alhamdulillah penulis ucapkan puji syukur kepada


Dzat yang maha kuasa, karena berkatnya penulis bisa
menyelesaikan buku pemrograman untuk Arduino ini.
Bahasa pemrograman Arduino sebenarnya adalah bahasa C
tapi terdapat sedikit modifikasi, dengan kata lain bahasa
Arduino merupakan simplifikasi dari bahasa C sehingga
sangat cocok untuk pemula.
Buku ini difokuskan untuk mendalami dasar-dasar
bahasa pemrograman pada Arduino, biasanya kita
menemukan buku Arduino kebanyakan tentang proyek
pembuatan alat, robotic dan sebagainya. Saya mengamati
sangat jarang menemukan buku yang membahas bahasa
pemrograman pada Arduino. Oleh karena itu buku ini hadir
untuk melengkapi buku Arduino yang sudah banyak di
pasaran. Jadi buku ini ibarat pondasi sebelum kita ingin
membuat proyek-proyek berbasis Arduino.
Tidak ada gading yang tak retak, oleh karena itu buku
ini juga masih jauh dari kata sempurna. Saya mengharapkan
semua pihak yang menggunakannya untuk menyampaikan
kritik dan sarannya demi perbaikan buku ini ke depannya.

Indramayu, Januari 2020

Muhammad Pauzan

iii
DAFTAR ISI

KATA PENGANTAR ............................................. i


DAFTAR ISI ........................................................ ii
BAB I Bahasa C Arduino ......................................... 1
A. Sistematika Semua Bahasa Pemrograman ................... 1
Ekspresi ............................................................................ 1
Statemen ........................................................................... 2
Variabel ............................................................................. 2
Blok Statemen ................................................................... 3
Blok Fungsi ....................................................................... 4
B. Lima Langkah Program .............................................. 4
C. Instalasi Integrated Development Environment
(IDE) Arduino ............................................................. 6
D. Memasukkan library ................................................... 9
E. Menjalankan program pertama ................................. 11
BAB II Tipe Data C Arduino ................................... 15
A. Kata kunci bahasa C ............................................... 16
B. Nama variabel pada bahasa C ................................. 16
Tipe Data boolean .......................................................... 17
Bilangan Biner ................................................................ 18
Tipe data char ................................................................ 18
Tipe data byte ................................................................. 18
Tipe data int ................................................................... 18
Tipe data word .................................................................18
Tipe data long ..................................................................19
Tipe data float dan double ................................................19
Tipe data string .................................................................19
Tipe data String ............................................................... 21
Tipe data void ................................................................. 22

iv
Tipe data array ................................................................22

BAB III Membuat Keputusan di Arduino ................... 25


A. Statemen if ................................................................ 26
Program LED kedap-kedip ...............................................27
B. Statemen if-else ....................................................... 31
C. Kaskade statemen if ................................................. 32
D. Statemen switch ...................................................... 37
Preprosesor C ................................................................. 38

BAB IV Program Loop ........................................... 42


A. Loop for .................................................................... 42
B. Loop while ................................................................ 47
C. Loop do-while ........................................................... 48
D. Statemen break ......................................................... 49
BAB V Fungsi di Arduino ....................................... 52
Memanggil sebuah fungsi .................................................55
Memberikan nilai/argumen pada fungsi ............................56
Nilai kembali dari suatu fungsi ..........................................58

BAB VI Array, string dan String ............................... 66


A. Array ........................................................................ 66
B. String ........................................................................ 69
C. String ........................................................................ 73
BAB VII Interrupt dan Pointer ................................. 88
A. Interrupt .................................................................... 88
B. Pointer ...................................................................... 93

PROYEK ........................................................... 97
DAFTAR PUSTAKA .......................................... 102
LAMPIRAN ..................................................... 103

v
vi
BAB I

Bahasa C Arduino

Bahasa pemrograman C pertama kali diperkenalkan oleh


American National Standard Institute (ANSI) pada tahun 1983, ANSI
menyelesaikan pekerjaannya pada tahun 1989. Sejak saat itu bahasa
pemrograman ini dikenal sebagai ANSI C, tapi sejak digunakan bahasa
ini beberapa kali mengalami “upgrade” (1999 sampai dengan 2011)
sehingga penyebutannya kita sebut sebagai C standar.
Bahasa C yang digunakan pada IDE (Integrated Development
Environment) Arduino hampir sama dengan standar C, tapi pada IDE
Arduino tidak terdapat tipe data double. Perbedaan lain antara C
Arduino dengan standar C adalah compiler C Arduino berupa C++
open source. Jadi meskipun program yang digunakan adalah C tapi
pada Arduino kita bebas untuk menggabungkan bahasa C dengan
C++.
A. Sistematika Semua Bahasa Pemrograman
Semua bahasa pemrograman dirancang dari empat elemen dasar:
x Ekspresi
x Statemen
x Blok statemen
x Blok fungsi

Ekspresi
Sebuah ekspresi terdiri dari gabungan antara operator dan
operand. Operand adalah suatu data yang dioperasikan oleh operator,
sedangkan operator adalah aksi matematik atau logika yang
menggunakan dua atau lebih operand. Perhatikan contoh berikut:
a + b
m - 300
g < d

Pada contoh pertama, operandnya adalah a dan b yang dijumlahkan


oleh operator +. Pada contoh kedua, operandnya adalah m, bagaimana
dengan 300? 300 adalah konstanta numeric atau bisa juga disebut

1
operand. Operand m dikurangi operand 300 oleh operator −. Contoh
ketiga terdapat dua operand yaitu g dan d, < adalah operator hubung
(relational operator) yang berarti lebih kecil dari.
Contoh pertama adalah ekspresi penjumlahan, contoh kedua adalah
ekspresi pengurangan dan yang ketiga adalah ekspresi relasional.
Semua contoh di atas adalah ekspresi yang menggunakan operator
binary, dimana terdapat dua operand. Jika operandnya tiga maka
disebut operator ternary dan jika satu maka disebut operator unary.
Statemen
Statemen adalah instruksi C yang lengkap untuk komputer. Semua
statemen C diakhiri oleh semikolon (;). Berikut adalah contoh
statemen:
i=50;
a=b+c;
m=d/2;

Pada contoh pertama, tanda sama dengan (=) disebut sebagai


assignment operator dan digunakan untuk memberikan nilai pada
sebelah kanannya ke operand pada sebelah kiri. Oleh karena itu nilai
50 diberikan ke variabel i. jika diperhatikan, statemen pertama ini
adalah tidak lain sebuah ekspresi yang menggunakan operator
assignment dan diakhiri oleh semicolon. Pada contoh ini, operandnya
berupa 50 dan variabelnya adalah i.
variabel
variabel adalah lokasi pada memori yang sudah diberi nama. Pada
statemen kedua di atas (a=b+c), nilai pada sebelah kanan diberikan ke
variabel a yang ada di sebelah kiri, oleh karena itu terlebih dahulu
ekspresi b + c harus diselesaikan, misal b=4 dan c=5 maka;
a = b + c;
a = 4 + 5;
a = 9;

Ekspresi terakhir memberikan nilai 9 ke variabel a. Dengan


menambahkan semikolon di akhir baris, ekspresi berubah menjadi
statemen. Maka variabel a berubah nilainya menjadi 9.

2
- Operator Precedence
Misalkan terdapat statemen dengan beberapa ekspresi sebagai
berikut:
j = 5 + k * 2;

jika k=3, berapakah nilai j? untuk menjawabnya diperkenalkan terlebih


dahulu operator precedence, operator ini mengatur operator mana
yang lebih dahulu bekerja melakukan operasi matematik. Perhatikan
tabel di bawah.
Tabel 1. Operator Precedence
Precedence level Operator
1 * (perkalian), /, %
2 +, −

Berdasarkan tabel di atas, perkalian, pembagian dan modulo (hasil


pembagian) diselesaikan terlebih dahulu sebelum ekspresi
penjumlahan dan pengurangan. Maka pada ksus di atas nilai j adalah
11.
Blok Statemen
Blok statemen terdiri dari satu atau lebih statemen yang digrup
bersama-sama, jadi compiler melihat mereka sebagai statemen
tunggal. Sebagai contoh: jika di halaman rumah kita ketinggian rumput
melebihi 10 cm maka rumput tersebut perlu untuk dipotong. Untuk
memotong digunakan gunting rumput. Programnya adalah:
If (rumput >= 10) {
PakaiGuntingRumput ();
TaruhDiWadah ();
} else {
SantaiDiRumah ();
}

Blok statemen diawali dengan buka kurung { dan diakhiri dengan tutup
kurung }, semua statemen antara tanda { dan } disebut sebagai tubuh

3
blok statemen. Jadi di dalam statemen bisa juga terkandung fungsi,
fungsi-fungsi tersebut adalah PakaiGuntingRumput() dan
TaruhDiWadah().

Blok Fungsi
Blok fungsi merupakan blok kode yang didesain untuk melakukan
suatu pekerjaan (task). Perbedaan antara blok fungsi dengan blok
statemen adalah pada blok statemen terdiri dari operator
(penjumlahan, pengurangan dan yang lainnya) sedangkan pada blok
fungsi tidak ditemukan operator melainkan nama fungsi dan tipe
datanya. Perhatikan contoh berikut:
int volumeDuaBalok() { //fungsi bernama volumeDuaBalok bertipe
data int
int total;
volumeBalok1(); //fungsi lain, fungsi di dalam fungsi
volumeBalok2();//fungsi lain, fungsi di dalam fungsi
total = volumeBalok1()+volumeBalok2;
return total;
}

Pada koding di atas, di dalam blok fungsi volumeDuaBalok() terdapat


fungsi lain yaitu volumeBalok1() dan volumeBalok2(). Penjelasan
tentang fungsi lebih detail akan disampaikan pada Bab 5.
B. Lima Langkah Program
Jika ingin membuat program maka terdapat lima komponen dasar
yaitu 1) Inisialisasi 2) Input 3) Proses 4) Output 5) Penghentian.
1. Inisialisasi
Tujuan inisialisasi adalah untuk menyediakan lingkungan atau
keadaan yang sesuai dengan program yang akan dibuat. dengan kata
lain langkah inisialisasi melakukan semua bentuk persiapan
pendahuluan sebelum program mulai running (eksekusi) untuk
menyelesaikan pekerjaan utamanya.
2. Input
Langkah input merupakan runtutan statemen program yang
diperlukan untuk mendapatkan informasi yang diperlukan untuk
menyelesaikan pekerjaannya. Input mungkin saja bisa berasal dari
sensor, potensiometer, database dan lain-lain.

4
3. Proses
Sensor memberikan data ke Arduino lalu Arduino memprosesnya
menjadi suatu data baru, pengubahan data input menjadi suatu data
baru disebut sebagai proses.
4. Output
Jika tahap proses selesai maka diperoleh data baru, data baru ini
disebut sebagai output. Bisa juga data baru tersebut diproses lagi dan
hasil akhirnya adalah output.
5. Penghentian
Tahap penghentian (termination) terjadi saat program running dan
dilakukan penghentian, namun dalam banyak kasus pada project
Arduino tahap ini sangat jarang digunakan.
Perhatikan sketch berikut:
void setup()
{ //memulai tubuh fungsi setup()
Serial.begin(9600); //langkah 1: inisialisasi
Serial.println(“ini adalah program pertama Arduinoku”);
//tahap input: tulisan “ini adalah program pertama
Arduinoku”
//tahap proses: serial objek memformat data (berupa
tulisan) untuk ditampilkan
//tahap output: munculnya tulisan “ini adalah program
pertama Arduinoku” di layar monitor.
} //akhir dari tubuh fungsi setup()

void loop()
{ //memulai tubuh fungsi loop()
}//akhir tubuh fungsi loop()

Pada koding di atas, terdapat fungsi setup() dan loop(), kedua fungsi
ini merupakan fungsi default dari IDE Arduino. Berikut adalah
penjelasannya:
Fungsi setup()

5
Setiap program Arduino memiliki fungsi setup(), tujuan dari fungsi ini
adalah menyediakan lingkungan dimana program akan running.
Fungsi loop()
Setiap program Arduino harus memiliki fungsi loop(). Sketch atau
program pada Arduino pertama kali menjalankan fungsi setup() baru
kemudian menjalankan fungsi loop(). Apapun yang ditaruh di dalam
fungsi loop(), program di dalamnya akan terus menerus running
(perulangan). Hal tersebut akan berakhir jika daya dicabut atau board
Arduino di off kan.
C. Instalasi Integrated Development Environment (IDE) Arduino
Pada saat buku ini ditulis, versi terbaru dari IDE Arduino adalah
versi 1.8.10 untuk Windows. Buka arduino.cc di browser maka akan
muncul seperti gambar di bawah ini:

Gambar 1.1. Laman Arduino di arduino.cc


Pilih download, kemudian akan tampil seperti gambar di bawah ini:

6
Gambar 1.2. Jendela download IDE Arduino
Terdapat banyak pilihan untuk melakukan instalasi, pada kasus ini kita
menginstalasi IDE Arduino pada windows dan menggunakan zip,
bukan installer. Kelebihan zip adalah saat kita selesai mendownload,
tidak diperlukan lagi koneksi internet untuk melakukan instalasi. Pilih
windows zip pada gambar di atas, kemudian softwarenya akan
terdownload. Jika sudah terdownload, buka folder Arduinonya, lalu
klik kanan pada file extensi Arduino, buatlah shortcutnya di desktop.
Ilustrasinya adalah sebagai berikut:

7
Gambar 1.3. Menempatkan executable Arduino ke Desktop
Buka desktop kemudian buka aplikasi Arduino, jendela pertama yang
muncul adalah sebagai berikut:

Gambar 1.4. Tampilan pertama Arduino IDE

8
Seperti yang sudah disampaikan di atas bahwa void setup() berfungsi
menyiapkan lingkungan yang cocok untuk menjalankan program.
Fungsi void setup() merupakan tempat yang tepat untuk
menginisialisasi pin-pin input dan output sehingga pin-pin pada board
Ardunio siap untuk menjalankan fungsi void loop().
D. Memasukkan library
Salah satu kelebihan Arduino adalah tersedianya begitu banyak
library, cukup mengetikkan library yang diinginkan pada mesin pencari
maka kita akan dengan mudah mendapatkannya atau cara lain yaitu
melalui library manager di IDE Arduino. Library merupakan suatu paket
koding yang sudah disediakan dan dibuat oleh pihak/orang lain. Library
berfungsi menyediakan lingkungan yang dibutuhkan oleh program
yang dijalankan {biasanya pada fungsi loop()}. Sebagai contoh jika
kita ingin interface board Arduino dengan LCD 16x2, cukup masukkan
library liquidCrystal.h. Dengan demikian LCD siap menampilkan data
(teks dan angka), waktu dan lain-lain dari Arduino. Pada gambar
dibawah diperlihatkan cara memasukkan library LCD:

Gambar 1.5. Cara import library

9
Berdasarkan gambar di atas, cukup pilih sketch>include library >
LiquidCrystal. Kita sudah berhasil memasukkan library di IDE Arduino
seperti pada gambar di bawah:

Gambar 1.6. Library LCD pada IDE Arduino


Bagaimana jika library yang diinginkan tidak tersedia di IDE Arduino?
Seperti yang disampaikan sebelumnya bahwa library dapat juga dicari
pada library manager (harus terkoneksi internet), misalkan kita ingin
memasukkan library RTC (real time clock), pilih sketch > include
library > ketikkan “RTClib”, maka akan muncul jendela seperti di
bawah ini:

Gambar 1.7. Tampilan library manager IDE Arduino

10
Jika kita ingin memasukkan library RTC DS3231 langkah selanjutnya
adalah klik instal, maka library akan terinstal di IDE Arduino.

E. Menjalankan program pertama


Saat pertama kali membuak sketch, nama yang tertera memiliki
format:
sketch_mmmddx

mmm adalah singkatan dari tiga huruf pada bulan, misal bulan
desember akan tertulis dec. sedangkan dd menunjukkan tanggal,
sedangkan x merupakan huruf yang menunjukkan urutan.
Hubungkan board Arduino ke laptop / PC, selanjutnya pilih tools >
Board > COM pada port, caranya tools > Port >
COM..(Arduino/Genuino Uno). Lebih jelasnya dapat dilihat pada
gambar di bawah ini:

Gambar 1.8. Memilih port yang ada Arduino di IDE Arduino


Untuk mengetahui apakah board Arduino dapat bekerja atau tidak,
cukup memanfaatkan LED pada pin 13. Kodingnya sudah disediakan di
IDE Arduino, langkahnya sebagai berikut: File > Examples > 01.Basics
> Blink. Supaya lebih jelas, perhatikan gambar berikut:

11
Gambar 1.9. Program kedap-kedip di board Arduino Uno
Sketch blink akan terbuka secara otomatis, tampilannya sebagai
berikut:

Gambar 1.10. Sketch menyalakan LED pada pin 13

12
Untuk mengecek apakah koding yang ditulis benar, dilakukan verify
(compile), tombol verify adalah paling kiri atas yang bertanda centang
( √ ). Jika tidak ditemukan error maka tampilan pada bagian bawah IDE
Arduino adalah sebagai berikut:

Gambar 1.11. Sketch yang dicompile tanpa ditemukan kesalahan


Selanjutnya kita akan mengupload sketch tersebut ke board Arduino,
caranya sebagai berikut: klik upload (bersebelahan dengan verify,
berbentuk Æ), tanpa menunggu lama board Arduino Uno berhasil
mendownload program tersebut, LED pada pin 13 akan kedap-kedip.
Dengan demikian kita berhasil membuat dan menguplaod program ke
board Arduino Uno.

13
Soal-Soal
1. Perhatikan sintaks di bawah ini, sebutkan apakah termasuk
variabel, statemen atau fungsi. Berikan alasannya.
a. a=d+f
b. b=c+k;
c. float kelilingPersegi()
2. Kapankah operator precedence digunakan? Jelaskan.
3. Apa perbedaan antara bahasa pemrograman Arduino dengan
bahasa C?
4. Apa fungsi library pada IDE Arduino?

14
BAB II

Tipe Data C Arduino

Pada bab sebelumnya dibahas tentang variabel, variabel


merupakan bagian dari memori yang sudah diberikan nama. Perlu
dipahami bahwa saat mendefinisikan variabel, kita juga harus
memberitahukan compiler tipe data apa yang digunakan pada variabel
tersebut. Tipe data variabel sangat penting karena hal tersebut
menentukan berapa banyak byte dari memori yang dipakai untuk
variabel serta menunjukkan tipe data jenis apa yang bisa disimpan di
dalam variabel tersebut. Perhatikan tabel di bawah yang menampilkan
tipe data serta nilainya.

Tabel 2-1. Nilai tipe data C Arduino

Tipe data Panjang Rentang nilai


byte
boolean 1 Dua kemungkian, true dan false
char 1 Rentang: -128 sampai +127
unsigned char 1 Rentang: 0 sampai 255
byte 1 Rentang: 0 sampai 255
int 2 Rentang: -32768 sampai 32768
unsign int 2 Rentang: 0 sampai 65535
word 2 Rentang: 0 sampai 65535
long 4 Rentang: -2147483648 sampai
2147483648
unsigned long 4 Rentang: 0 sampai 4294967295
float 4 Rentang: -3.4028235E+38
sampai 3.4028235E+38
double 4 Rentang: -3.4028235E+38
sampai 3.4028235E+38
string ? null (‘\0’) tipe data reference
dibangun dari susunan karakter
String ? Objek tipe data reference

15
array ? Susunan tipe data yang diacu
oleh nama variabel tunggal
void 0 Deskripsi yang digunakan dengan
fungsi sebagai tipe data kembali
ketika fungsi tidak
mengembalikan nilai

A. Kata kunci bahasa C


Setiap tipe data pada tabel 2-1 di atas seperti boolean, char dll adalah
kata kunci bahasa C. Kata kunci adalah kata yang memiliki arti spesial
pada kompiler C. Karena kata kunci disediakan untuk digunakan oleh
kompiler maka kita tidak bisa menggunakannya sebagai nama variabel
atau fungsi yang ingin kita buat. Kata kunci lain yang digunakan adalah
for, while, case dll.

B. Nama variabel pada bahasa C


Jika ingin membuat nama dari variabel, maka harus mengikuti
ketentuan berikut:

1. Boleh menggunakan huruf dari A sampai Z atau dari a sampai


z.
2. Boleh menggunakan karakter underscore ( _ ).
3. Boleh menggunakan angka dari 0 sampai 9, tapi tidak boleh
ditempatkan pada karakter pertama dari nama variabel yang
dibuat.

Karakter underscore biasanya digunakan untuk menyambungkan


antara dua kata karena pemberian nama variabel tidak boleh ada spasi.
Sebagai contoh: nama variabel jenis hewan, penulisan seperti ini salah
yang benar adalah jenis_hewan. Berikut adalah pemberian nama
variabel yang benar:
teknik

FisikaDasar

Elektronika_lanjut

hari1

16
sedangkan penulisan nama variabel yang salah adalah:
^teknik

Fisika-Dasar

Elektronika_lanjut?

1hari

Ingat bahwa bahasa C adalah case sensitif, maka kedua variabel myData
dan MyData adalah berbeda.

Tipe Data boolean


Tipe data boolean hanya tergantung dari dua keadaan: true atau false.
Nilai variabel ini tidak dapat dirubah, karena akan bernilai 1 saat true
dan 0 saat false. Berikut adalah cara yang benar saat menggunakan
variabel tipe datanya boolean:
boolean sakelar=false;

contoh lain, jika sakelar on maka nilai true, dan bernilai false jika
sakelar off. Perhatikan listing programnya:
boolean sakelar;

keadaanSakelar=ReadKeadaanSakelar(sakelarYangMana);

if (keadaanSakelar) {

matikanSakelar (sakelarYangMana);

} else {

nyalakanSakelar (sakelarYangMana);

17
Bilangan Biner
Komputer hanya memahami dua keadaan, low (0) dan high (1) atau off
dan on. Oleh karena itu komputer menggunakan sistem bilangan biner.
Jadi bilangan biner hanya memiliki dua jenis yaitu 0 dan 1.

Bit berarti binary integer, jadi tipe data bit adalah data biner (berbasis
2) bernilai bulat. Kita sering mendengar kata byte, byte sebenarnya
adalah terdiri dari 8 bit. Perhatikan bahwa penomoran bit dimulai dari
0 sehingga 8 bit berarti: 2 adalah bit pertama sehingga bit ke delapan
adalah 2 .

Tipe data char


Berdasarkan tabel 2-1 di atas, kita boleh menggunakan tipe data char
saat nilai variabel yang kita buat tidak melebihi 1 byte, selain itu tipe
data ini tidak bisa digunakan untuk nilai yang bernilai desimal.

Tipe data byte


Byte bernilai 8-bit, jika diperhatikan nilai byte dua kali tipe data char.
Berdasarkan tabel 2-1, nilai byte dengan unsigned char sama. Jadi mana
yang akan kit gunakan? Ini tergantung data apa yang kita olah. Sebagai
contoh, sensor memberikan data ke Arduino berupa byte, maka jia kita
ingin mengolahnya sebaiknya menggunakan byte. Tapi secara umum,
para programmer menggunakan tipe unsigned char.

Tipe data int


Tipe data int merupakan integer pada C dan merupakan besaran
(quantity). Pada Arduino C, tipe data ini memiliki 16-bit. Yang menarik
adalah jika menggunakan tipe data int pada permbagian 9/5 maka hasil
yang diperoleh sebesar 1 bukan 2 (pembulatan). Tipe data ini sama
nilainya dengan unsigned int, kebanyakan programmer menggunakan
tipe data int daripada unsigned int.

Tipe data word


Tipe data word memerlukan penyimpanan dan rentang nilainya sama
dengan unsigned int. Namun tipe data word lebih diasosiasikan
dengan bahasa assembly. Jadi dalam pemrograman arduino kita akan
lebih sering menggunakan unsigned int.

18
Tipe data long
Karena tipe data long menggunakan 32 bit, diasumsikan bahwa
rentang nilai antara positif dan negatif sebesar dua milyar. Tipe long
juga merupakan tipe data integer sehingga tidak dapat digunakan
untuk merepresentasikan nilai pembagian (yang menghasilkan koma).

Tipe data float dan double


Tipe data float digunakan untuk bilangan koma atau hasil pembagian,
misalnya 5:2=2,5 nilai ini jika disimpan dalam bentuk tipe data int
maka yang tersimpan adalah 2. Supaya kita bisa menyimpan 2,5 maka
digunakan tipe data float.

Tipe data double sebenarnya sama saja dengan float yaitu untuk
mendefinisikan atau menyimpan bilangan decimal atau hasil
pembagian. Tapi perbedaannya adalah memori penyimpanan yang
lebih besar, jika pada float memerlukan 4 byte maka dalam double
membutuhkan 8 byte.

Tipe data string


Tipe data string sebenarnya adalah representasi dari kumpulan ASCII
(American Standard Code for Information Interchange) yang dilihat
sebagai suatu kesatuan. Jadi tiap huruf memiliki nilai (dalam decimal,
octal, hexadecimal dan biner) yang berbeda, bahkan huruf a berbeda
dengan huruf A, jika pada huruf a bernilai decimal sebesar 97 maka
huruf A bernilai 65. Saat kita mengetikkan huruf a yang terbaca oleh
mikrokontroler adalah 97. Berikut dijabarkan nilai dari huruf
berdasarkan ASCII mulai dari A-Z dan a-z.

Tabel 2.2. Tabel ASCII untuk huruf A-Z dan a-z

Huruf Biner Octal Decimal Hexadecimal


A 100 0001 101 65 41
B 100 0010 102 66 42
C 100 0011 103 67 43
D 100 0100 104 68 44
E 100 0101 105 69 45
F 100 0110 106 70 46
G 100 0111 107 71 47

19
Huruf Biner Octal Decimal Hexadecimal
H 100 1000 110 72 48
I 100 1001 111 73 49
J 100 1010 112 74 4A
K 100 1011 113 75 4B
L 100 1100 114 76 4C
M 100 1101 115 77 4D
N 100 1110 116 78 4E
O 100 1111 117 79 4F
P 101 0000 120 80 50
Q 101 0001 121 81 51
R 101 0010 122 82 52
S 101 0011 123 83 53
T 101 0100 124 84 54
U 101 0101 125 85 55
V 101 0110 126 86 56
W 101 0111 127 87 57
X 101 1000 130 88 58
Y 101 1001 131 89 59
Z 101 1010 132 90 5A
A 110 0001 141 97 61
B 110 0010 142 98 62
C 110 0011 143 99 63
D 110 0100 144 100 64
E 110 0101 145 101 65
F 110 0110 146 102 66
G 110 0111 147 103 67
H 110 1000 150 104 68
I 110 1001 151 105 69
J 110 1010 152 106 6A
K 110 1011 153 107 6B
L 110 1100 154 108 6C
M 110 1101 155 109 6D
N 110 1110 156 110 6E

20
Huruf Biner Octal Decimal Hexadecimal
O 110 1111 157 111 6F
P 111 0000 160 112 70
Q 111 0001 161 113 71
R 111 0010 162 114 72
S 111 0011 163 115 73
T 111 0100 164 116 74
U 111 0101 165 117 75
V 111 0110 166 118 76
W 111 0111 167 119 77
X 111 1000 170 120 78
Y 111 1001 171 121 79
Z 111 1010 172 122 7A

Perhatikan contoh mendeklarasi string di bawah ini:


char stringKu[6];

berdasarkan string di atas, yang tersedia hanyalah 5 karakter. Dimana


karakter satu yang tersisa? Karakter terakhir yaitu null karakter, null
ini digunakan untuk mengakhiri sebuah array dari tipe data char yang
digunakan sebagai string.

Tipe data String


Tipe data String berbeda dengan tipe data string, jika pada string
dibuat dari tipe data char sedangkan tipe data String merupakan kelas
C++ yang dibuat dari tipe data string tapi dilihat sebagai objek bukan
susunan (array) karakter. Sebagai contoh kita mendefinisikan variabel
bernama dataSaya menggunakan tipe data String, karena dilihat
sebagai objek maka kita bisa mengkonversinya. Pada kasus ini kita
konversi menjadi huruf capital. Berikut adalah kodingnya:

String dataSaya = String (100); //artinya dataSaya dengan ruang


penyimpanan maksimum 99 karakter
dataSaya=dataSaya.ToUpperCase();

21
kelebihan tipe data String adalah kemudahannya untuk dikonversi ke
bentuk lain dengan menggunakan fungsi default yang disediakan,
berikut adalah fungsi-fungsi yang dapat dikenakan pada String:

Tipe data void


Tipe data void sebenarnya tidak memiliki nilai, artinya jika kita
mengenakan suatu fungsi menggunakan tipe data ini maka fungsi
tersebut tidak memiliki nilai kembali (return value). Salah satu aplikasi
tipe data void adalah pada koding default IDE Arduino, sintaks yang
dimaksud adalah sebagai berikut:
void setup(){

//the setup code body

void loop(){

//the loop code body

Pada koding di atas, baik fungsi setup maupun loop tidak memiliki nilai
kembali. Artinya setelah statemen terakhir running pada kedua fungsi
tersebut, keduanya tidak memiliki nilai. Perhatikan bedanya jika kita
membuat fungsi luasPersegiPanjang(). Luasnya sebesar = × ,
kita membuat fungsi luas menggunakan tipe data int. Hal ini berarti
bahwa pada saat running statemen terakhir di fungsi tersebut, nilainya
diberikan ke fungsi luasPersegiPanjang(). Misalkan hasil perkalian
panjang dan lebar sebesar 20 maka nilai kembali fungsi
luasPersegiPpanjang() sebesar 20. Penjelasan fungsi lebih jelasnya
akan disampaikan pada bab 3.

Tipe data array


Tipe data array merupakan kumpulan nilai yang memiliki tipe data
sama (misal tipe data int, atau long dst) dan menggunakan nama
variable yang sama. Berikut adalah contohnya:

22
int hasil[4];

float suhu[150];

Perhatikan contoh di atas, pada statemen pertama tipe data yang


digunakan adalah int dan nama variabelnya adalah hasil, sedangkan
nilai int yang tersusun (terkumpul) sebanyak 5. Susunan int sebanyak 5
inilah yang disebut array. Supaya lebih jelas, mari kita asumsikan
bahwa susunan data (array) dimulai dari memori dengan alamat 250
(tiap memori berkapasitas 1 byte), penempatan array int adalah sebagai
berikut:

250 251 252 253 254 255 256 257


hasil[0] hasil[1] hasil[2] hasil[3]

Berdasarkan ilutrasi di atas, indeks array dimulai dari 0 bukan 1. Jadi


kalau kita membuat array dengan susunan 10 data maka elemen array
tertinggi adalah elemen ke-9 dan elemen pertama berindeks 0. Kenapa
tiap elemen array memerlukan dua lokasi memori? Karena tipe data int
sebesar 2 byte. Jika kita menggunakan float maka tiap elemen array
memerlukan 4 lokasi memori.

23
Soal-Soal

1. Perhatikan sintaks berikut:


#define panjang = 2.35
#define lebar = 1
int luasPersegiPanjang(){
hasil = panjang * lebar;
return hasil;
}
Pada bagian manakah sintaks di atas harus diperbaiki? Jelaskan!
2. Jika Andi merekam suhu di rumahnya menggunakan alat yang dia
buat, bantulah Andi untuk menentukan:
a. tipe data apa yang tepat untuk menyimpan data suhu tersebut?
b. Jika dipilih tipe data int, apakah kelemahan dan kelebihannya?
Jelaskan.
3. Yani kebingungan menetukan nilai kembali (tipe datanya) apa yang
akan digunakan untuk fungsi luasLingkaran() yang dia buat,
menurut anda tipe data apakah sebaiknya yang Yani pakai untuk
fungsi luasLingkaran() tersebut? Jelaskan.
4. Jika suatu data berupa “Joni” ingin dibuat dalam bentuk array, tipe
data apakah sebaiknya yang digunakan? Elemen array yang
tertingginya berapa?
5. Rudi ingin membuat fungsi jumlahBukuDipinjam(), apakah fungsi
tersebut boleh menggunakan tipe data void? Jelaskan.

24
BAB III

Membuat Keputusan di Arduino

Pada bahasa C Arduino, salah satu bagian penting adalah


membuat keputusan. Keputusan dibuat melalui statemen if, else,
for, dan lain-lain. Tapi sebelum ke tiap statemen terlebih dahulu
diperkenalkan operator biner, artinya operator ini hanya memerlukan
dua operand. Berikut disajikan dalam tabel operator relasional dimana
operator ini termasuk dalam operator biner.

Tabel 2.1. Operator biner

Operator Interpretasi
> Lebih besar dari
>= lebih besar dari atau sama dengan
< Lebih kecil dari
<= Lebih kecil dari atau sama dengan
== Sama dengan
!= Tidak sama dengan

Supaya lebih memahami, perhatikan contoh berikut:


5 > 4 //benar

5 >= 4 //benar

5 < 4 //salah

5 <= 4 //salah

5 == 4 //salah

5! = 4 //benar

Selanjutnya kita pelajari beberapa statemen pengambilan keputusan,


yang pertama adalah statemen if. Penjabarannya adalah sebagai
berikut.

25
A. Statemen if
Sintaks untuk statemen if adalah sebagai berikut:
if (ekspresi1)
{ //memulai blok statemen if
//mengesekusi blok statemen ini hanya jika ekspresi1
benar
} //akhir dari blok statemen if

Statemen if terdiri dari kata kunci “if” dan diikuti oleh buka lalu tutup
kurung. Di dalam dua kurung tersebut terdapat sebuah ekspresi yang
melakukan kalkulasi untuk mengecek apakah benar atau salah suatu
keadaan. Kemudian diikuti oleh buka kurung kurawal “{“, tanda ini
menunjukkan bahwa blok statemen dimulai, kemudian diikuti oleh
satu atau lebih statemen program. Semua statemen yang ada di dalam
dua kurung kurawal tersebut disebut sebagai blok statemen if, yang
dieksekusi/running jika pengujian if adalah benar. Blok statemen blok
diakhiri oleh tutup kurung kurawal “}”. Perhatikan kode program
berikut:
Int b = 10;
//beberapa statemen
If (b < 20)
{
b=lakukanSesuatu(); //melakukan hal ini jika b < 20
}
lakukanYangLain();

penjelasannya: pertama-tama mendefinisikan sebuah variabel bertipe


data integer, nama variabelnya adalah b dan menginisialisasinya
dengan nilai 10. Jika nilainya tetap di bawah 20 ekspresi b<20 adalah
benar, maka statemen if dijalankan. Fungsi lakukanSesuatu()
dipanggil. Fungsi lakukanSesuatu() memiliki tipe integer. Hal ini
berarti bahwa setelah fungsi lakukanSesuatu() running, nilainya
(berupa integer) dimasukkan atau berikan ke b. Jika nilai b = atau >
20 maka fungsi lakukanYangLain() dipanggil.
Bagaimana jika ekspresi pada statemen if salah?

26
Jika salah maka tubuh fungsi if diskip dan menjalankan statemen lain,
pada kasus ini adalah memanggil fungsi lakukanYangLain().

Program LED kedap-kedip


Sebelum ke koding pada IDE Arduino, dirangkai terlebih dahulu
dua LED (warna hijau dan merah) ke board Arduino Uno. LED hijau ke
pin 10 dan LED merah ke pin 11. Pin input/output board Arduino
mengalirkan arus maksimum 40 mA (miliAmpere) dan beroperasi pada
tegangan 5 V. Sedangkan LED secara umum memiliki arus maksimum
50 mA, jika mendapatkan arus di atas tersebut maka LED akan rusak.
Jadi sebenarnya tanpa menggunakan resistor pada rangkaian LED, LED
masih bisa beroperasi tapi hal tersebut kurang baik. Kita setting arus
yang melalui LED sebesar 25 mA maka diberikan resistor, berapakah
nilainya? Mari kita hitung menggunakan hukum Ohm:

= 5 V, = 25 mA maka resistansinya sebesar:


5
= = 200 Ω
0.025
Jadi nilai resistornya 200 Ω. Kalau tidak menemukan resistor yang 200
Ω maka boleh menggunakan resistor pada range 200 – 1000 Ω. Pada
rentang tersebut LED masih bisa menyala dengan baik.
Perhatikan rangkaian Arduino dengan LED pada gambar di bawah ini:

27
Gambar 3.1. Board Arduino dirangkai LED

Kata kunci const


const merupakan pemodifikasi tipe data (data type modifier).
Pada kasus ini const digunakan untuk memodifikasi tipe data int.
Penggunaan const pada tipe data menunjukkan bahwa sebuah variabel
yang didefinisikan dengan const nilainya tidak dapat dirubah (nilai ini
didefinisikan saat diinisialisasi) selama program running, atau dengan
kata lain penggunaan kata const menunjukkan read only. Pada
program LED yang kita buat, LED1 (warna hijau) memiliki nilai 10 dan
LED2 (warna merah) memiliki nilai 11. Saat program berjalan, nilai
tersebut tidak akan bisa berubah. Secara umum penggunaan const
pada hal-hal berikut:

9 Gunakan const kapanpun saat kita menginginkan data pada suatu


program tidak berubah selama perogram berjalan
9 const ditempatkan sebelum tipe data dari suatu variabel
9 biasanya variabel yang disertai modifier const ditulis
menggunakan huruf besar, seperti: LED1, LAMPU, dll.

Mari kita buat sintaksnya pada IDE Arduino:

28
/*
Program LED kedap kedip
Oleh Muh Pauzan
*/
//memberikan nama pada tiap pin LED dan tidak diperbolehkan
untuk mengubahnya

const int LED1=10;

const int LED2=11;

//setup yang selalu dijalankan sekali saat menekan tombol reset

void setup() {

//menjadikan LED1 dan LED2 sebagai output

pinMode (LED1, OUTPUT);//LED1 menyala

pinMode (LED2, OUTPUT); //LED2 menyala

//loop yang selalu dilakukan berulang-ulang

void loop(){

digitalWrite (LED1,HIGH); //set LED1 menyala

digitalWrite (LED2, LOW); //set LED2 mati

delay(1000); //kondisi di atas berlangsung selama 1 detik

digitalWrite (LED1, LOW); //set LED1 mati

digitalWrite (LED2, HIGH); //set LED2 nyala

Program di atas dapat dijalankan dengan menggunakan statemen if,


karena if hanya logis benar atau salah. Maka diperlukan dua kondisi.
Coba bayangkan bilangan cacah di bawah ini:

0 ÷ 2 = 0 sisa 0

1 ÷ 2 = 0 sisa 1

2 ÷ 2 = 1 sisa 0
29
3 ÷ 2 = 1 sisa 1

4 ÷ 2 = 2 sisa 0

5 ÷ 2 = 2 sisa 1

Perhatikan sisa pembagian di atas selalu selang-seling 0 dan 1. Maka


kita bisa memanfaatkan hal tersebut pada statemen if yang dibuat.
Sintaks LED kedap-kedip menggunakan statemen if adalah sebagai
berikut:
/*
Program LED kedap kedip dengan statemen if
Oleh Muh Pauzan
*/
//memberikan nama pada tiap pin LED dan tidak memperbolehkan
untuk mengubahnya
const int LED1=10;
const int LED2=11;
//setup yang selalu dijalankan sekali saat menekan tombol reset
void setup() {
//menjadikan LED1 dan LED2 sebagai output
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
long angka = 0; //mendefinisikan variabel bernama angka dengan
tipe data long dan bernilai 0
}
//loop yang selalu dilakukan berulang-ulang
void loop(){
if(angka % 2 = =0) { //jika memenuhi kondisi ini, statemen
dibawah dijalankan
digitalWrite(LED1, HIGH); //LED1 menyala
digitalWrite(LED2, LOW); //LED2 mati
delay (1000); //LED 1 nyala LED2 mati berlangsung 1 detik
}
if(angka % 2 ==1){ //jika modulo bernilai 1, dijalankan statemen
dibawah ini
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay (1000); //LED 1 mati LED2 nyala berlangsung 1 detik

30
}
angka = angka + 1; //tiap kali loop, nilai angka ditambah 1
}

B. Statemen if-else
Pada stetemen if, jika satu if nya berlogika benar maka if yang
lainnya berlogika salah. Jadi ada dua kondisi untuk statemen if. Cara
lain menggunakan dua kondisi tersebut adalah dengan menggunakan
statemen if-else. Jika pada statemen if berlogika benar maka pada
else pasti berlogika salah. Bentuk umum statemen if-else adalah
sebagai berikut:
if (ekspresi mengecek untuk logika benar){
//menajalankan statemen ini jika berlogika benar
} else {
//menjalankan statemen ini jika selain kondisi ekspresi pada if
di atas
}

Perhatikan bahwa statemen if dieksekusi jika hanya berlogika benar,


tapi jika tidak maka statemen else yang dijalankan.

Coba kita membuat koding untuk LED kedap kedip menggunakan


statemen if-else.
/*
Program LED kedap kedip dengan statemen if-else
Oleh Muh Pauzan
*/
//memberikan nama pada tiap pin LED dan tidak memperbolehkan
untuk mengubahnya
const int LED1=10;
const int LED2=11;
//setup yang selalu dijalankan sekali saat menekan tombol reset
void setup() {
//menjadikan LED1 dan LED2 sebagai output
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);

31
long angka = 0; //mendefinisikan variabel bernama angka dengan
tipe data long dan bernilai 0
}
//loop yang selalu dilakukan berulang-ulang
void loop(){
if(angka % 2 = =0) { //jika genap jalankan statemen ini
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
delay (1000);
}else{ //jika tidak genap, jalankan statemen ini
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay (1000);
}
angka = angka + 1; //tiap kali loop, nilai angka ditambah 1
}

C. Kaskade statemen if
Jika kita memiliki banyak kemungkinan maka statemen if juga
banyak, sebagai contoh kita ingin mengkombinasikan nyala dari
empat buah LED, LED1 sampai dengan LED4 dirangkai pada pin 10
sampai dengan 13 secara berurutan. Rangkaiannya dapat dilihat pada
gambar di bawah ini:

32
Gambar 3.2. Rangkaian arduino dengan empat LED

Kodingnya sebagai berikut:


int keadaan;
if (keadaan ==1){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
delay(1000);
}
if (keadaan==2){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
delay(1000);
}
if (keadaan==3){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
digitalWrite (LED1, LOW);
digitalWrite (LED2, HIGH);

33
delay(1000);
}
if (keadaan==4){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
delay(1000);
}

Koding di atas kurang baik, karena mikrokontroler akan mengecek


satu persatu sampai dengan keadaan 4. Bayangkan jika memiliki 100
if maka diperlukan waktu 100 detik (karena delay 1 detik) untuk
mengecek semuanya. Kondisi seperti ini bisa diatasi dengan
menggunakan kaskade statemen if, sintaksnya adalah sebagai
berikut:
if (keadaan==1){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
delay(1000);
}else {
if (keadaan==2){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
delay(1000);
}else{
if (keadaan==3){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
digitalWrite (LED1, LOW);
digitalWrite (LED2, HIGH);
delay(1000);
}else{
if (keadaan==4){

34
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
delay(1000);
}
}
}

Kelebihan kaskade statemen if adalah jika statemen else pertama


terskip (dilompati) maka semua statemen if setelahnya terskip juga
sehingga menghemat waktu mikrokontroler dalam menajalankan
suatu program.

Operator menaik dan menurun


ƒ
Operator menaik (increment) yang digunakan pada program LED
kedap-kedip adalah:
angka = angka + 1;

angka meningkat 1 tiap satu loop program, misal pada loop pertama
nilainya 0 maka pada loop berikutnya adalah 1, begitu seterusnya.
Cara penulisan lain dari sintaks di atas adalah sebagai berikut:
angka++;

Selain operator meningkat ada juga operator menurun (decreament),


jika ingin menrunkan angka tiap sekali loop maka penulisannya
adalah:
angka = angka – 1;

penulisan lainnya adalah:


angka --;

Baik operator meningkat maupun operator menurun, keduanya dapat


dijadikan sebagai pra-meningkat, paska-meningkat, pra-menurun,
paska-menurun.
Perhatikan contoh berikut:

35
int c = 5; //deklarasi variabel bernama c bertipe data int
bernilai 5
int k; //deklarasi variabel bernama k bertipe data int
k=++c; //operator pra-meningkat
berdasarkan operator pra-meningkat di atas, berapakah nilai k? Nilai
k adalah c+1=6, sedangkan nilai c tetap yaitu 5.

Coba dibandingkan dengan sintaks berikut;


int c = 5;
int k;
k = c++; //operator paska-meningkat

Pada sintaks di atas, nilai c sebesar 5, diberikan ke k sehingga nilai k


adalah 5. Setelah itu nilai c ditambah 1 menjadi 6. Jadi nilai k =5 dan
c = 6. Operator pra dan paska meningkat juga berlaku sama untuk
operator menurun.

Sebelum melanjutkan ke bahasan berikutnya, berikut disajikan


operator preseden untuk bahasa C.

Tabel 3.2. Operator preseden

36
D. Statemen switch
switch adalah kata kunci pengontrol yang lain, berikut adalah sintaks
untuk statemen ini:

switch (ekspresi1) {
case 1:
//statemen dieksekusi jika ekspresi1 adalah 1
break;
case 2:
//statemen dieksekusi jika ekspresi1 adalah 2
break;
case 3:
//statemen dieksekusi jika ekspresi1 adalah 3
break;
//boleh menambah case sebanyak yang diperlukan
default:
//dijalankan jika ekspresi1 tidak memiliki “nilai case”
break:
}

Pada program menyalakan empat buah LED di atas, penggunaan


kaskade statemen if dapat juga diganti dengan statemen switch,
listing programnya adalah sebagai berikut:
int (keadaan) {
case 1:
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
delay(1000);
break:
case 2:
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
delay(1000);

37
break;
case 3:
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
digitalWrite (LED1, LOW);
digitalWrite (LED2, HIGH);
delay(1000);
break;
case 4:
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
delay(1000);
break;
default:
serial.println(“terjadi suatu kesalahan”);
break;
}

Perhatikan bahwa statemen switch harus bertipe data integer, tidak


boleh desimal (koma). Jadi tipe data yang diperbolehkan statemen
switch adalah int, char, byte atau long. Tipe data double atau float
tidak diperbolehkan untuk digunakan.
Berdasarkan sintaks pada program di atas, apa yang teradi jika
kondisi memenuhi case 1? Yang akan terjadi adalah semua statemen
switch diskip (dilompati) kemudian program akan berlanjut ke
statemen setelah (yang mengikuti) badan statemen switch tersebut.
Dari bentuk kaskade statemen if dengan statemen switch, manakah
yang lebih anda sukai?

Preprosesor C
Saat kita mencompile program, yang dilakukan pertama kali oleh
compiler adalah mencari direktif yang harus diproses sebelum mulai
compile program. Direktif ini disebut sebagai preprosesor direktif.
Direktif pada Arduino dapat dilihat pada tabel di bawah ini:

38
Tabel 3.3. Preprosesor direktif

Mari kita ambil #define untuk dibahas. Penggunaan const yang


berarti read only pada program menyalakan dua LED sebelumnya
dapat diganti dengan cara yang lebih baik yaitu menggunakan
preprosesor direktif #define. Berikut penggunaan const:

39
const int LED1 = 10 ;

const int LED2 = 11;

kodingnya jika menggunakan preprosesor direktif:


#define LED1 10
#define LED2 11

int led1 = LED1;


int led2 = LED2;

Kelebihan menggunakan #define adalah jika kita ingin mengubah nilai


LED1, cukup mengubah sintaks pada #define:
#define LED1 12

Kelebihan menggunakan direktif #define adalah kita lebih mudah


membaca dan memahami program.

40
Soal-Soal

1. Apakah kelebihan kaskade statemen if dibandingkan dengan


statetemen if? Sebutkan dan jelaskan.
2. Andi ingin membuat alat pengukur kelembaban tanah di sawahnya
menggunakan sensor kelembaban. Karena sawahnya luas, dia
menginstalasi 50 alat. Alat tersebut bekerja dengan memompa air
ke sawah yang memiliki kelembaban di bawah yang ditentukan.
Sebutkan dan jelaskan, statemen jenis apakah sebaiknya yang dia
gunakan di sketch Arduino? apakah statement if, if-else, kaskade
if? Atau yang lainnya?
3. Gunakanlah statement switch untuk menyalakan 5 buah LED. LED
warna merah menyala selama 1 detik, lalu mati. Kemudian LED
warna biru menyala selama 2 detik, LED biru mati. Lalu LED warna
hijau menyala selama 3 detik, lalu mati. Dilanjutkan LED bening
menyala selama 4 setik, kemudian mati. LED kuning menyala 5
detik dan mati. Boleh menggunakan board Arduino Uno atau
Arduino Nano.

41
BAB IV

Program Loop

Program loop adalah program yang dijalankan terus menerus


atau dengan kata lain dilakukan berulang-ulang. Sebagai contoh, kita
ingin membuat alat pengukur suhu maka mikrokontroler pada board
Arduino akan membaca suhu dari sensor suhu secara berulang dan
terus menerus. Pada IDE Arduino, secara default program yang tersedia
adalah void setup() dan void loop(). void loop() merupakan
program loop pada IDE Arduino.
Loop yang baik dapat diketahui dengan melihat beberapa parameter
berikut:
1. Inisialisasi variabel kontrol loop
Loop merupakan eksekusi dari satu atau lebih statemen, saat
mencapai statemen terakhir program kembali lagi ke statemen
pertama. Loop berkelakuan baik (well behaved loop) selalu
menginisialisasi satu atau lebih variabel pada program sebelum
statemen loop mulai dieksekusi. Biasanya, nilai dari satu variabel
digunakan untuk mengontrol jumlah iterasi yang dibuat pada
statemen loop
2. Tes kontrol loop
Kondisi kedua yang dilakukan untuk mengetahui loop berkelakuan
baik adalah dilakukan uji apakah diperlukan iterasi yang lain pada
statemen loop. Biasanya uji ini melibatkan operator relasional dan
variabel pengontrol loop.
3. Mengubah variabel kontrol loop
Variabel atau ekspresi pengontrol loop harus merubah keadaan.
Jika tidak maka loop berjalan selamanya. Kalau seperti ini, apakah
void loop() merupakan fungsi yang baik? Tentu tidak.

A. Loop for
Sintaks dari loop for adalah:
for (ekspresi1;ekspresi2;ekspresi3) {

//tubuh statemen loop for

42
}

//statemen yang dijalankan setelah loop for

ekspresi1 biasanya menginisialisasi variabel yang mengontrol loop,


ekspresi2 bertindak sebagai tes logika apakah suatu nilai yang akan
running di tubuh loop diperbolehkan atau tidak. Sedangkan ekspresi3
bertanggung jawab terhadap perubahan keadaan variabel yang
mengontrol loop. Alur kerja loop ini dapat dilihat pada gambar 4.1.

Gambar 4.1. Alur kerja loop for


Fungsi masing-masing ekspresi pada loop for di atas adalah sebagai
berikut:
1. Ekspresi1: biasanya menginisialisasi kounter pengontrol loop
2. Ekspresi2: biasanya melakukan uji relasional (diteruskan atau
tidak)
3. Ekspresi3: bertanggung jawab terhadap perubahan kounter dari
loop.
Jika kita ingin menggunakan variabel pengontrol lebih dari satu maka
bisa dilakukan dengan menggunakan koma antara satu pengontrol
dengan yang lain. Sebagai contoh, pengontrolnya adalah k dan j maka
sintaksnya:
for (k = 0, j = 1; k < 1000; k++) {

j yang diinisiasi bernilai 1 dan merupakan bagian dari ekspresi1. Saat


ekspresi1 dimulai dengan k=0 maka nilai k diproses ke ekspresi2,
karena nilai k<1000 nilai k berhasil melewati ekspresi2. Sehingga
dijalankan statemen yang ada di dalam tubuh for. Setelah selesai

43
diproses maka tahap selanjutnya adalah ke ekspresi3, pada tahap ini
nilai k dinaikkan atau ditambah satu, sekarang nilainya 0+1=1. k=1
diproses ke ekspresi2, maka menghasilkan logika benar karena
k<1000. Statemen pada tubuh for dijalankan untuk nilai k=1. Proses
ini berulang sampai diperoleh k=1000, saat hal tersebut terjadi maka
pada ekspresi2 akan menghasilkan logika salah. Karena salah maka
statemen di dalam tubuh for tidak dijalankan melainkan proses pada
loop for dihentikan dan dilanjutkan dengan statemen setelah tubuh
loop for.
¾ Program untuk mengetahui rangkaian proses pada loop for
Kita dapat melihat susunan atau rangkaian proses pada loop for
dengan menuliskan sintaks berikut ke IDE Arduino.
Listing 4.1. Demonstrasi loop for
void setup() {
int k;
Serial.begin(9600);
for (k=0, Serial.print(“exp1 k= “), Serial.println(k);
//ekspresi1
Serial.print (“exp2 k= “), Serial.println(k),
k<10; //ekspresi2
k++, Serial.print(“exp3 k= “), Serial.println(k))
{ //ekspresi3
Serial.print(“di dalam tubuh loop, k dikuadratkan= “);
//statemen pada tubuh loop for
Serial.println(k*k);//setelah line ini, ditulis pada line
baru
delay(1000);
}
}
void loop() {}

hasil program di atas yang ditampilkan pada serial monitor adalah


sebagai berikut:

44
Gambar 4.1. Alur program loop for
Perhatikan bahwa setelah melalui eksp1 (ekspresi1) dilanjutkan ke
eksp2, karena keadaan true maka dilanjutkan ke tubuh loopnya.
Setelah statemen terakhir dijalankan, akan dilanjutkan ke eksp3
(ekspresi3), setelah ekspresi3 dijalankan maka dilanjutkan ke eksp2,
eksp2 mengecek apakah kondisi true atau false, jika true maka
dijalankan statemen yang ada di tubuh loop. Begitu seterusnya terjadi
berulang-ulang sampai kondisi false terpenuhi, jika hal ini terjadi maka
program berhenti di ekspresi2.
Dengan menggunakan loop for, kita juga akan mencoba
membuat program menampilkan kuadrat dari bilangan-bilangan,
berikut adalah listing programnya.

45
Listing 4.2. Menampilkan kuadrat dari angka 0 sampai 9
#define MAXLOOP 10
void setup() {
int kuadrat[MAXLOOP];
int angka;

Serial.begin(9600);
for(angka=0; angka<MAXLOOP; angka++) {
kuadrat[angka]=angka*angka;
//menampilkan hasil di serial monitor
Serial.println(kuadrat[angka]);
}
}
void loop() {}

Hasil dari program di atas pada layar monitor dapat dilihat pada
gambar di bawah ini.

Gambar 4.2. Menggunakan loop for untuk kuadrat 0 sampai 9


Loop for juga bisa digunakan untuk membuat program LED
kedap-kedip, berikut adalah program untuk kedap-kedip LED pada pin
13.

46
Listing 4.3. LED kedap-kedip menggunakan loop for
#define LED 13
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
int angka;
for(angka=0; angka<1000; angka++) {
if (angka % 2 ==0) {
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
delay(500);
}
}

B. Loop while
Secara umum sintaks untuk loop while adalah;
while (expression2) {

// statemen di dalam tubuh while

} //akhir dari blok statemen while

Perhatikan sintaks di atas, loop while hanya menguji ekspresi2, jika uji
ekspresi2 berlogika benar maka statemen di tubuh while dijalankan
berulang-ulang sampai uji ekspresi2 berlogika salah. Sebenarnya loop
while sama saja dengan loop for, hanya saja ekspresi1 ditempatkan di
luar / sebelum loop for. Selain itu pada loop while ekspresi3
ditempatkan di dalam statemen tubuh dari loop while. Berikut adalah
sintaks program pada loop for ditulis ke dalam loop while.
Listing program 4.4. sintaks untuk loop while untuk angka yang
dikuadratkan
#define MAXLOOP 10

void setup() {

47
int kuadrat[MAXLOOP];

Serial.begin(9600);

angka = 0; //ekspresi1
while (angka<MAXLOOP) { //ekspresi2
kuadrat[angka] = angka * angka;
angka++; //ekspresi3
}
void loop(){}

C. Loop do-while
Sintaks loop do-while adalah sebagai berikut:
do {
//statemen di dalam tubuh loop
} while (ekspresi2);

Sama halnya dengan loop while, ekspresi2 merupakan bagian dari


loopnya. Tapi do-while dengan while loop punya perbedaan. Jika
kondisi berlogika salah maka statemen di dalam tubuh loop while tidak
dijalankan sedangkan meskipun kondisi awal berlogika salah maka
program pada tubuh loop do-while dijalankan meskipun hanya sekali.
Perhatikan contoh berikut menggunakan loop while;
int k = 1001;
while (k < 1000) {
lakukanSesuatu(k); //memanggil fungsi lakukanSesuatu
k++;
}

Saat program pertama kali memasuki loop while, uji terhadap k gagal
karena k yang disyaratkan loop adalah lebih kecil dari 1000 sedangkan
k yang diuji adalah 1001. Sehingga lakukanSesuatu() tidak dieksekusi.
Coba kita buat program di atas menggunakan loop do-while;
int k = 1001;
do {
lakukanSesuatu(k);
k++;
} while (k<1001);

48
Berdasarkan listing program di atas, meskipun nilai k berlogika salah
terhadap loop while tapi program loop tetap dijalankan meskipun
cuma sekali.

¾ Kata kunci break dan continue


Statemen break dan continue sering digunakan di dalam tubuh
blok loop. break berfungsi untuk mengakhiri statemen yang ada di
dalam tubuh loop sehingga program secara langsung menjalankan
statemen setelah tubuh blok loop. Sedangkan statemen continue
menggiring program ke bagian uji (seperti ke ekspresi2) sehingga jika
lolos uji maka dilanjutkan ke statemen yang ada di dalam tubuh loop.
Jadi saat mencapai statemen continue, semua statemen setelahnya
yang berada di dalam tubuh loop diskip.

D. Statemen break
Untuk lebih memahami statemen break, mari kita buat program
untuk memonitor suhu dari 200 tong yang diisi bahan kimia. Saat
menemukan suhu yang diinginkan, keluar dari loop dan memanggil
metode yang menambahkan bahan lain ke tong tersebut. Berikut
adalah sintaks programnya.

Listing 4.5. Contoh statemen break


#define MAXTONGDIUKUR 200
#define SETSUHU 160
int suhuTong;
int angka=0;
void loop() {
while (angka < MAXTONGDIUKUR) {
suhuTong = ReadTongTemp(angka);
if (suhuTong >=SETSUHU) {
break;
}
angka++;
if (angka==MAXTONGDIUKUR) //reset sehingga tetap di loop
angka = 0;
}
tambahBahan(angka);

49
if (angka < MAXTONGDIUKUR) {
angka++;
} else {
angka = 0;
}
}

50
Soal-Soal

1. Apakah ciri program loop yang baik? Sebutkan dan jelaskan


2. Pada sintaks loop for, ada berapa ekspresi? Sebutkan dan jelaskan
3. Perhatikan sintaks berikut:
float i;
int perkalian;
for(i=0; i<10;i++){
perkalian= i*2;
Serial.print(i);
Serial.print(“ x 2 =”);
Serial.println(perkalian);
}
Pada bagian manakah pada sintaks di atas perlu diperbaiki?

51
BAB V

Fungsi di Arduino

Fungsi digunakan supaya koding lebih termanagable, readable


dan digunakan pada task yang dilakukan berulang-ulang. Sebagai
contoh kita melakukan shalat lima kali sehari mulai dari subuh, zuhur,
asar, magrib dan isya yaitu pada jam 5, 12, 16, 18 dan jam 20 berturut-
turut. Kegiatan yang dilakukan untuk shalat adalah:
- Ganti baju
- Wudhu
- Pergi ke masjid
- Shalat
- Pulang dari masjid
- Ganti baju
Program untuk kegiatan di atas adalah:
if (jam==5){

gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;

if (jam==12){

gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;

52
If (jam==16) {

gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;

if (jam==18) {

gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;

If (jam==20) {

gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;

Perhatikan bahwa kegiatan di atas dilakukan berulang, tanpa


menggunakan fungsi sintaksnya panjang, jika kita buat fungsi bernama
shalat() yang didefinisikan sebagai berikut:

Shalat(){

gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;

53
}

Cukup dengan memanggil fungsi Shalat() untuk tiap kondisi if di atas,


maka sintaksnya menjadi lebih ringkas seperti di bawah ini:
If (jam==5){ //jika jam 5 maka dijalankan fungsi atau statemen
di tubuh if ini
Shalat();//memanggil fungsi Shalat()
}
If (jam==12){ //jika jam 12 maka dijalankan fungsi atau statemen
di tubuh if ini
Shalat();//memanggil fungsi Shalat()
}
If (jam==16){ //jika jam 16 maka dijalankan fungsi atau statemen
di tubuh if ini
Shalat();//memanggil fungsi Shalat()
}
If (jam==18){ //jika jam 18 maka dijalankan fungsi atau statemen
di tubuh if ini
Shalat();//memanggil fungsi Shalat()
}
If (jam==20){ //jika jam 20 maka dijalankan fungsi atau statemen
di tubuh if ini
Shalat();//memanggil fungsi Shalat()
}

Perhatikan bahwa fungsi dapat mempersingkat koding yang


panjang. Fungsi di dalam C memiliki tiga aspek yaitu definisi fungsi,
memanggil (call) serta deklarasi fungsi.
Definisi fungsi terdiri dari semua statemen yang akan dieksekusi, call
fungsi untuk memanggil fungsi sedangkan deklarasi berfungsi untuk
menginformasikan compiler tentang nama, parameter dan tipe data
dari nilai kembali. Sintaks untuk tiap aspek fungsi adalah sebagai
berikut:
Tabel 5.1. Sintaks aspek fungsi
Aspek fungsi Sintaks
Definisi fungsi nilaiKembali namaFungsi (argument list) {
tubuh fungsi;}
Call fungsi namaFungsi (argument list);
Deklarasi fungsi nilaiKembali namaFungsi (argument list);

54
Mendefinisikan dan mendeklarasi fungsi harus dilakukan sebelum
memanggilnya. Di IDE Arduino, mendefinisikan fungsi di dalamnya
juga termasuk mendeklarasikannya. Perhatikan contoh berikut:
//mendefinisikan fungsi

void NamaSaya () //deklarasi fungsi

Serial.println(“Pauzan“);//menulis kata Pauzan di serial


monitor, println menunjukkan setelah Pauzan ditulis,
penulisan berikutnya ada di baris di bawahnya

Saat kita mendefinisikan fungsi NamaSaya(), fungsi tersebut juga


dideklarasikan. Jadi dalam IDE Arduino, kita akan selalu menggunakan
istilah definisi fungsi (deklarasi fungsi ada di dalamnya).
Dari sintaks di atas, nilai kembali adalah void, nama fungsi adalah
NamaSaya, sedangkan argumennya tidak ada (kalau tidak ada, boleh
ditulis void). void menunjukkan bahwa fungsi tidak memiliki nilai
kembali, dengan kata lain fungsi NamaSaya() tidak bisa dimasukkan di
dalam suatu perhitungan matematik.
Memanggil sebuah fungsi
Untuk menggunakan fungsi yang dibuat di atas, maka fungsi tersebut
harus dipanggil. Perhatikan program berikut:
void setup() {
Serial.begin(9600); //komunikasi serial dengan komputer
NamaSaya(); //memanggil fungsi
Serial.printIn(“Teknik Komputer”);//menuliskan “Teknik
Komputer” di bawah fungsi NamaSaya()
NamaSaya();//memanggil fungsi nama saya
}

void loop() {
}

55
//mendefinisikan fungsi bernama NamaSaya()

void NamaSaya() //deklarasi fungsi


{
Serial.printIn(“Pauzan“);
}

Perhatikan hasilnya pada serial monitor di bawah ini:

Gambar 5.1. Penggunaan fungsi di IDE Arduino


Pada sketch atau program di atas, fungsi NamaSaya() didefinisikan pada
bagian paling bawah dan dipanggil dua kali pada blok fungsi setup().
Perhatikan bahwa jika fungsi dipanggil, cukup menambahkan
semikolon di akhir fungsi, seperti NamaSaya() menjadi NamaSaya();.
Memberikan nilai/argumen pada fungsi
Pada sketch di atas, argumentnya dikosongkan, kita juga bisa
membuat argumennya tertentu, misalkan kita ingin memberikan 10,
ini berarti bahwa maksimum 10 karakter/huruf yang boleh ditaruh di
dalamnya. Berikutnya kita ingin memberikan argument 5, perhatikan
sintaks berikut:
void setup() {

56
Serial.begin(9600);
hurufY(10); //menuliskan 10 huruf Y
Serial.println(“Teknik Komputer”);//menuliskan “Pauzan”
di bawahnya
hurufY(5);//memanggil lagi dan menuliskan 5 huruf Y
}

void loop() {
}

//definisikan fungsi

void hurufY(int urutan) //argument fungsi hurufY bernama urutan


bertipe data int
{
int i;
//menulis huruf Y

for (i=0; i<urutan; i++) {


Serial.print(“Y“);
}
//pindah kursor ke garis berikutnya
Serial.printIn(““);
}
Perhatikan hasil upload sketch di atas ke board Arduino Uno yang
ditampilkan pada serial monitor seperti gambar di bawah ini:

57
Gambar 5.2. Tampilan untuk fungsi dengan argument 10 dan 5
Berdasarkan gambar 5.2, argument yang bernilai 10 berfungsi untuk
mengontrol jumlah huruf Y yang ditampilkan di layar monitor, begitu
juga dengan argument bernilai 5. Jika ingin lebih banyak, cukup
mengubah argumennya. Perhatikan bahwa argument dari fungsi
hurufY()adalah int urutan. urutan adalah variabel sedangkan int
merupakan tipe data integer.
Nilai kembali dari suatu fungsi
Nilai kembali (return value) dari fungsi adalah nilai dari fungsi
setelah terjadi running di dalam fungsi tersebut. Fungsi yang memiliki
nilai kembali memiliki ciri-ciri: return digunakan pada akhir fungsi,
didefinisikan tipe data sebelum mendeklarasikan fungsi. Tipe data dari
nilai yang dikembalikan harus ditulis, seperti int, float, dll. Contoh
sketch di bawah ini menggunakan fungsi untuk melakukan
perhitungan matematika dan mengembalikan hasil kalkulasi, artinya
jika dalam fungsi ada perhitungan luas maka nilai luas hasil
perhitungan tersebut adalah nilai yang dimiliki oleh fungsi tersebut.
Sehingga fungsi dapat digunakan pada tempat lain di sketch. Bentuk
umum fungsi yang memiliki nilai kembali adalah sebagai berikut:
nilaiKembali NamaFungsi (argument) {
TipeData hasil;
//perhitungan atau operasi matamatik
return hasil; //kata kunci return adalah salah satu ciri
suatu fungsi memiliki nilai kembali
}

Mari kita coba membuat suatu fungsi untuk menghitung luas


lingkaran, sketchnya adalah sebagai berikut:

Listing 5.3. Fungsi untuk menghitung luas lingkaran

void setup() {
float luas;//variable luas bertipe data float
serial.begin(9600);
//menghitung luas lingkaran dengan radius 9.2
luas=luasLingkaran (9.2);
Serial.print (“luas Lingkaran adalah: “);

58
//menampilkan luas sampai 4 digit dibelakang koma
Serial.println(luas, 4);
}

void loop() {
}
//mendefinisikan fungsi bernama luasLingkaran
float luasLingkaran(float jariJari)
{
float hasil;//variable bernama hasil bertipe data float
hasil=3.141592654 * jariJari * jariJari;
return hasil;
}

Berdasarkan program di atas, fungsi luasLingkaran() didefinisikan di


akhir, tipe datanya float dan argumennya jariJari yang bertipe data
float. Fungsi luasLingkaran() kemudian dipanggil pada sintaks berikut:
luas = luasLingkaran (9.2);

9.2 adalah jari-jari, nilai ini dimasukkan ke fungsi luasLingkaran(),


hasil perhitungannya kemudian dicopy ke variabel bernama luas.
Perhatikan jika kita menggunakan void saat deklarasi fungsi
luasLingkaran() maka kita tidak akan pernah bisa mendapatkan nilai
dari fungsi tersebut. Oleh karena itu fungsi luasLingkaran() harus
memiliki nilai kembali, jadi fungsi tersebut didahului oleh tipe data
yang harus dikembalikan, dalam hal ini adalah float. Perhatikan
sintaksnya:
float luasLingkaran (float jariJari)

Jari-jari yang bertipe data float dimasukkan ke fungsi luasLingkaran(),


pada fungsi tersebut terdapat pehitungan matematik, salah satu
variable yang termasuk pada perhitungan tersebut adalah jari-jari.
Setelah perhitungan selesai, hasilnya diberikan ke fungsi
luasLingkaran(), pemberian nilai ini dilakukan dengan menggunakan
kata kunci return pada bagian bawah fungsi. Sintaksnya adalah sebagai
berikut:
return result;

59
Soal: buatlah program untuk menghitung luas dan ketidakpastiannya
untuk persegi panjang. Berapakah luas dan ketidakpastiannya jika hasil
pengukurannya:
a. = (5.2 ± 0.2) cm
= (2.3 ± 0.2) cm

b. = (5.21 ± 0.01) cm
= (2.31 ± 0.01) cm
Manakah yang memiliki hasil pengukuran lebih baik? Jelaskan.

Jawab

Sebelum kita membuat sintaksnya di sketch IDE Arduino, terlebih


dahulu kita menyelesaikan persamaan luas dan ralatnya. Rumus luas
adalah

= ×
Rumus ralat luas menggunakan persamaan untuk perambatan ralat:

Δ = Δ + Δ

( ) ( )
Δ = Δ + Δ

Δ = Δ + Δ

Δ = ( Δ ) +( Δ )

Jadi rumus untuk Luas adalah:

= ×
Rumus untuk ralat luasnya adalah:

60
Δ = ( Δ ) +( Δ )

Persamaan-persamaan di atas kemudian kita masukkan di sketch IDE


Arduino. Berikut adalah sintaksnya:

Sintaks.5.4. Menghitung Luas dan Ralatnya


void setup()
Serial.begin(9600);
float luas; //variable bernama luas bertipe data float
float ralat;
luas=luasPersegiP(5.3, 2.3);
Serial.print(“Luas Persegi Panjang adalah: “);
Serial.print (luas);
Serial.println(“ cm”);
ralat=ralatLuas(2.3, 0.2, 5.3, 0.2);
Serial.print(“ralat luas persegi panjang adalah: “);
Serial.print (ralat);
Serial.print(“ cm”);
Serial.println(“”);
Serial.print(“Jadi Luas dan Ralatnya adalah: “);
Serial.print(luas);
Serial.print(“ +_ “);
Serial.print(ralat);
Serial.println (“ cm”);

void loop() {} //meskipun tidak digunakan, fungsi ini tidak


boleh didelete

//definisikan fungsi luasPersegiP


float luasPersegiP(float panjang, float lebar) {
float hasil1;
hasil1=panjang * lebar;
return hasil1;
}
//definisikan fungsi ralatLuas
float ralatLuas(float lebar, float ralatPanjang, float panjang,
float ralatLebar) {
float hasil2;

61
hasil2=((lebar*ralatPanjang)*(lebar*ralatPanjang)) +
((panjang*ralatLebar)*(panjang*ralatLebar));
hasil2=sqrt(hasil2);
return hasil2;
}

Berikut adalah hasil upload sintaks di atas ke board Arduino Uno:

Gambar 5.3. Hasil perhitungan luas dan ralat persegi panjang

Perhatikan di sintaks bahwa fungsi luasPersegiP() memiliki dua


argument, panjang dan lebar yang keduanya memiliki tipe data float.
Sintaksnya sebagai berikut:
float luasPersegiP(float panjang, float lebar)

Sedangkan fungsi ralatLuas() memiliki empat argument: lebar,


ralatPanjang, panjang dan ralatLebar. Semuanya memiliki tipe data
float. Berikut sintaksnya:

float ralatLuas(float lebar, float ralatPanjang, float panjang,


float ralatLebar)

Persamaan matematik Δ dituliskan pada sintaks berikut:

62
hasil2=((lebar*ralatPanjang)*(lebar*ralatPanjang)) +
((panjang*ralatLebar)*(panjang*ralatLebar));
hasil2=sqrt(hasil2);

berikut penjabarannya:
( Δ ) =((lebar*ralatPanjang)*(lebar*ralatPanjang))

( Δ ) =((panjang*ralatLebar)*(panjang*ralatLebar))

Hasil penjumlahannya diberikan ke variable bernama hasil2, hasil2


kemudian di akar pangkat menggunakan kata kunci sqrt (square root).
Hasil akar pangkat tersebut diberikan ke hasil2 yang ada di ruas kiri.
Nilai tersebut diberikan ke fungsi ralatLuas() dengan menggunakan
kata kunci return.

Sekarang kita kerjakan soal b, sintaks programnya sama tapi yang


berbeda adalah nilai argument panjang, lebar, ralatPanjang dan
ralatLebar. Pada bagian manakah menaruh parameter-parameter
tersebut? Perhatikan sintaks untuk luasPersegiP berikut:
float luasPersegiP(float panjang, float lebar)
menjadi:
float luasPersegiP(5.3, 2.3)

Jadi 5.3 merepresentasikan panjang dan 2.3 merepresentasikan lebar.


Jadi angka-angka ini dirubah sehingga sintaksnya menjadi:

float luasPersegiP(5.31, 2.31)

Sedangkan ralatnya:
float ralatLuas(float lebar, float ralatPanjang, float panjang,
float ralatLebar)
menjadi:
ralat=ralatLuas(2.3, 0.2, 5.3, 0.2);

2.3 merepresentasikan lebar sampai dengan 0.2 merepresentasikan


ralatLebar, maka kita cukup mengganti nilai tiap argumentnya menjadi:

63
ralat=ralatLuas(2.31, 0.01, 5.31, 0.01);

Hasil perhitungannya dapat dilihat pada gambar di bawah ini:

Gambar 5.4. Hasil perhitungan luas dan ralat persegi panjang

Berdasarkan hasil untuk soal a diperoleh luas dan ralatnya sebesar:


± Δ = (11.96 ± 1.14)cm
Sedangkan sola b menghasilkan:
± Δ = (12.04 ± 0.06)cm
Jadi yang memiliki tingkat pengukuran yang lebih baik adalah
pengukuran b.

64
Soal-Soal

1. Kenapa kita perlu menggunakan fungsi pada pemrograman di IDE


Arduino?
2. Apakah yang membedakan antara Serial.print() dengan
Serial.println()? Jelaskan.
3. Perhatikan fungsi berikut:
void kelilingPersegi(int lebar){
int hasil;
hasil=4*lebar;
return hasil;
}
Dimanakah letak kesalahan fungsi kelilingPersegi() di atas?
4. Buatlah satu fungsi untuk menuliskan kata “saya adalah mahasiswa
teknik komputer" dan “saya adalah mahasiswa”. Tampilannya pada
layar monitor adalah sebagai berikut:

Saya adalah mahasiswa teknik komputer


Saya adalah mahasiswa

5. Perhatikan kedua fungsi berikut:


//fungsi pertama
int perkalianDua(int bilanganBulat){
int hasil;
hasil=2*5;
return hasil;
}
//fungsi kedua
char perkalianDua(char bilanganBulat){
char hasil;
hasil=2*5;
return hasil;
}
Manakah fungsi yang lebih baik? Jelaskan.

65
BAB VI

Array, string dan String

Array merupakan kumpulan elemen/karakter dengan tipe data sama


yang memiliki satu nama variabel, salah satu cara untuk mengetahui
array adalah dengan tanda []. Sedangkan string mirip dengan array tapi
ada sedikit perbedaan seperti jika pada array digunakan untuk angka /
bilangan, sedangkan pada string digunakan untuk text yang
merupakan karakter ASCII dengan karakter null (null termination). Lalu
bagaimana dengan String? String sebenarnya tersusun dari tipe data
string (s huruf kecil) tapi diperlakukan sebagai objek. Hal ini berarti
String dapat dikenakan fungsi padanya. Untuk lebih jelasnya, berikut
dijelaskan masing-masing.
A. Array
Array adalah grup/kumpulan untuk tipe data sama dan nama yang
sama, ditempatkan secara berurutan di memori. Ciri suatu array
ditunjukkan oleh tanda ini []. Selain itu, indeksasi array dimulai dari nol
bukan satu, jadi jika kita membuat array menggunakan lima
elemen/karakter, maka elemen pertama adalah array ke-0, elemen
kelima adalah array ke-4. Beberapa cara mendeklarasikan array dapat
dilakukan seperti sintaks di bawah ini:

int nilaiSaya[4];
int pinSaya[]=[5, 4, 9, 1];
int nilaiBulat[6]=[2, 5, 1, 4, 9, 8];
char pesan[6]=”hello”;

Perhatikan bahwa saat kita mendeklarasikan array, kita tidak


perlu mendefinisikannya terlebih dahulu. Dari beberapa cara di atas,
kita dapat mendeklarasi (membuat) array tanpa menuliskan
besar/ukurannya seperti pada pinSaya[] di atas. Bisa juga membuat
array dengan menuliskan ukurannya seperti pada nilaiBulat[] dengan
size 6. Saat mendeklarasikan array bertipe data char, diperlukan satu
elemen lain dari ukuran (banyaknya elemen) yang kita buat. Elemen
tersebut adalah karakter null. Sebagai contoh kita membuat enam

66
elemen array, sebenarnya kita menggunakan satu elemen untuk
karakter null sehingga elemen yang tersedia hanya lima. Seperti pada
array pesan[6] di atas, maksimum elemen yang diperbolehkan adalah
lima (hello terdiri dari lima elemen/karakter). Perhatikan contoh
berikut:

Listing 6.1. Contoh penggunaan array


void setup() {
int arraySaya[5]; //array dengan 5 elemen bertipe integer
int i; //variable i digunakan sebagai indeks di dalam array
Serial.begin(9600);
arraySaya[0]=23; //memberikan nilai 23 ke array elemen ke-0
arraySaya[1]=1001;
arraySaya[2]=9;
arraySaya[3]=1234;
arraySaya[4]=987; //memberikan nilai 987 pada array elemen ke-4
//menampilkan elemen tiap array menggunakan loop for
for (i=0; i<5; i++){
Serial.println(arraySaya[i]);
}
}
void loop() {}

Perhatikan hasil dari program di atas pada gambar di bawah ini:

Gambar 6.1. Tampilan elemen-elemen array

67
Perhatikan bahwa data di atas tersusun dan memiliki tipe data yang
sama, inilah yang disebut sebagai array. Cara di atas masih bisa
diringkas dengan menggunakan program berikut.

Listing 6.2. Penggunaan array yang lebih ringkas


void setup() {
int arraySaya[5]=[23, 1001, 9, 1234, 987]; //array dengan 5
elemen integer
int i; //variable i digunakan sebagai indeks di dalam array
Serial.begin(9600);
//menampilkan elemen tiap array menggunakan loop for
for (i=0; i<5; i++){
Serial.println(arraySaya[i]);
}
}
void loop() {
}

Selain dapat dikombinasikan dengan loop for, kita juga bisa


mengambil nilai/data dari array. Berikut adalah salah satu contohnya
dimana nilai array pada elemen ke-3 diberikan ke x:

x=arraySaya[3];

Berikut adalah listing untuk memberikan nilai dari variabel bernama


arraySaya pada elemen ke-3nya ke x.

Listing 6.3. Mengambil nilai dari array


void setup() {
// put your setup code here, to run once:
int arraySaya[5];
int i;
int x;
Serial.begin(9600);
arraySaya[0]=23;
arraySaya[1]=1001;
arraySaya[2]=9;
arraySaya[3]=1234;
arraySaya[4]=987;

68
for (i=0; i<5; i++){
Serial.println(arraySaya[i]);

}
Serial.println(" ");//mengosongkan baris berikutnya
x=arraySaya[3];
Serial.print("nilai x: ");
Serial.println(x);
}

void loop() {
// put your main code here, to run repeatedly:
}

Hasil upload ke board Arduino dapat dilihat pada gambar di bawah ini:

Gambar 6.2. Mengambil nilai dari array

B. string
Pada kasus di atas, kita berhasil membuat array dari
bilangan/angka, pertanyaannya sekarang adalah bagaimana caranya
jika kita ingin membuat array dari text/huruf? Jika ingin membuat array
dari text maka cukup ditambahkan tipe data char (biasanya char)
sebelum nama variabelnya. Sebenarnya variabel yang memiliki array
dan tersusun dari text bertipe data char disebut juga sebagai string (s
huruf kecil). Mari kita bahas lebih detail terkait string. Perhatikan
contoh di bawah ini.

69
Listing 6.4. Contoh string (array bertipe data char)
void setup(){
char stringSaya[6]; //deklarasi string dengan 5 elemen
Serial.begin(9600);
stringSaya[0]=’H’; //elemen pertama bernilai H
stringSaya[1]=’a’;
stringSaya[2]=’l’;
stringSaya[3]=’l’;
stringSaya[4]=’o’; //elemen ke-5 dengan nilai o
stringSaya[5]=0; //karakter null pada elemen ke-6

Serial.println(stringSaya);
}

void loop() {
}

Berikut adalah tampilannya pada layar monitor:

Gambar 6.3. string (array bertipe data char)

Sintaks di atas bisa juga dituliskan seperti pada listing di bawah ini:

70
Listing 6.5. string yang lebih ringkas
void setup(){
char stringSaya[]=”Hallo”;
Serial.begin(9600);
Serial.println(stringSaya);
}
void loop() {
}

Selanjutnya kita akan membuat program untuk menampilkan


cara memodifikasi string. Mari kita coba dengan contoh berikut:

Listing 6.6. Program menghapus elemen/karakter string


void setup(){
char suka[]=(”saya suka kopi dan teh”);
Serial.begin(9600);
//tampilkan string ke layar monitor
Serial.println(“kondisi mula-mula: “);
Serial.println(suka);
Serial.println(“ “);//mengosongkan baris berikutnya
//menghapus elemen ke-13 dari string
suka[13]=0;//artinya elemen setelahnya juga dihapus
Serial.println(“Setelah elemen ke-14 dihapus: “);
Serial.println(suka);
}
void loop() {

Dari string di atas, berikut dijabarkan elemen string dari yang pertama
sampai dengan yang terakhir:

string s a y a s U k A K O p i d a n t e H
Elemen 1 1 1 1 1 1 1 1 1 1 2 2
0 1 2 3 4 5 6 7 8 9
ke- 0 1 2 3 4 5 6 7 8 9 0 1

Koding yang ditulis suka[13]=0; menunjukkan bahwa elemen ke-13


yaitu tepatnya pada huruf i dihapus. Caranya diberikan nilai nol. Yang

71
menarik adalah elemen setelahnya juga secara otomatis terhapus.
Perhatikan tampilannya pada layar monitor berikut:

Gambar 6.4. Menghapus elemen pada string

Berikutnya, kita bisa memodifikasi text pada string. Pada kasus ini kita
akan mengganti kata kue menjadi teh. Berikut ini adalah listing
programnya:

Listing 6.7. Mengganti text pada string


void setup(){
char suka[]=(”saya suka kopi dan teh”);
Serial.begin(9600);
//tampilkan string ke layar monitor
Serial.println(“kondisi mula-mula: “);
Serial.println(suka);
Serial.println(“ “);//mengosongkan baris berikutnya
//subtitusi kata “teh” menjadi “kue”.
suka[18]=’ ‘;
suka[19]=’k’;
suka[20]=’u’;
suka[21]=’e’;
suka[22]=0;//karakter null
Serial.println(“Setelah mengganti elemen ke-18 s/d ke-21: “);
Serial.println(suka);

72
}
void loop() {

Hasilnya adalah sebagai berikut:

Gambar 6.5. Mengganti text pada string

Cara-cara memodifikasi string di atas dilakukan secara manual. Jika


ingin dengan cara yang praktis, harus dikenakan String pada string
sehingga string dapat dilihat sebagai objek, dengan demikian kita bisa
mengenakan fungsi padanya.

C. String
Pada IDE Arduino, String dilihat sebagai objek. Apa itu objek?
Objek adalah suatu konstruksi yang mengandung data dan fungsi.
Bagaimana cara mendeklarasikannya? Sama dengan membuat variabel
kemudian variabel tersebut diberikan nilai, tapi pada kasus ini tidak
diberikan nilai melainkan String. Untuk lebih jelasnya perhatikan
sintaks di bawah:
String nama=”text yang dijadikan String”

Seperti yang sudah disampaikan di atas, bahwa pada String dapat


dikenakan fungsi kepadanya. Fungsi-fungsi tersebut ada banyak seperti
merubah huruf menjadi kapital, digunakan fungsi toUpperCase(), atau

73
sebaliknya yaitu menggunakan fungsi toLowerCase(), ada masih
banyak lagi yang lainnya. Berikut dituliskan cara mengubah String
menggunakan fungsi:
namaVariabel.fungsi();

Adapun beberapa fungsi yang bisa digunakan pada string adalah


sebagai berikut:

toUpperCase()=fungsi ini berfungsi untuk merubah string menjadi


kapital

toLowerCase()=berfungsi untuk merubah string menjadi huruf kecil

charAt() =untuk mengakses sebuah karakter pada suatu inedks


spesifik

compareTo() =membandingkan dua String

concat() =menambhakan satu String ke String yang lain

endsWith() =mendapatkan karakter terakhir di dalam string

equals() =membandingkan dua String

equalsIgnoreCase()=membandingkan dua String tapi mengabaikan


perbedaan argumennya

getBytes() =mencopy String ke array byte

indexOf() =mendapatkan indeks dari suatu karakter spesifik

lastIndexOf() =mendapatkan indeks dari kejadian terakhir pada


karakter spesifik

length() =banyaknya karakter di dalam string, kecuali karakter


null

replace() =mengganti satu karakter yang diberikan dengan


karakter lain

setCharAt() =merubah karakter pada indeks spesifik

74
startsWith() =satu string mulai dengan karakter spesifik yang
berurutan

substring() =mencari substring di dalam String

toCharArray() =merubah dari String ke array karakter

trim() =menghapus semua karakter spasi dari String

Supaya lebih memahami cara menggunakan fungsi-fungsi di atas,


perhatikan contoh berikut:

Listing 6.8. Contoh objek string (String)


void setup() {
// put your setup code here, to run once:
String stringKu="Ini adalah string pertamaku";
Serial.begin(9600);
Serial.println("kondisi mula-mula:");
Serial.println(stringKu);
Serial.println(" ");
Serial.println("String diubah ke huruf kapital:");
stringKu.toUpperCase();
Serial.println(stringKu);
}

void loop() {
// put your main code here, to run repeatedly:
}

Hasil pada monitor dapat dilihat pada gambar di bawah ini:

75
Gambar 6.6. Memberikan fungsi toUpperCase() pada String

Perhatikan pada koding berikut:


String stringKu="Ini adalah string pertamaku";

Jadi sebenarnya koding di atas pada mulanya adalah string, cirinya


adalah arraynya berupa text. Namun tipe data char dihilangkan dan
diganti dengan String serta tanpa ada tanda [] setelah nama
variabelnya. Selain itu String tidak menggunakan tanda () untuk
menuliskan text. Hasilnya dapat dilihat pada gambar 6.6 di atas. Fungsi
yang mengubah String di atas terletak pada sintaks berikut:
stringKu.toUpperCase();

Berikutnya kita bisa mengganti String dengan yang baru, berikut


adalah programnya.

Listing 6.9. Mengganti String


void setup() {
// put your setup code here, to run once:
String stringKu="Ini adalah string pertamaku";
Serial.begin(9600);
Serial.println("kondisi mula-mula:");
Serial.println(stringKu);
Serial.println(" ");

76
Serial.println("String diganti:");
stringKu="ini adalah yang baru";
Serial.println(stringKu);
}

void loop() {
// put your main code here, to run repeatedly:
}
Berikut adalah hasilnya pada serial monitor:

Gambar 6.7. Mengganti String

Kita juga bisa mengganti kata yang ada di dalam String, fungsi
yang digunakan adalah replace(). Berikut adalah program untuk
mengubah kata string menjadi Arduino sketch:

Listing 6.10. Mengganti satu kata di dalam String


void setup() {
// put your setup code here, to run once:
String stringKu="Ini adalah string pertamaku";
Serial.begin(9600);
Serial.println("kondisi mula-mula:");
Serial.println(stringKu);
Serial.println(" ");
Serial.print("Setelah kata string diganti:");
stringKu.replace("string", "Arduino sketch");

77
Serial.println)stringKu);
}

void loop() {
// put your main code here, to run repeatedly:
}

Hasilnya pada monitor adalah sebagai berikut:

Gambar 6.8. Mengganti satu kata pada String

Menggunakan fungsi replace() memiliki ketentuan sebagai berikut:


kata yang ingin diganti ditulis terlebih dahulu kemudian diberikan
tanda koma, setalah tanda koma maka diisikan kata baru yang
menggantikannya. Berikut sintaksnya:

namaString.replace(“kataLama”, “kataBaru”);

Pada program di atas, koding yang berfungsi merubah kata string


menjadi Arduino sketch adalah sebagai berikut:

stringKu.replace("string", "Arduino sketch");

78
Selanjutnya kita juga dapat mengetahui lebar dari suatu String, caranya
yaitu menggunakan fungsi length(). Kita akan mencoba mencari tahu
lebar String yang sudah kita kerjakan, berikut adalah listingnya:

Listing 6.11. Fungsi untuk menghitung lebar String


void setup() {
// put your setup code here, to run once:
String stringKu="Ini adalah string pertamaku";
Serial.begin(9600);
Serial.println("kondisi mula-mula:");
Serial.println(stringKu);
Serial.println(" ");
Serial.print("lebar string adalah:");
Serial.println(stringKu.length());
}

void loop() {
// put your main code here, to run repeatedly:
}

Hasil upload pada board Arduino yang ditampilkan di monitor adalah


sebagai berikut:

Gambar 6.9. Menghitung lebar String

79
Kita sudah membuat karakter/elemen string dan String,
pertanyaannya adalah apa kelebihan masing-masing? Objek string
(String) jauh lebih mudah dimodifikasi, cukup memberikannya fungsi.
Sedangkan untuk merubah elemen string dilakukan dengan manual.
Tapi objek String menggunakan memori yang besar sehingga sewaktu-
waktu Arduino yang digunakan bisa saja mengalami crash.

String (objek string) dapat diaplikasikan pada berbagai hal, salah


satunya yaitu Arduino dapat digunakan untuk membaca input berupa
string. Berikut adalah listing programnya.

Listing 6.12. Membaca String


void setup(){
Serial.begin(9600);
Serial.println (“Tuliskan Nama Anda: “);
}
char terimaByte=0; //data byte awal yang diterima adalah nol
String terimaString=” ”; //string awal yg diterima tidak ada
void loop() {
if (Serial.available()>0){
terimaByte=Serial.read(); //mendapatkan
if (terimaByte !=’\n’) { //menerima karakter string
terimaString+=terimaByte;
}
else{
//akhir string
Serial.print (“Selamat Datang”);
Serial.println (terimaString);
terimaString=” “;
Serial.println(“ ”);
Serial.println (“Tuliskan Nama Anda”);
}
}
}

Program di atas kemudian diupload ke board Arduino, tampilan di


monitor di adalah sebagai berikut:

80
Gambar 6.10. Membaca String

Perhatikan bahwa Arduino dapat membaca string yang


dimasukkan melalui serial monitor, jika sudah memasukkan nama user
pertama maka alat akan meminta masukkan nama lagi. Penjelasan
programnya sebagai berikut:
if (Serial.available()>0){
terimaByte=Serial.read(); //mendapatkan
if (terimaByte !=’\n’) { //menerima karakter string
terimaString+=terimaByte;
}

Dari koding di atas, digunakan statemen if untuk mengecek kondisi


apakah data sudah dimasukkan/diketikkan nama atau tidak, jika sudah
menuliskan nama maka data di serial monitor >0, sehingga jika hal ini
terpenuhi maka statemen di dalam tubuh if dijalankan. Setelah
memasukkan nama, besarnya nilai nama tersebut diberikan ke variabel
bernama terimaByte, hal ini tertulis pada koding
terimaByte=Serial.read();. Setelah terimaByte memperoleh nilai
berupa byte selanjutnya dilakukan pengecekan melalaui statemen if,
statemen ini kira-kira artinya begini: jika nilai terimaByte tidak sama
(ditandai oleh operator !=) dengan newline (tanda ‘\n’) maka nilai dari
terimaString sama dengan nilai terimaString + terimaByte, kodingnya

81
adalah terimaString+=terimaByte;. Setelah mengisi nama dan
mengklik send pada serial monitor, nilai newline pada serial monitor
adalah kosong, sedangkan terimaByte tidak kosong (ada). Maka
sekarang nilai terimaString ada (berupa nama yang diketikkan). Karena
newline tidak ada nilainya maka statemen if yang pertama (setelah void
loop()) berstatus false, maka dijalankan statemen di dalam else, data
string yang diterima melalui statemen if kemudian ditampilkan pada
monitor dengan program berikut: Serial.println (terimaString);.

Selain dapat membaca string, Arduino juga bisa membaca dan


mengalikan angka. Berikut adalah program untuk mendapatkan angka.

Listing 6.13. Membaca dan mengalikan angka


void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Masukkan suatu angka untuk dikalikan dengan 2");
}
char terimaByte=0;
String terimaString=" ";
boolean bukanAngka;
void loop() {
// put your main code here, to run repeatedly:
if (Serial.available()>0){
terimaByte=Serial.read();
if ((terimaByte>='0')&&(terimaByte<='9')){
terimaString+=terimaByte;
}
else if (terimaByte=='\n'){
if(bukanAngka){
Serial.println("Bukan suatu angka");
}
else{
int hasil;
hasil=terimaString.toInt()*2;
Serial.print(terimaString);
Serial.print(" x 2 = ");
Serial.print(hasil);

82
Serial.println(" ");
Serial.println("Masukkan suatu angka untuk dikalikan dengan
2");
}
bukanAngka=false;
terimaString=" ";
}
else{
bukanAngka=true;
}
}
}
}

Program di atas kemudian diupload ke board Arduino, hasilnya


ditunjukkan pada gambar di bawah ini:

Gambar 6.11. Mendapatkan dan mengalikan angka

Pada program ini, terdapat kemiripan dengan sebelumnya tapi


perbedaanya adalah kasus ini menggunakan angka dan
mengoperasikannya menggunakan fungsi toInt(). Angka yang harus
dimasukkan harus satu digit dimulai dari 0 sampai dengan 9,
kodingnya adalah sebagai berikut:

83
if ((terimaByte>='0')&&(terimaByte<='9')){
terimaString+=terimaByte;
}

Jika kita memasukkan data selain 0 sampai 9 maka dijalankan program


berikut:

else if (terimaByte=='\n'){
if(bukanAngka){
Serial.println("Bukan suatu angka");
}

bukanAngka merupakan variabel yang dideklarasikan pada bagian atas


sketch Arduino, tipe data yang digunakan adalah boolean. Artinya
bukanAngka hanya memiliki dua kemungkinan, true atau false. Jika kita
mengetikkan angka selain 0-9 maka akan berstatus false sehingga data
terimaString dikosongkan, namun jika dimasukkan angka 0-9
bukanAngka berstatus true, kodingnya dituliskan di bawah ini:
bukanAngka=false;
terimaString=" ";
}
else{
bukanAngka=true;
}
Jika sudah memasukkan suatu angak antara 0-9, maka diperoleh nilai
terimaString. Selanjutnya statemen if setelah fungsi void loop() akan
bernilai false, maka dijalankan statemen else seperti pada koding di
bawah ini:
else{
int hasil;
hasil=terimaString.toInt()*2;
Serial.print(terimaString);

Perhatikan bahwa string yang diterima melalui serial monitor bertipe


data String meskipun yang dimasukkan adalah suatu angka. Supaya

84
dapat dioperasi matematik, perlu dikenakan fungsi kepadanya. Fungsi
yang digunakan adalah fungsi toInt() seperti koding di atas. Fungsi ini
berguna untuk mengubah tipe data string menjadi integer. Dengan
demikian kita sekarang dapat mengalikannya dengan dua.

85
Soal-Soal

1. Apakah yang dimaksud dengan:


a. Array
b. string
c. String

Jelaskan perbedaan antara ketiganya.

2. Saat kita mendeklarasikan suatu array text yang bertipe data char,
banyaknya karakter/elemen yang didekalrasikan selalu lebih banyak
satu daripada yang diperbolehkan? jelaskan.
3. Buatlah program untuk bilangan berdigit 2 (mulai dari 10 sampai
dengan 99) yang dibagi 5. Bilangan diinput melalui serial monitor
dan hasilnya langsung dapat dilihat pada layar monitor.
4. Ludiana memiliki data suhu dalam 1 jam terakhir dari alat yang dia
buat, berikut adalah datanya:

Menit ke- Suhu (°C)


1 26
5 30
10 29
15 28
20 29
25 31
30 27
35 27
40 30
45 30
50 29
55 26
60 27

Buatlah program untuk menampilkan data suhu tiap 5 menit pada


monitor PC/laptop, serta tunjukkan pada monitor hasil konversi
data suhu dalam Celcius ke Fahrenheit khusus untuk menit ke 45.

86
5. Huruf a sampai dengan z merupakan karakter ASCII. Misalkan huruf
a bernilai 97, b bernilai 98 dan begitu seterusnya. Buatlah program
dimana jika kita mengetikkan huruf a pada layar monitor, program
tersebut dapat mengkonversinya menjadi 97, jika mengetikkan b
maka yang tampil di monitor adalah 98 begitu seterusnya sampai
dengan z.

87
BAB VII

Interrupt dan Pointer

A. Interrupt
Pernahkah kita berfikir tentang mekanisme keluarnya air bag di
mobil jika mobil bertabrakan? Saat mobil menabrak atau berbenturan
dengan suatu objek, sensor akselerometer mendeteksi adanya
perlambatan secara tiba-tiba (diakibatkan oleh berbenturannya mobil
dengan objek lain), sensor ini mentriger interrupt eksternal ke
mikrokontroler yang ada di mobil. Kemudian mikrokontroler
menghasilkan sinyal listrik untuk langsung membuka air bag. Jadi
apakah yang menyebabkan air bag membuka vegitu cepatnya?
Jawabannya adalah sinyal interrupt yang membuat mikrokontroler
memprioritaskan sinyal ini di antara task mikrokontroler yang lain.
Atau misalkan kita membuat alat pengukur suhu berbasis Arduino,
pengukuran suhu dilakukan secara terus menerus tiap detiknya oleh
mikrokontroler yang ada di dalam Arduino. kita bisa menggunakan
interrupt eksternal sehingga jika dipencet push button yang
dihubungkan dengan pin interrupt di Arduino maka yang dilakukan
adalah memprioritaskan sinyal ini daripada pengukuran suhu, tapi
setelah selesai Arduino akan langsung melanjutkan pengukuran
suhunya. Perlu diketahui bahwa pada interrupt fungsi delay tidak
berfungsi. Jadi interrupt merupakan mekanisme dimana sebuah
instruksi menyebabkan diberhentikannya eksekusi normal di dalam
prosesor dan menyebabkan dirinya (sinyal dari interrupt)
diprioritaskan paling utama. Terdapat dua jenis interrupt: interrupt
hardware dan interrupt software.

Interrupt hardware: terjadi ketika aksi eksternal terjadi seperti pin


interrupt eksternal merubah statenya dari LOW ke HIGH atau dari HIGH
ke LOW.

Interrupt software: terjadi mengacu kepada instruksi dari software.


Sebagai contoh interrupt timer merupakan interrupt software.

Interrupt dalam Arduino

88
Pada board Arduino terdapat dua jenis interrupt: interrupt eksternal
dan interrupt perubahan pin.

Interrupt eksternal

Interrupt jenis ini menggunakan interrupt hardware dan terjadi


sangat cepat. Interrupt ini dapat diset untuk mentrigger untuk level
RISING atau FALLING atau LOW. Board Arduino memiliki pin interrupt
eksternal yang terbatas, seperti yang ditunjukkan pada table di bawah
ini:

Tabel 7.1. Pin interrupt eksternal pada Board Arduino


Board Arduino Pin interrupt eksternal
UNO, NANO 2,3
Mega 2,3,18,19,20,21

Interrupt perubahan pin

Pin-pin interrupt pada Arduino bisa lebih banyak lagi, hal ini bisa
dilakukan dengan menggunakan interrupt perubahan pin. Pada
ATmega168/328 yang ada di board Arduino semua pinnya yang
berjumlah 20 dapat dijadikan pin interrupt.

Menggunakan interrupt di Arduino

Sebelum menggunakan interrupt di Arduino, perlu dipahami beberapa


konsep berikut:

Interrupt Service Routine (ISR)

ISR disebut juga sebagai penghandle interrupt dan memiliki instruksi


khusus. Ketika kejadian ekternal, prosesor pertama kali mengeksekusi
kode di bawah ini yang ada di dalam ISR dan kemudian kembali lagi ke
mode normal. Sintaks ISR adalah sebagai berikut:
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)

penjelasan masing-masing adalah sebagai berikut:

digitalPinToInterrupt(pin): di dalam Arduino UNO dan NANO, pin


yang dijadikan interrupt adalah pin 2 dan 3.

89
ISR: merupakan fungsi yang dipanggil ketika interrupt eksternal
selesai

mode: mode transisi untuk mentrigger ke FALLING, RISING ataupun ke


LOW. Penjelasan masing-masing untuk tiap keadaan adalah sebagai
berikut:

RISING : untuk mentrigger interrupt saat pin berubah keadaan


dari LOW ke HIGH

LOW : untuk mentrigger interrupt kapanpun pinnya berubah


menjadi LOW

FALLING : untuk mentrigger interrupt saat pin berubah dari


keadaan HIGH ke LOW

CHANGE : untuk mentrigger interrupt saat pin berubah dari


keadaan LOW ke HIGH atau dari HIGH ke LOW. Artinya
setiap perubahan keadaan pin, interrupt akan terpicu
tidak perduli keadaan dari LOW ke HIGH atau dari HIGH
ke LOW.

Jika Arduino bekerja pada mode normalnya, kode programnya


dieksekusi baris per baris. Misalkan interrupt dieksekusi pada baris2
maka fungsi melompat ke ISR dan mulai eksekusi baris yang ada di
dalam ISR kemudian melompat lagi ke baris3 dan menyelesaikan
eksekusi/tasknya. Jika program ini berada di dalam loop maka eksekusi
kembali lagi ke baris1, ilustrasinya dapat dilihat pada gambar di bawah
ini:

Gambar 7.1. Alur eksekusi interrupt

90
Perlu dipahami bahwa fungsi delay() di dalam interrupt tidak berlaku
dan untuk melewatkan data antara ISR dengan program utamanya,
variabel dideklarasikan sebagai volatile. Supaya lebih jelas, perhatikan
contoh berikut:

Penggunaan pin interrupt eksternal D2

Kita akan membuat program menampilkan bilangan bulat dari 0 sampai


dengan 9 pada layar monitor. Kemudian menggunakan pin 2 pada
board Arduino Uno sebagai pin interrupt eksternalnya. Jika pin 2
dipencet (menggunakan push button) maka interrupt dijalankan.
Program ini dibuat untuk menguji alur pada gambar 7.1 di atas.
Pertama kita menentukan header dari program yang dibuat, membuat
variabel bernama keadaan yang diset pada kondisi awal LOW.
Kemudian mendefinisikan variable i bertipe data int dan pin 13 sebagai
LedPin, berikut sintaksnya:
volatile int keadaan=LOW;

int i;

cons tint LedPin=13;

Selanjutnya mengisi fungsi void setup() dengan memulai komunikasi


dengan monitor, sintaksnya sebagai berikut:
Serial.begin(9600);

Kemudian, dideklarasikan fungsi untuk interrupt eksternalnya pada pin


2 dengan mode RISING (dari kondisi LOW ke HIGH). Berikut sintaksnya:
attachInterrupt(digitalPinToInterrupt(2),tombolInterrupt,RISIN
G);

Pada fungsi void loop(), diisi oleh looping for untuk menampilkan
angka dari 0 sampai dengan 9. Berikut adalah sintaksnya:
for(i=0;Serial.print(“baris: “), Serial.println(i+1),i<10;i++){

Serial.print(“nilai i: “);

Serial.println(i);

91
Selanjutnya memasukkan interruptnya, Led pada pin 13 Arduino Uno
akan menyala jika interrupt terjadi:
digitalWrite(LedPin, keadaan);

Berikutnya mendeklarasikan fungsi ISRnya:


void tombolInterrupt() {

keadaan=HIGH;

Serial.println(“Interrupt”);

Berikut adalah kode lengkapnya:


volatile int keadaan=LOW;
int i;
cons tint LedPin=13;
void setup(){
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2),tombolInterrupt,RISIN
G);
}
void loop(){
for(i=0;Serial.print(“baris: “), Serial.println(i+1),i<10;i++){
Serial.print(“nilai i: “);
Serial.println(i);
digitalWrite(LedPin, keadaan);
}
}
void tombolInterrupt() {
keadaan=HIGH;
Serial.println(“Interrupt”);
}
Rangkaian peralatannya dapat dilihat pada gambar di bawah ini:

92
Gambar 7.2. Rangkaian Arduino Uno untuk interrupt

B. Pointer
Pointer merupakan variabel yang special, jika pada variabel biasa
data disimpan pada lokasi tertentu di memori tapi pointer tidak hanya
menyimpan data dengan lokasi penyimpanannya tapi juga dapat
memegang alamat pada memori pointer tersebut disimpan. Artinya
kita dapat mengakses variabel tersebut, cara mengaksesnya yaitu
menggunakan operator ampersand &. Sebagai contoh jika suatu
variabel bernama x, alamat variabel tersebut diperoleh dengan
menuliskan &x. Untuk lebih jelasnya perhatikan contoh berikut:

int nomer=4;
int *a;
int hasil=0;
a=&nomer;
hasil=*a;

93
pertama kita mendeklarasi variabel bernama nomer bertipe data
integer, nilainya 4.
Kemudian kita mendeklarasikan pointer bertipe data integer, namanya
adalah a. Perhatikan tanda * sebelum nama pointernya, tanda ini wajib
ditempatkan sebelum nama pointer karena secara langsung kita
membuat pointer.
Pada baris ke-3 kita mendeklarasikan variabel bernama hasil dengan
tipe integer, nilainya adalah 0.
Pada baris ke-4, kita menuliskan operator ampersand (&) sebelum
variabel nomer. Kemudian nilai ini diberikan ke pointer a. Artinya nilai
pointer a adalah alamat memori dari variabel nomer.
Pada baris ke-5, tanda asterik * ditempatkan sebelum pointer a, artinya
kita mengambil nilai yang ada pada alamat memori pada variabel
nomer. Maka nilai variabel hasil sekarang adalah sama dengan nilai
variabel nomer yaitu sebesar 4.

Perhatikan ilustrasi di bawah ini:

Gambar 7.3. Pointer dan variabel yang dituju

Penjelasan gambar di atas adalah sebagai berikut:

ƒ Nilai nomer adalah 4


ƒ Nilai &nomer adalah 0x8ce7b8c
ƒ Nilai a adalah 0x8ce7b8c
ƒ Nilai *a adalah 4
ƒ Nilai &a adalah 0x8ce7b80

Kita sudah mencoba membuat pointer, lalu apa saja kegunaannya?


Berikut dijelaskan aplikasi pointer:

94
1. Pointer digunakan untuk melewatkan data menggunakan
referensi, karena tidak diperlukan mencopy data. Data
didapatkan cukup hanya dengan menuliskan nama variabel
2. Pointer biasanya digunakan untuk alokasi memori yang
dinamis, sebagai contoh diaplikasikan untuk array dengan
ukuran tak terbatas
3. Pointer sangat berguna untuk mengkonversi tipe data yang
berbeda menjadi byte.

Kita coba mengkonversi tipe data float menjadi byte menggunakan


pointer.
float angka= 3.1456

byte* pointerAngka=(byte*)(&angka); //mendapatkan alamat dari


variabel angka

byte byteEeprom1=*pointerAngka; //membaca byte

byte byteEeprom2=*(pointerAngka+1);

byte byteEeprom3=*(pointerAngka+2);

byte byteEeprom4=*(pointerAngka+3);

selanjutnya menulis data byte ke EEPROM:

EEPROM.write(0, *pointerAngka);

EEPROM.write(1, *(pointerAngka+1));

EEPROM.write(2, *(pointerAngka+2));

EEPROM.write(3, *(pointerAngka+3));

95
Soal

1. Buatlah rangkaian interrupt eksternal pada pin 2 dan 3 di board


Arduino Uno. Task normal pada Arduino adalah perkalian 2 mulai
dikali dari 0 sampai dengan 50, jika sudah mencapai perkalian
dengan 50 maka kembali lagi ke perkalian dengan 0. Displaynya di
LCD 16x2, perkalian tersebut ditempatkan pada baris pertama. Jika
menekan interrupt pertama (pin 2) maka akan menyala LED merah
dan akan muncul text “interrupt1” pada baris ke-2 di layar LCD,
begitu juga dengan interrupt kedua (pin 3) maka LED biru menyala
dan muncul text “interrupt2” pada baris kedua LCD.

96
PROYEK

1. Buatlah koding untuk menyalakan 5 buah LED, ketentuannya adalah


sebagai berikut:
- LED1 pada pin 3
- LED2 pada pin 4
- LED3 pada pin 5
- LED4 pada pin 6
- LED5 pada pin 7

Terdapat 5 kombinasi nyala pada ke-lima LED tersebut:

¾ Kondisi pertama: LED1, LED3 dan LED5 menyala bersamaan


selama 3 detik
¾ Kondisi kedua: LED2 dan LED4 menyala bersamaan selama 3 detik
¾ Kondisi ketiga: nyala LED berjalan dari LED1 ke LED5, gunakan
delay 300 milisekon untuk tiap LED
¾ Kondisi keempat: nyala LED berjalan dari LED5 ke LED1, gunakan
delay 300 milisekon untuk tiap nyala LED
¾ Kondisi kelima: LED1, LED3 dan LED5 nyala bersamaan selama
500 milisekon, lalu LED2 dan LED4 nyala bersamaan selama 500
milisekon. Pergantian nyala kedua kelompok LED ini terjadi
sebanyak 4 kali siklus.

Kelima kondisi di atas terus menerus dilakukan, mulai dari kondisi


pertama sampai dengan kelima. Jika sudah mencapai kondisi kelima
maka program akan kembali lagi ke kondisi pertama.

Catatan: HARUS menggunakan fungsi untuk kelima kondisi di atas.

97
JAWAB

const int LED1=3;


const int LED2=4;
const int LED3=5;
const int LED4=6;
const int LED5=7;

void setup() {
// put your setup code here, to run once:
pinMode (LED1,LOW);
pinMode (LED2,LOW);
pinMode (LED3,LOW);
pinMode (LED4,LOW);
pinMode (LED5,LOW);
delay (2000);

void loop() {
//1. Kondisi pertama: LED1, LED3, LED5 menyala bersama selama
3 detik
kondisi_pertama();

//2. Kondisi kedua: LED2, LED4 menyala bersama selama 3 detik


kondisi_kedua();

//3. Kondisi ketiga: LED Berjalan dari LED1 ke LED5 delay 3000
kondisi_ketiga_berjalan_kekanan();

//4. Kondisi keempat: LED Berjalan dari LED5 ke LED1 delay


3000
kondisi_ketiga_berjalan_kekiri();

98
//5. Kondisi kelima: LED1,3,5 menyala bersama 500 milisekon,
dan Led2,4 menyala bersama selama 500 ms. bergantian 4x siklus
kondisi_kelima_flipflop();

//FUNGSI 1. Kondisi pertama: LED1, LED3, LED5 menyala bersama


selama 3 detik
int kondisi_pertama(){

digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);

delay (3000); // 3 Detik

//fungsi 2. Kondisi kedua: LED2, LED4 menyala bersama selama 3


detik
int kondisi_kedua(){
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay (3000); // 3 Detik
}

//Fungsi 3. Kondisi ketiga: LED Berjalan dari LED1 ke LED5 delay


300ms tiap led
int kondisi_ketiga_berjalan_kekanan(){
digitalWrite(LED1, HIGH);
delay (300);
digitalWrite(LED2, HIGH);
delay (300);
digitalWrite(LED3, HIGH);
delay (300);
digitalWrite(LED4, HIGH);
delay (300);
digitalWrite(LED5, HIGH);
delay (300);

99
}

//Fungsi 4. Kondisi keempat: LED Berjalan dari LED5 ke LED1


delay 3000
int kondisi_ketiga_berjalan_kekiri(){
digitalWrite(LED5, HIGH);
delay (300);
digitalWrite(LED4, HIGH);
delay (300);
digitalWrite(LED3, HIGH);
delay (300);
digitalWrite(LED2, HIGH);
delay (300);
digitalWrite(LED1, HIGH);
delay (300);

//Fungsi 5. Kondisi kelima: LED1,3,5 menyala bersama 500


milisekon, dan Led2,4 menyala bersama selama 500 ms. bergantian
4x siklus
int kondisi_kelima_flipflop(){
//ganjil
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay (500);
//genap
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay (500);

//ganjil
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay (500);

100
//genap
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay (500);

//ganjil
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay (500);
//genap
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay (500);

//ganjil
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay (500);
//genap
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay (500);

101
DAFTAR PUSTAKA

[1]. Purdum, Jack. 2015. Beginning C for Arduino, Second Edition.


Technology In Action. Cincinnati: USA.
[2]. Wikipedia. “ASCII character”. https://en.wikipedia.org/wiki/ASCII.
Diakses pada 7 Januari 2020.
[3]. Arduino.cc. “Array in Arduino”.
https://www.arduino.cc/reference/tr/language/variables/data-
types/array/.
Diakses pada 2 Januari 2020
[4]. Circuitdigest. “Arduino Interrupt”.
https://circuitdigest.com/microcontroller-projects/arduino-interrupt-
tutorial-with-examples
Diakses 7 Januari 2020
[5]. Dsdsds. “Eksternal Interrupt Arduino.
https://www.arduino.cc/reference/en/language/functions/external-
interrupts/attachinterrupt/
Diakses pada 7 Januari 2020
[6]. Arduino.cc. “pointer in Arduino”.
https://www.arduino.cc/reference/en/language/structure/pointer-
access-operators/reference/
Diakses pada 7 Januari 2020
[7]. Norwegiancreations. “pointer in Arduino”.
https://www.norwegiancreations.com/2017/02/getting-started-with-
programming-part-7-pointers-in-c/
Diakses pada 7 Januari 2020
[8]. Mypractic.som. “pointer conversion data type”.
http://mypractic.com/lesson-15-pointers-in-c-for-arduino-conversion-of-
different-data-types-to-bytes/
Diakses pada 7 Januari 2020

102
LAMPIRAN

Interface Arduino dengan LCD

Menguhungkan board Arduino dengan LCD memerlukan beberapa hal,


pertama kita harus mendownlaod library liquidCrystal, kemudian
mengimportnya ke IDE Arduino. Selanjutnya kita bisa memasukkan
librarynya pada bagian header di sketch Arduino, sintaksnya seperti di
bawah ini:
#include<liquidCrystal.h>

Selanjutnya kita menentukan konfigurasi pin-pin pada LCD yang


dihubungkan dengan board Arduino (pada kasus ini digunakan Arduino
Uno). Default sintaksnya adalah sebagai berikut:
liquidCrystal (RS, E, D4, D5, D6, D7);

misalkan kita ingin menghubungkan pin LCD dengan Arduino Uno


seperti pada table di bawah ini:

Tabel 1. Pin yang menghubungkan LCD dengan Arduino Uno

Pin LCD Pin Arduino Uno


RS 7
E 6
D4 5
D5 4
D6 3
D7 2

Berdasarkan table di atas, sintaks pada IDE Arduino adalah:


liquidCrystal(7,6,5,4,3,2);

103
Fungsi-fungsi pada LCD

LCD merupakan bagian penting dalam mempelajari Arduino, biasanya


kita menampilkan data pengukuran suhu, jarak maupun kelembaban
pada layar LCD. Pada mata kuliah yang saya ampu, jenis LCD yang
digunakan adalah LCD 16x2, ini berarti bahwa terdapat 2 baris dimana
tiap baris memiliki 16 karakter. Fungsi-fungsi berikut sering digunakan
saat menggunakan LCD.

lcd.clear() : fungsi ini untuk menghapus tampilan text yang ada di


tampilan layar LCD

lcd.home() : fungsi ini untuk menempatkan kursor ke pojok kiri atas


(baris pertama, karakter pertama)

lcd.setCursor(): lebih spesifik dari fungsi lcd.home(), pada fungsi ini


terdapat dua argument

lcd.setCursor(kolom, baris)

indeksasi argument kolom dimulai dari 0 sampai dengan


15 sedangkan baris hanya 0 dan 1. Jika kita ingin
menulisa huruf a pada kolom ke-5 dan baris pertama
maka fungsi yang dituliskan adalah

lcd.setCursor (4,0);

jika kita ingin menempatkan text pada baris kedua pada


kolom pertama maka sintaksnya:

lcd.setCursor(0,1);

lcd.write() : fungsi ini untuk menulis text dengan tipe data yang
berbeda

lcd.print() : fungsi ini digunakan untuk menampilkan text pada


layar LCD. Misalkan kita ingin menampilkan tulisan
“TEKKOM” maka sintaksnya:

lcd.print(“TEKKOM”);

104
jika kita ingin menampilkan text tersebut pada baris
kedua di LCD dan kolom ke-3 maka sintaksnya sebagai
berikut:

lcd.setCursor(2,1);

lcd.print(“TEKKOM”);

bagaimana kalau kita ingin menuliskan angka?


Jawabannya tidak perlu menambahkan tanda “,
perhatikan contoh berikut: jika kita ingin menuliskan
angka 567 pada LCD maka sintaksnya:

lcd.print(567);

pada layar LCD dapat juga ditampilkan data dalam


bentuk decimal, biner, oktadesimal dan hexadecimal.
Sebagai contoh: kita ingin menuliskan angka 100. Angka
ini sebenarnya termasuk decimal maka tampilan di LCD
akan tetap 100, berikut adalah sintaksnya:

lcd.print(100, DEC); //ditampilkan 100

jika ingin menampilkannya dalam bentuk biner maka


sintaksnya:

lcd.print(100, BIN);//ditampilkan 1100100

jika ingin dikonversi ke oktadesimal maka sintaksnya:

lcd.print(100, OCT);//ditampilkan 144

jika kita ingin menkonversi ke hexadecimal, sintaksnya


adalah sebagai berikut:

lcd.print(100, HEX);//ditampilkan 64

lcd.Cursor() : fungsi ini untuk membuat kursor menjadi dapat


terlihat

lcd.noCursor(): fungsi ini untuk membuat kursor tak terlihat

105
lcd.blink() : fungsi ini untuk membuat kursor terlihat lalu hilang,
terlihat lagi dan hilang. Begitu seterusnya, delaynya
dalah 500 milisekon. Untuk membuatnya tidak kedap-
kedip maka digunakan fungsi lcd.noBlink()

lcd.display() : fungsi ini untuk menampilkan text atau kursor yang


sudah ditampilkan sebelumnya menggunakan fungsi
lcd.print()

lcd.scrollDisplayLeft() : fungsi ini menyebabkan text bergeser


ke kiri. Fungsi harus ditempatkan di void loop() pada
IDE Arduino. fungsi ini akan menggerakkan text
sebanyak 40 spasi ke kiri sebelum loop balik ke tampilan
pertama kalinya.

lcd.scrollDisplayRight() : fungsi ini sama dengan


lcd.scrollDisplayLeft() tapi yang berbeda adalah
textnya bergerak ke kanan.

lcd.autoscroll() : untuk mengambil string (susunan text)


sebanyak 40 karakter yang discroll dari kanan ke kiri dan
dilakukan secara berulang.

lcd.display() : fungsi ini untuk menampilkan text atau kursor yang


sudah ditampilkan sebelumnya menggunakan fungsi
lcd.print()

lcd.rightToLeft(): fungsi ini untuk menampilkan text terbalik.


Sebagai contoh pada LCD tampilannya:

UNWIR

jika kita kenakan fungsi lcd.rightToLeft() maka pada


LCD akan tertulis:

RIWNU

lcd.createChar(): tiap karakter pada LCD 16x2, lebarnya memiliki


ukuran 5 pixel sedangkan tinggi memiliki ukuran 8
pixel. Dengan fungsi ini kita bisa membuat karakter unik
seperti tanda cinta, kotak, segitiga dan lain-lain.

106

Anda mungkin juga menyukai