Anda di halaman 1dari 163

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

i
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

3
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

4
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

5
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:
Ekspresi
Statemen
Blok statemen
Blok fungsi

Ekspres
i
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:

1
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

2
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.
Stateme
n
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.
variabe
l
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;

3
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.

4
- 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 ();
}

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

6
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

7
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.

8
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()

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

1
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:

1
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:

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

1
Gambar 1.4. Tampilan pertama Arduino
IDE

1
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:

1
Gambar 1.5. Cara import library

1
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:

1
Gambar 1.7. Tampilan library manager IDE
Arduino

1
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

1
> Blink. Supaya lebih jelas, perhatikan gambar
berikut:

2
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

2
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.

2
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?

2
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

2
string ? null (‘\0’) tipe data reference
dibangun dari susunan karakter
String ? Objek tipe data reference

2
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

2
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);

2
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.

2
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.

2
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

3
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

3
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

2
dataSaya=dataSaya.ToUpperCase();

2
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

2
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:

2
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.

2
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.

2
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

2
Selanjutnya kita pelajari beberapa statemen pengambilan
keputusan, yang pertama adalah statemen if. Penjabarannya
adalah sebagai berikut.

2
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 >
2
20 maka fungsi lakukanYangLain()
dipanggil.
Bagaimana jika ekspresi pada statemen if
salah?

3
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:

3
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:

Gunakan const kapanpun saat kita menginginkan data pada


suatu program tidak berubah selama perogram berjalan
const ditempatkan sebelum tipe data dari suatu variabel
biasanya variabel yang disertai modifier const
ditulis menggunakan huruf besar, seperti: LED1, LAMPU, dll.
Mari kita buat sintaksnya pada IDE Arduino:

3
/*
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

3
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
3
}
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);

3
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:

3
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);

3
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){

3
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.

3
Perhatikan contoh berikut:

4
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

4
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);

4
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:

4
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:

4
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.

4
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.

4
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.

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

//tubuh statemen loop for

4
}

//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++) {

4
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

5
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:

5
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

5
membuat program menampilkan kuadrat dari bilangan-
bilangan, berikut adalah listing programnya.

5
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.

5
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

5
#define MAXLOOP 10

void setup() {

5
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);
5
k++;
} while (k<1001);

5
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++;

5
if (angka==MAXTONGDIUKUR) //reset sehingga tetap di loop
angka = 0;
}
tambahBahan(angka);

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

6
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?

6
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;

6
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;

6
}

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);

6
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
}

6
void loop() {
}

6
//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

6
yang boleh ditaruh di dalamnya. Berikutnya kita ingin
memberikan argument 5, perhatikan sintaks berikut:
void setup() {

6
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:

7
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() {

7
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: “);

7
//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 yangbertipe 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

7
return pada bagian bawah fungsi. Sintaksnya adalah sebagai
berikut:
return result;

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

b. )0.01 ± 5.21( = ‫݌‬


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:
߲‫ܮ‬ ଶ ߲‫ܮ‬

Δ‫ = ܮ‬ඨ൬ Δ +൬
Δ݈ ൰
‫݌‬൰ ◌݈
߲݈
߲‫݌‬


߲(‫݌‬
݈ ߲(‫݌‬ ݈ ) ଶ
) Δ‫ = ܮ‬ඨ൬ Δ‫ ݌‬+ ൬ ߲ Δ݈ ൰
߲‫݌‬
൰ ݈


߲‫݌‬ ◌݈
߲݈
Δ‫ = ܮ‬ඨ൬
൬݈ ଶ + ൬‫ ݌‬Δ݈ ൰
߲݈
◌݈
Δ‫݌‬

߲‫݌‬

Δ‫ = ܮ‬ඥ(݈Δ‫)݌‬ଶ + (‫݌‬Δ݈)ଶ

7
Jadi rumus untuk Luas adalah:

‫݈×ܮ =݌‬

Rumus untuk ralat luasnya adalah:

7
Δ‫ = ܮ‬ඥ(݈Δ‫)݌‬ଶ + (‫݌‬Δ݈)ଶ

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;

7
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)

7
Persamaan matematik Δ‫ ܮ‬dituliskan pada sintaks
berikut:

7
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);

8
2.3 merepresentasikan lebar sampai dengan 0.2
merepresentasikan ralatLebar, maka kita cukup mengganti nilai
tiap argumentnya menjadi:

8
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:


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

8
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.

8
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
8
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

8
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

6
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;
6
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

6
char disebut juga sebagai string (s huruf kecil). Mari kita bahas
lebih detail terkait string. Perhatikan contoh di bawah ini.

7
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:

7
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 0 1
ke- 2 3 4 5 6 7 8 9 0 1

7
Koding yang ditulis suka[13]=0; menunjukkan bahwa elemen ke-
13 yaitu tepatnya pada huruf i dihapus. Caranya diberikan nilai
nol. Yang

7
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);

7
}
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
7
banyak seperti merubah huruf menjadi kapital, digunakan fungsi
toUpperCase(), atau

7
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

7
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:

7
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);

7
Serial.println("kondisi mula-mula:");
Serial.println(stringKu);
Serial.println(" ");

8
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");

7
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");

7
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

7
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”);
}
}
}

8
Program di atas kemudian diupload ke board Arduino,
tampilan di monitor di adalah sebagai berikut:

8
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

8
terimaString sama dengan nilai terimaString + terimaByte,
kodingnya

8
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{

8
int hasil;
hasil=terimaString.toInt()*2;
Serial.print(terimaString);
Serial.print(" x 2 = ");
Serial.print(hasil);

8
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:

8
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);

8
Perhatikan bahwa string yang diterima melalui serial monitor
bertipe data String meskipun yang dimasukkan adalah suatu
angka. Supaya

8
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.

8
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

9
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.

9
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.

9
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.

9
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

9
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:

9
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.

9
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


9
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:

9
for(i=0;Serial.print(“baris: “), Serial.println(i+1),i<10;i++)

{ Serial.print(“nilai i: “);

Serial.println(i);

9
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:

1
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;

1
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
1
Kita sudah mencoba membuat pointer, lalu apa saja
kegunaannya? Berikut dijelaskan aplikasi pointer:

1
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));

1
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.

1
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.

1
Catatan: HARUS menggunakan fungsi untuk kelima kondisi di
atas.

1
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();

1
//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);

1
}

//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);

1
//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);

1
DAFTAR
PUSTAKA

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


Edition.
Technology In Action. Cincinnati: USA.
[2]. Wikipedia. “ASCII h t tps://
character”. en.wikipedia.org/wiki/ASCII.
Diakses pada 7 Januari 2020.
[3]. Arduino.cc. “Array in
Arduino”.
https://w ww.arduino .cc/reference/tr/ language/variables/data-
types/ array/ .
Diakses pada 2 Januari 2020
[4]. Circuitdigest. “Arduino
Interrupt”.
htt ps: // circ uitdigest .com /m i cro co ntro l le r -pro ject s/ arduino -inte
rrupt-
tutorial-w ith-exam ples
Diakses 7 Januari 2020
[5]. Dsdsds. “Eksternal Interrupt Arduino.
https://w ww.arduino .cc/reference/en/ language/ functions/ e xternal-
interrupts/ attachinterrupt/
Diakses pada 7 Januari 2020
[6]. Arduino.cc. “pointer in
Arduino”.
https://w ww.arduino .cc/reference/en/ language/ structure/po inter-
access-o perato rs/reference /
Diakses pada 7 Januari 2020
[7]. Norwegiancreations. “pointer in Arduino”.
https://w ww.norwe giancreations. co m/2017/02/ge tting-started-with-
programm ing-part-7-pointers-in-c/
Diakses pada 7 Januari 2020
[8]. Mypractic.som. “pointer conversion data type”.
http://m ypract ic.com/lesso n -15-point ers-in-c-for-arduino -co nver
sion-o f-

1
different-data-types-to-byte s/
Diakses pada 7 Januari 2020

1
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);

1
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

1
lcd.print() : fungsi ini digunakan untuk menampilkan text
pada layar LCD. Misalkan kita ingin
menampilkan tulisan “TEKKOM” maka sintaksnya:
lcd.print(“TEKKOM”)
;

1
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:

1
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

1
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:

RIWN

U
1
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.

Anda mungkin juga menyukai