03 Bahasa Pemrograman Arduino Muh Pauzan
03 Bahasa Pemrograman Arduino Muh Pauzan
ARDUINO
Muhammad Pauzan
Penerbit K-Media
Yogyakarta, 2020
BAHASA PEMROGRAMAN ARDUINO
vi + 106 hlm.; 14 x 20 cm
ISBN: 978-602-451-777-9
Penerbit K-Media
Anggota IKAPI No.106/DIY/2018
Banguntapan, Bantul, Yogyakarta.
e-mail: kmedia.cv@gmail.com
ii
KATA PENGANTAR
Muhammad Pauzan
iii
DAFTAR ISI
iv
Tipe data array ................................................................22
PROYEK ........................................................... 97
DAFTAR PUSTAKA .......................................... 102
LAMPIRAN ..................................................... 103
v
vi
BAB I
Bahasa C Arduino
Ekspresi
Sebuah ekspresi terdiri dari gabungan antara operator dan
operand. Operand adalah suatu data yang dioperasikan oleh operator,
sedangkan operator adalah aksi matematik atau logika yang
menggunakan dua atau lebih operand. Perhatikan contoh berikut:
a + b
m - 300
g < d
1
operand. Operand m dikurangi operand 300 oleh operator −. Contoh
ketiga terdapat dua operand yaitu g dan d, < adalah operator hubung
(relational operator) yang berarti lebih kecil dari.
Contoh pertama adalah ekspresi penjumlahan, contoh kedua adalah
ekspresi pengurangan dan yang ketiga adalah ekspresi relasional.
Semua contoh di atas adalah ekspresi yang menggunakan operator
binary, dimana terdapat dua operand. Jika operandnya tiga maka
disebut operator ternary dan jika satu maka disebut operator unary.
Statemen
Statemen adalah instruksi C yang lengkap untuk komputer. Semua
statemen C diakhiri oleh semikolon (;). Berikut adalah contoh
statemen:
i=50;
a=b+c;
m=d/2;
2
- Operator Precedence
Misalkan terdapat statemen dengan beberapa ekspresi sebagai
berikut:
j = 5 + k * 2;
Blok statemen diawali dengan buka kurung { dan diakhiri dengan tutup
kurung }, semua statemen antara tanda { dan } disebut sebagai tubuh
3
blok statemen. Jadi di dalam statemen bisa juga terkandung fungsi,
fungsi-fungsi tersebut adalah PakaiGuntingRumput() dan
TaruhDiWadah().
Blok Fungsi
Blok fungsi merupakan blok kode yang didesain untuk melakukan
suatu pekerjaan (task). Perbedaan antara blok fungsi dengan blok
statemen adalah pada blok statemen terdiri dari operator
(penjumlahan, pengurangan dan yang lainnya) sedangkan pada blok
fungsi tidak ditemukan operator melainkan nama fungsi dan tipe
datanya. Perhatikan contoh berikut:
int volumeDuaBalok() { //fungsi bernama volumeDuaBalok bertipe
data int
int total;
volumeBalok1(); //fungsi lain, fungsi di dalam fungsi
volumeBalok2();//fungsi lain, fungsi di dalam fungsi
total = volumeBalok1()+volumeBalok2;
return total;
}
4
3. Proses
Sensor memberikan data ke Arduino lalu Arduino memprosesnya
menjadi suatu data baru, pengubahan data input menjadi suatu data
baru disebut sebagai proses.
4. Output
Jika tahap proses selesai maka diperoleh data baru, data baru ini
disebut sebagai output. Bisa juga data baru tersebut diproses lagi dan
hasil akhirnya adalah output.
5. Penghentian
Tahap penghentian (termination) terjadi saat program running dan
dilakukan penghentian, namun dalam banyak kasus pada project
Arduino tahap ini sangat jarang digunakan.
Perhatikan sketch berikut:
void setup()
{ //memulai tubuh fungsi setup()
Serial.begin(9600); //langkah 1: inisialisasi
Serial.println(“ini adalah program pertama Arduinoku”);
//tahap input: tulisan “ini adalah program pertama
Arduinoku”
//tahap proses: serial objek memformat data (berupa
tulisan) untuk ditampilkan
//tahap output: munculnya tulisan “ini adalah program
pertama Arduinoku” di layar monitor.
} //akhir dari tubuh fungsi setup()
void loop()
{ //memulai tubuh fungsi loop()
}//akhir tubuh fungsi loop()
Pada koding di atas, terdapat fungsi setup() dan loop(), kedua fungsi
ini merupakan fungsi default dari IDE Arduino. Berikut adalah
penjelasannya:
Fungsi setup()
5
Setiap program Arduino memiliki fungsi setup(), tujuan dari fungsi ini
adalah menyediakan lingkungan dimana program akan running.
Fungsi loop()
Setiap program Arduino harus memiliki fungsi loop(). Sketch atau
program pada Arduino pertama kali menjalankan fungsi setup() baru
kemudian menjalankan fungsi loop(). Apapun yang ditaruh di dalam
fungsi loop(), program di dalamnya akan terus menerus running
(perulangan). Hal tersebut akan berakhir jika daya dicabut atau board
Arduino di off kan.
C. Instalasi Integrated Development Environment (IDE) Arduino
Pada saat buku ini ditulis, versi terbaru dari IDE Arduino adalah
versi 1.8.10 untuk Windows. Buka arduino.cc di browser maka akan
muncul seperti gambar di bawah ini:
6
Gambar 1.2. Jendela download IDE Arduino
Terdapat banyak pilihan untuk melakukan instalasi, pada kasus ini kita
menginstalasi IDE Arduino pada windows dan menggunakan zip,
bukan installer. Kelebihan zip adalah saat kita selesai mendownload,
tidak diperlukan lagi koneksi internet untuk melakukan instalasi. Pilih
windows zip pada gambar di atas, kemudian softwarenya akan
terdownload. Jika sudah terdownload, buka folder Arduinonya, lalu
klik kanan pada file extensi Arduino, buatlah shortcutnya di desktop.
Ilustrasinya adalah sebagai berikut:
7
Gambar 1.3. Menempatkan executable Arduino ke Desktop
Buka desktop kemudian buka aplikasi Arduino, jendela pertama yang
muncul adalah sebagai berikut:
8
Seperti yang sudah disampaikan di atas bahwa void setup() berfungsi
menyiapkan lingkungan yang cocok untuk menjalankan program.
Fungsi void setup() merupakan tempat yang tepat untuk
menginisialisasi pin-pin input dan output sehingga pin-pin pada board
Ardunio siap untuk menjalankan fungsi void loop().
D. Memasukkan library
Salah satu kelebihan Arduino adalah tersedianya begitu banyak
library, cukup mengetikkan library yang diinginkan pada mesin pencari
maka kita akan dengan mudah mendapatkannya atau cara lain yaitu
melalui library manager di IDE Arduino. Library merupakan suatu paket
koding yang sudah disediakan dan dibuat oleh pihak/orang lain. Library
berfungsi menyediakan lingkungan yang dibutuhkan oleh program
yang dijalankan {biasanya pada fungsi loop()}. Sebagai contoh jika
kita ingin interface board Arduino dengan LCD 16x2, cukup masukkan
library liquidCrystal.h. Dengan demikian LCD siap menampilkan data
(teks dan angka), waktu dan lain-lain dari Arduino. Pada gambar
dibawah diperlihatkan cara memasukkan library LCD:
9
Berdasarkan gambar di atas, cukup pilih sketch>include library >
LiquidCrystal. Kita sudah berhasil memasukkan library di IDE Arduino
seperti pada gambar di bawah:
10
Jika kita ingin memasukkan library RTC DS3231 langkah selanjutnya
adalah klik instal, maka library akan terinstal di IDE Arduino.
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:
11
Gambar 1.9. Program kedap-kedip di board Arduino Uno
Sketch blink akan terbuka secara otomatis, tampilannya sebagai
berikut:
12
Untuk mengecek apakah koding yang ditulis benar, dilakukan verify
(compile), tombol verify adalah paling kiri atas yang bertanda centang
( √ ). Jika tidak ditemukan error maka tampilan pada bagian bawah IDE
Arduino adalah sebagai berikut:
13
Soal-Soal
1. Perhatikan sintaks di bawah ini, sebutkan apakah termasuk
variabel, statemen atau fungsi. Berikan alasannya.
a. a=d+f
b. b=c+k;
c. float kelilingPersegi()
2. Kapankah operator precedence digunakan? Jelaskan.
3. Apa perbedaan antara bahasa pemrograman Arduino dengan
bahasa C?
4. Apa fungsi library pada IDE Arduino?
14
BAB II
15
array ? Susunan tipe data yang diacu
oleh nama variabel tunggal
void 0 Deskripsi yang digunakan dengan
fungsi sebagai tipe data kembali
ketika fungsi tidak
mengembalikan nilai
FisikaDasar
Elektronika_lanjut
hari1
16
sedangkan penulisan nama variabel yang salah adalah:
^teknik
Fisika-Dasar
Elektronika_lanjut?
1hari
Ingat bahwa bahasa C adalah case sensitif, maka kedua variabel myData
dan MyData adalah berbeda.
contoh lain, jika sakelar on maka nilai true, dan bernilai false jika
sakelar off. Perhatikan listing programnya:
boolean sakelar;
keadaanSakelar=ReadKeadaanSakelar(sakelarYangMana);
if (keadaanSakelar) {
matikanSakelar (sakelarYangMana);
} else {
nyalakanSakelar (sakelarYangMana);
17
Bilangan Biner
Komputer hanya memahami dua keadaan, low (0) dan high (1) atau off
dan on. Oleh karena itu komputer menggunakan sistem bilangan biner.
Jadi bilangan biner hanya memiliki dua jenis yaitu 0 dan 1.
Bit berarti binary integer, jadi tipe data bit adalah data biner (berbasis
2) bernilai bulat. Kita sering mendengar kata byte, byte sebenarnya
adalah terdiri dari 8 bit. Perhatikan bahwa penomoran bit dimulai dari
0 sehingga 8 bit berarti: 2 adalah bit pertama sehingga bit ke delapan
adalah 2 .
18
Tipe data long
Karena tipe data long menggunakan 32 bit, diasumsikan bahwa
rentang nilai antara positif dan negatif sebesar dua milyar. Tipe long
juga merupakan tipe data integer sehingga tidak dapat digunakan
untuk merepresentasikan nilai pembagian (yang menghasilkan koma).
Tipe data 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.
19
Huruf Biner Octal Decimal Hexadecimal
H 100 1000 110 72 48
I 100 1001 111 73 49
J 100 1010 112 74 4A
K 100 1011 113 75 4B
L 100 1100 114 76 4C
M 100 1101 115 77 4D
N 100 1110 116 78 4E
O 100 1111 117 79 4F
P 101 0000 120 80 50
Q 101 0001 121 81 51
R 101 0010 122 82 52
S 101 0011 123 83 53
T 101 0100 124 84 54
U 101 0101 125 85 55
V 101 0110 126 86 56
W 101 0111 127 87 57
X 101 1000 130 88 58
Y 101 1001 131 89 59
Z 101 1010 132 90 5A
A 110 0001 141 97 61
B 110 0010 142 98 62
C 110 0011 143 99 63
D 110 0100 144 100 64
E 110 0101 145 101 65
F 110 0110 146 102 66
G 110 0111 147 103 67
H 110 1000 150 104 68
I 110 1001 151 105 69
J 110 1010 152 106 6A
K 110 1011 153 107 6B
L 110 1100 154 108 6C
M 110 1101 155 109 6D
N 110 1110 156 110 6E
20
Huruf Biner Octal Decimal Hexadecimal
O 110 1111 157 111 6F
P 111 0000 160 112 70
Q 111 0001 161 113 71
R 111 0010 162 114 72
S 111 0011 163 115 73
T 111 0100 164 116 74
U 111 0101 165 117 75
V 111 0110 166 118 76
W 111 0111 167 119 77
X 111 1000 170 120 78
Y 111 1001 171 121 79
Z 111 1010 172 122 7A
21
kelebihan tipe data String adalah kemudahannya untuk dikonversi ke
bentuk lain dengan menggunakan fungsi default yang disediakan,
berikut adalah fungsi-fungsi yang dapat dikenakan pada String:
void loop(){
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.
22
int hasil[4];
float suhu[150];
23
Soal-Soal
24
BAB III
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
5 >= 4 //benar
5 < 4 //salah
5 <= 4 //salah
5 == 4 //salah
5! = 4 //benar
25
A. Statemen if
Sintaks untuk statemen if adalah sebagai berikut:
if (ekspresi1)
{ //memulai blok statemen if
//mengesekusi blok statemen ini hanya jika ekspresi1
benar
} //akhir dari blok statemen if
Statemen if terdiri dari kata kunci “if” dan diikuti oleh buka lalu tutup
kurung. Di dalam dua kurung tersebut terdapat sebuah ekspresi yang
melakukan kalkulasi untuk mengecek apakah benar atau salah suatu
keadaan. Kemudian diikuti oleh buka kurung kurawal “{“, tanda ini
menunjukkan bahwa blok statemen dimulai, kemudian diikuti oleh
satu atau lebih statemen program. Semua statemen yang ada di dalam
dua kurung kurawal tersebut disebut sebagai blok statemen if, yang
dieksekusi/running jika pengujian if adalah benar. Blok statemen blok
diakhiri oleh tutup kurung kurawal “}”. Perhatikan kode program
berikut:
Int b = 10;
//beberapa statemen
If (b < 20)
{
b=lakukanSesuatu(); //melakukan hal ini jika b < 20
}
lakukanYangLain();
26
Jika salah maka tubuh fungsi if diskip dan menjalankan statemen lain,
pada kasus ini adalah memanggil fungsi lakukanYangLain().
27
Gambar 3.1. Board Arduino dirangkai LED
28
/*
Program LED kedap kedip
Oleh Muh Pauzan
*/
//memberikan nama pada tiap pin LED dan tidak diperbolehkan
untuk mengubahnya
void setup() {
void loop(){
0 ÷ 2 = 0 sisa 0
1 ÷ 2 = 0 sisa 1
2 ÷ 2 = 1 sisa 0
29
3 ÷ 2 = 1 sisa 1
4 ÷ 2 = 2 sisa 0
5 ÷ 2 = 2 sisa 1
30
}
angka = angka + 1; //tiap kali loop, nilai angka ditambah 1
}
B. Statemen if-else
Pada stetemen if, jika satu if nya berlogika benar maka if yang
lainnya berlogika salah. Jadi ada dua kondisi untuk statemen if. Cara
lain menggunakan dua kondisi tersebut adalah dengan menggunakan
statemen if-else. Jika pada statemen if berlogika benar maka pada
else pasti berlogika salah. Bentuk umum statemen if-else adalah
sebagai berikut:
if (ekspresi mengecek untuk logika benar){
//menajalankan statemen ini jika berlogika benar
} else {
//menjalankan statemen ini jika selain kondisi ekspresi pada if
di atas
}
31
long angka = 0; //mendefinisikan variabel bernama angka dengan
tipe data long dan bernilai 0
}
//loop yang selalu dilakukan berulang-ulang
void loop(){
if(angka % 2 = =0) { //jika genap jalankan statemen ini
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
delay (1000);
}else{ //jika tidak genap, jalankan statemen ini
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
delay (1000);
}
angka = angka + 1; //tiap kali loop, nilai angka ditambah 1
}
C. Kaskade statemen if
Jika kita memiliki banyak kemungkinan maka statemen if juga
banyak, sebagai contoh kita ingin mengkombinasikan nyala dari
empat buah LED, LED1 sampai dengan LED4 dirangkai pada pin 10
sampai dengan 13 secara berurutan. Rangkaiannya dapat dilihat pada
gambar di bawah ini:
32
Gambar 3.2. Rangkaian arduino dengan empat LED
33
delay(1000);
}
if (keadaan==4){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
delay(1000);
}
34
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
delay(1000);
}
}
}
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++;
35
int c = 5; //deklarasi variabel bernama c bertipe data int
bernilai 5
int k; //deklarasi variabel bernama k bertipe data int
k=++c; //operator pra-meningkat
berdasarkan operator pra-meningkat di atas, berapakah nilai k? Nilai
k adalah c+1=6, sedangkan nilai c tetap yaitu 5.
36
D. Statemen switch
switch adalah kata kunci pengontrol yang lain, berikut adalah sintaks
untuk statemen ini:
switch (ekspresi1) {
case 1:
//statemen dieksekusi jika ekspresi1 adalah 1
break;
case 2:
//statemen dieksekusi jika ekspresi1 adalah 2
break;
case 3:
//statemen dieksekusi jika ekspresi1 adalah 3
break;
//boleh menambah case sebanyak yang diperlukan
default:
//dijalankan jika ekspresi1 tidak memiliki “nilai case”
break:
}
37
break;
case 3:
digitalWrite (LED1, HIGH);
digitalWrite (LED2, LOW);
digitalWrite (LED1, LOW);
digitalWrite (LED2, HIGH);
delay(1000);
break;
case 4:
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
delay(1000);
break;
default:
serial.println(“terjadi suatu kesalahan”);
break;
}
Preprosesor C
Saat kita mencompile program, yang dilakukan pertama kali oleh
compiler adalah mencari direktif yang harus diproses sebelum mulai
compile program. Direktif ini disebut sebagai preprosesor direktif.
Direktif pada Arduino dapat dilihat pada tabel di bawah ini:
38
Tabel 3.3. Preprosesor direktif
39
const int LED1 = 10 ;
40
Soal-Soal
41
BAB IV
Program Loop
A. Loop for
Sintaks dari loop for adalah:
for (ekspresi1;ekspresi2;ekspresi3) {
42
}
43
diproses maka tahap selanjutnya adalah ke ekspresi3, pada tahap ini
nilai k dinaikkan atau ditambah satu, sekarang nilainya 0+1=1. k=1
diproses ke ekspresi2, maka menghasilkan logika benar karena
k<1000. Statemen pada tubuh for dijalankan untuk nilai k=1. Proses
ini berulang sampai diperoleh k=1000, saat hal tersebut terjadi maka
pada ekspresi2 akan menghasilkan logika salah. Karena salah maka
statemen di dalam tubuh for tidak dijalankan melainkan proses pada
loop for dihentikan dan dilanjutkan dengan statemen setelah tubuh
loop for.
¾ Program untuk mengetahui rangkaian proses pada loop for
Kita dapat melihat susunan atau rangkaian proses pada loop for
dengan menuliskan sintaks berikut ke IDE Arduino.
Listing 4.1. Demonstrasi loop for
void setup() {
int k;
Serial.begin(9600);
for (k=0, Serial.print(“exp1 k= “), Serial.println(k);
//ekspresi1
Serial.print (“exp2 k= “), Serial.println(k),
k<10; //ekspresi2
k++, Serial.print(“exp3 k= “), Serial.println(k))
{ //ekspresi3
Serial.print(“di dalam tubuh loop, k dikuadratkan= “);
//statemen pada tubuh loop for
Serial.println(k*k);//setelah line ini, ditulis pada line
baru
delay(1000);
}
}
void loop() {}
44
Gambar 4.1. Alur program loop for
Perhatikan bahwa setelah melalui eksp1 (ekspresi1) dilanjutkan ke
eksp2, karena keadaan true maka dilanjutkan ke tubuh loopnya.
Setelah statemen terakhir dijalankan, akan dilanjutkan ke eksp3
(ekspresi3), setelah ekspresi3 dijalankan maka dilanjutkan ke eksp2,
eksp2 mengecek apakah kondisi true atau false, jika true maka
dijalankan statemen yang ada di tubuh loop. Begitu seterusnya terjadi
berulang-ulang sampai kondisi false terpenuhi, jika hal ini terjadi maka
program berhenti di ekspresi2.
Dengan menggunakan loop for, kita juga akan mencoba
membuat program menampilkan kuadrat dari bilangan-bilangan,
berikut adalah listing programnya.
45
Listing 4.2. Menampilkan kuadrat dari angka 0 sampai 9
#define MAXLOOP 10
void setup() {
int kuadrat[MAXLOOP];
int angka;
Serial.begin(9600);
for(angka=0; angka<MAXLOOP; angka++) {
kuadrat[angka]=angka*angka;
//menampilkan hasil di serial monitor
Serial.println(kuadrat[angka]);
}
}
void loop() {}
Hasil dari program di atas pada layar monitor dapat dilihat pada
gambar di bawah ini.
46
Listing 4.3. LED kedap-kedip menggunakan loop for
#define LED 13
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
int angka;
for(angka=0; angka<1000; angka++) {
if (angka % 2 ==0) {
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
delay(500);
}
}
B. Loop while
Secara umum sintaks untuk loop while adalah;
while (expression2) {
Perhatikan sintaks di atas, loop while hanya menguji ekspresi2, jika uji
ekspresi2 berlogika benar maka statemen di tubuh while dijalankan
berulang-ulang sampai uji ekspresi2 berlogika salah. Sebenarnya loop
while sama saja dengan loop for, hanya saja ekspresi1 ditempatkan di
luar / sebelum loop for. Selain itu pada loop while ekspresi3
ditempatkan di dalam statemen tubuh dari loop while. Berikut adalah
sintaks program pada loop for ditulis ke dalam loop while.
Listing program 4.4. sintaks untuk loop while untuk angka yang
dikuadratkan
#define MAXLOOP 10
void setup() {
47
int kuadrat[MAXLOOP];
Serial.begin(9600);
angka = 0; //ekspresi1
while (angka<MAXLOOP) { //ekspresi2
kuadrat[angka] = angka * angka;
angka++; //ekspresi3
}
void loop(){}
C. Loop do-while
Sintaks loop do-while adalah sebagai berikut:
do {
//statemen di dalam tubuh loop
} while (ekspresi2);
Saat program pertama kali memasuki loop while, uji terhadap k gagal
karena k yang disyaratkan loop adalah lebih kecil dari 1000 sedangkan
k yang diuji adalah 1001. Sehingga lakukanSesuatu() tidak dieksekusi.
Coba kita buat program di atas menggunakan loop do-while;
int k = 1001;
do {
lakukanSesuatu(k);
k++;
} while (k<1001);
48
Berdasarkan listing program di atas, meskipun nilai k berlogika salah
terhadap loop while tapi program loop tetap dijalankan meskipun
cuma sekali.
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.
49
if (angka < MAXTONGDIUKUR) {
angka++;
} else {
angka = 0;
}
}
50
Soal-Soal
51
BAB V
Fungsi di Arduino
gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;
if (jam==12){
gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;
52
If (jam==16) {
gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;
if (jam==18) {
gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;
If (jam==20) {
gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;
Shalat(){
gantiBaju;
wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;
53
}
54
Mendefinisikan dan mendeklarasi fungsi harus dilakukan sebelum
memanggilnya. Di IDE Arduino, mendefinisikan fungsi di dalamnya
juga termasuk mendeklarasikannya. Perhatikan contoh berikut:
//mendefinisikan fungsi
void loop() {
}
55
//mendefinisikan fungsi bernama NamaSaya()
56
Serial.begin(9600);
hurufY(10); //menuliskan 10 huruf Y
Serial.println(“Teknik Komputer”);//menuliskan “Pauzan”
di bawahnya
hurufY(5);//memanggil lagi dan menuliskan 5 huruf Y
}
void loop() {
}
//definisikan fungsi
57
Gambar 5.2. Tampilan untuk fungsi dengan argument 10 dan 5
Berdasarkan gambar 5.2, argument yang bernilai 10 berfungsi untuk
mengontrol jumlah huruf Y yang ditampilkan di layar monitor, begitu
juga dengan argument bernilai 5. Jika ingin lebih banyak, cukup
mengubah argumennya. Perhatikan bahwa argument dari fungsi
hurufY()adalah int urutan. urutan adalah variabel sedangkan int
merupakan tipe data integer.
Nilai kembali dari suatu fungsi
Nilai kembali (return value) dari fungsi adalah nilai dari fungsi
setelah terjadi running di dalam fungsi tersebut. Fungsi yang memiliki
nilai kembali memiliki ciri-ciri: return digunakan pada akhir fungsi,
didefinisikan tipe data sebelum mendeklarasikan fungsi. Tipe data dari
nilai yang dikembalikan harus ditulis, seperti int, float, dll. Contoh
sketch di bawah ini menggunakan fungsi untuk melakukan
perhitungan matematika dan mengembalikan hasil kalkulasi, artinya
jika dalam fungsi ada perhitungan luas maka nilai luas hasil
perhitungan tersebut adalah nilai yang dimiliki oleh fungsi tersebut.
Sehingga fungsi dapat digunakan pada tempat lain di sketch. Bentuk
umum fungsi yang memiliki nilai kembali adalah sebagai berikut:
nilaiKembali NamaFungsi (argument) {
TipeData hasil;
//perhitungan atau operasi matamatik
return hasil; //kata kunci return adalah salah satu ciri
suatu fungsi memiliki nilai kembali
}
void setup() {
float luas;//variable luas bertipe data float
serial.begin(9600);
//menghitung luas lingkaran dengan radius 9.2
luas=luasLingkaran (9.2);
Serial.print (“luas Lingkaran adalah: “);
58
//menampilkan luas sampai 4 digit dibelakang koma
Serial.println(luas, 4);
}
void loop() {
}
//mendefinisikan fungsi bernama luasLingkaran
float luasLingkaran(float jariJari)
{
float hasil;//variable bernama hasil bertipe data float
hasil=3.141592654 * jariJari * jariJari;
return hasil;
}
59
Soal: buatlah program untuk menghitung luas dan ketidakpastiannya
untuk persegi panjang. Berapakah luas dan ketidakpastiannya jika hasil
pengukurannya:
a. = (5.2 ± 0.2) cm
= (2.3 ± 0.2) cm
b. = (5.21 ± 0.01) cm
= (2.31 ± 0.01) cm
Manakah yang memiliki hasil pengukuran lebih baik? Jelaskan.
Jawab
= ×
Rumus ralat luas menggunakan persamaan untuk perambatan ralat:
Δ = Δ + Δ
( ) ( )
Δ = Δ + Δ
Δ = Δ + Δ
Δ = ( Δ ) +( Δ )
= ×
Rumus untuk ralat luasnya adalah:
60
Δ = ( Δ ) +( Δ )
61
hasil2=((lebar*ralatPanjang)*(lebar*ralatPanjang)) +
((panjang*ralatLebar)*(panjang*ralatLebar));
hasil2=sqrt(hasil2);
return hasil2;
}
62
hasil2=((lebar*ralatPanjang)*(lebar*ralatPanjang)) +
((panjang*ralatLebar)*(panjang*ralatLebar));
hasil2=sqrt(hasil2);
berikut penjabarannya:
( Δ ) =((lebar*ralatPanjang)*(lebar*ralatPanjang))
( Δ ) =((panjang*ralatLebar)*(panjang*ralatLebar))
Sedangkan ralatnya:
float ralatLuas(float lebar, float ralatPanjang, float panjang,
float ralatLebar)
menjadi:
ralat=ralatLuas(2.3, 0.2, 5.3, 0.2);
63
ralat=ralatLuas(2.31, 0.01, 5.31, 0.01);
64
Soal-Soal
65
BAB VI
int nilaiSaya[4];
int pinSaya[]=[5, 4, 9, 1];
int nilaiBulat[6]=[2, 5, 1, 4, 9, 8];
char pesan[6]=”hello”;
66
elemen array, sebenarnya kita menggunakan satu elemen untuk
karakter null sehingga elemen yang tersedia hanya lima. Seperti pada
array pesan[6] di atas, maksimum elemen yang diperbolehkan adalah
lima (hello terdiri dari lima elemen/karakter). Perhatikan contoh
berikut:
67
Perhatikan bahwa data di atas tersusun dan memiliki tipe data yang
sama, inilah yang disebut sebagai array. Cara di atas masih bisa
diringkas dengan menggunakan program berikut.
x=arraySaya[3];
68
for (i=0; i<5; i++){
Serial.println(arraySaya[i]);
}
Serial.println(" ");//mengosongkan baris berikutnya
x=arraySaya[3];
Serial.print("nilai x: ");
Serial.println(x);
}
void loop() {
// put your main code here, to run repeatedly:
}
Hasil upload ke board Arduino dapat dilihat pada gambar di bawah ini:
B. string
Pada kasus di atas, kita berhasil membuat array dari
bilangan/angka, pertanyaannya sekarang adalah bagaimana caranya
jika kita ingin membuat array dari text/huruf? Jika ingin membuat array
dari text maka cukup ditambahkan tipe data char (biasanya char)
sebelum nama variabelnya. Sebenarnya variabel yang memiliki array
dan tersusun dari text bertipe data char disebut juga sebagai string (s
huruf kecil). Mari kita bahas lebih detail terkait string. Perhatikan
contoh di bawah ini.
69
Listing 6.4. Contoh string (array bertipe data char)
void setup(){
char stringSaya[6]; //deklarasi string dengan 5 elemen
Serial.begin(9600);
stringSaya[0]=’H’; //elemen pertama bernilai H
stringSaya[1]=’a’;
stringSaya[2]=’l’;
stringSaya[3]=’l’;
stringSaya[4]=’o’; //elemen ke-5 dengan nilai o
stringSaya[5]=0; //karakter null pada elemen ke-6
Serial.println(stringSaya);
}
void loop() {
}
Sintaks di atas bisa juga dituliskan seperti pada listing di bawah ini:
70
Listing 6.5. string yang lebih ringkas
void setup(){
char stringSaya[]=”Hallo”;
Serial.begin(9600);
Serial.println(stringSaya);
}
void loop() {
}
Dari string di atas, berikut dijabarkan elemen string dari yang pertama
sampai dengan yang terakhir:
string s a y a s U k A K O p i d a n t e H
Elemen 1 1 1 1 1 1 1 1 1 1 2 2
0 1 2 3 4 5 6 7 8 9
ke- 0 1 2 3 4 5 6 7 8 9 0 1
71
menarik adalah elemen setelahnya juga secara otomatis terhapus.
Perhatikan tampilannya pada layar monitor berikut:
Berikutnya, kita bisa memodifikasi text pada string. Pada kasus ini kita
akan mengganti kata kue menjadi teh. Berikut ini adalah listing
programnya:
72
}
void loop() {
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”
73
sebaliknya yaitu menggunakan fungsi toLowerCase(), ada masih
banyak lagi yang lainnya. Berikut dituliskan cara mengubah String
menggunakan fungsi:
namaVariabel.fungsi();
74
startsWith() =satu string mulai dengan karakter spesifik yang
berurutan
void loop() {
// put your main code here, to run repeatedly:
}
75
Gambar 6.6. Memberikan fungsi toUpperCase() pada String
76
Serial.println("String diganti:");
stringKu="ini adalah yang baru";
Serial.println(stringKu);
}
void loop() {
// put your main code here, to run repeatedly:
}
Berikut adalah hasilnya pada serial monitor:
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:
77
Serial.println)stringKu);
}
void loop() {
// put your main code here, to run repeatedly:
}
namaString.replace(“kataLama”, “kataBaru”);
78
Selanjutnya kita juga dapat mengetahui lebar dari suatu String, caranya
yaitu menggunakan fungsi length(). Kita akan mencoba mencari tahu
lebar String yang sudah kita kerjakan, berikut adalah listingnya:
void loop() {
// put your main code here, to run repeatedly:
}
79
Kita sudah membuat karakter/elemen string dan String,
pertanyaannya adalah apa kelebihan masing-masing? Objek string
(String) jauh lebih mudah dimodifikasi, cukup memberikannya fungsi.
Sedangkan untuk merubah elemen string dilakukan dengan manual.
Tapi objek String menggunakan memori yang besar sehingga sewaktu-
waktu Arduino yang digunakan bisa saja mengalami crash.
80
Gambar 6.10. Membaca String
81
adalah terimaString+=terimaByte;. Setelah mengisi nama dan
mengklik send pada serial monitor, nilai newline pada serial monitor
adalah kosong, sedangkan terimaByte tidak kosong (ada). Maka
sekarang nilai terimaString ada (berupa nama yang diketikkan). Karena
newline tidak ada nilainya maka statemen if yang pertama (setelah void
loop()) berstatus false, maka dijalankan statemen di dalam else, data
string yang diterima melalui statemen if kemudian ditampilkan pada
monitor dengan program berikut: Serial.println (terimaString);.
82
Serial.println(" ");
Serial.println("Masukkan suatu angka untuk dikalikan dengan
2");
}
bukanAngka=false;
terimaString=" ";
}
else{
bukanAngka=true;
}
}
}
}
83
if ((terimaByte>='0')&&(terimaByte<='9')){
terimaString+=terimaByte;
}
else if (terimaByte=='\n'){
if(bukanAngka){
Serial.println("Bukan suatu angka");
}
84
dapat dioperasi matematik, perlu dikenakan fungsi kepadanya. Fungsi
yang digunakan adalah fungsi toInt() seperti koding di atas. Fungsi ini
berguna untuk mengubah tipe data string menjadi integer. Dengan
demikian kita sekarang dapat mengalikannya dengan dua.
85
Soal-Soal
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:
86
5. Huruf a sampai dengan z merupakan karakter ASCII. Misalkan huruf
a bernilai 97, b bernilai 98 dan begitu seterusnya. Buatlah program
dimana jika kita mengetikkan huruf a pada layar monitor, program
tersebut dapat mengkonversinya menjadi 97, jika mengetikkan b
maka yang tampil di monitor adalah 98 begitu seterusnya sampai
dengan z.
87
BAB VII
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.
88
Pada board Arduino terdapat dua jenis interrupt: interrupt eksternal
dan interrupt perubahan pin.
Interrupt eksternal
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.
89
ISR: merupakan fungsi yang dipanggil ketika interrupt eksternal
selesai
90
Perlu dipahami bahwa fungsi delay() di dalam interrupt tidak berlaku
dan untuk melewatkan data antara ISR dengan program utamanya,
variabel dideklarasikan sebagai volatile. Supaya lebih jelas, perhatikan
contoh berikut:
int i;
Pada fungsi void loop(), diisi oleh looping for untuk menampilkan
angka dari 0 sampai dengan 9. Berikut adalah sintaksnya:
for(i=0;Serial.print(“baris: “), Serial.println(i+1),i<10;i++){
Serial.print(“nilai i: “);
Serial.println(i);
91
Selanjutnya memasukkan interruptnya, Led pada pin 13 Arduino Uno
akan menyala jika interrupt terjadi:
digitalWrite(LedPin, keadaan);
keadaan=HIGH;
Serial.println(“Interrupt”);
92
Gambar 7.2. Rangkaian Arduino Uno untuk interrupt
B. Pointer
Pointer merupakan variabel yang special, jika pada variabel biasa
data disimpan pada lokasi tertentu di memori tapi pointer tidak hanya
menyimpan data dengan lokasi penyimpanannya tapi juga dapat
memegang alamat pada memori pointer tersebut disimpan. Artinya
kita dapat mengakses variabel tersebut, cara mengaksesnya yaitu
menggunakan operator ampersand &. Sebagai contoh jika suatu
variabel bernama x, alamat variabel tersebut diperoleh dengan
menuliskan &x. Untuk lebih jelasnya perhatikan contoh berikut:
int nomer=4;
int *a;
int hasil=0;
a=&nomer;
hasil=*a;
93
pertama kita mendeklarasi variabel bernama nomer bertipe data
integer, nilainya 4.
Kemudian kita mendeklarasikan pointer bertipe data integer, namanya
adalah a. Perhatikan tanda * sebelum nama pointernya, tanda ini wajib
ditempatkan sebelum nama pointer karena secara langsung kita
membuat pointer.
Pada baris ke-3 kita mendeklarasikan variabel bernama hasil dengan
tipe integer, nilainya adalah 0.
Pada baris ke-4, kita menuliskan operator ampersand (&) sebelum
variabel nomer. Kemudian nilai ini diberikan ke pointer a. Artinya nilai
pointer a adalah alamat memori dari variabel nomer.
Pada baris ke-5, tanda asterik * ditempatkan sebelum pointer a, artinya
kita mengambil nilai yang ada pada alamat memori pada variabel
nomer. Maka nilai variabel hasil sekarang adalah sama dengan nilai
variabel nomer yaitu sebesar 4.
94
1. Pointer digunakan untuk melewatkan data menggunakan
referensi, karena tidak diperlukan mencopy data. Data
didapatkan cukup hanya dengan menuliskan nama variabel
2. Pointer biasanya digunakan untuk alokasi memori yang
dinamis, sebagai contoh diaplikasikan untuk array dengan
ukuran tak terbatas
3. Pointer sangat berguna untuk mengkonversi tipe data yang
berbeda menjadi byte.
byte byteEeprom2=*(pointerAngka+1);
byte byteEeprom3=*(pointerAngka+2);
byte byteEeprom4=*(pointerAngka+3);
EEPROM.write(0, *pointerAngka);
EEPROM.write(1, *(pointerAngka+1));
EEPROM.write(2, *(pointerAngka+2));
EEPROM.write(3, *(pointerAngka+3));
95
Soal
96
PROYEK
97
JAWAB
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();
//3. Kondisi ketiga: LED Berjalan dari LED1 ke LED5 delay 3000
kondisi_ketiga_berjalan_kekanan();
98
//5. Kondisi kelima: LED1,3,5 menyala bersama 500 milisekon,
dan Led2,4 menyala bersama selama 500 ms. bergantian 4x siklus
kondisi_kelima_flipflop();
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
99
}
//ganjil
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay (500);
100
//genap
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay (500);
//ganjil
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay (500);
//genap
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay (500);
//ganjil
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
delay (500);
//genap
digitalWrite(LED2, HIGH);
digitalWrite(LED4, HIGH);
delay (500);
101
DAFTAR PUSTAKA
102
LAMPIRAN
103
Fungsi-fungsi pada LCD
lcd.setCursor(kolom, baris)
lcd.setCursor (4,0);
lcd.setCursor(0,1);
lcd.write() : fungsi ini untuk menulis text dengan tipe data yang
berbeda
lcd.print(“TEKKOM”);
104
jika kita ingin menampilkan text tersebut pada baris
kedua di LCD dan kolom ke-3 maka sintaksnya sebagai
berikut:
lcd.setCursor(2,1);
lcd.print(“TEKKOM”);
lcd.print(567);
lcd.print(100, HEX);//ditampilkan 64
105
lcd.blink() : fungsi ini untuk membuat kursor terlihat lalu hilang,
terlihat lagi dan hilang. Begitu seterusnya, delaynya
dalah 500 milisekon. Untuk membuatnya tidak kedap-
kedip maka digunakan fungsi lcd.noBlink()
UNWIR
RIWNU
106