ARDUINO
Muhammad Pauzan
Penerbit K-Media
Yogyakarta, 2020
BAHASA PEMROGRAMAN ARDUINO
vi + 106 hlm.; 14 x 20 cm
ISBN: 978-602-451-777-9
©
Copyright 2020 by Penerbit K-Media
All rights reserved
Penerbit K-Media
Anggota IKAPI No.106/DIY/2018
Banguntapan, Bantul, Yogyakarta.
e-mail: kmedia.cv@gmail.com
i
KATA PENGANTAR
Muhammad Pauzan
3
DAFTAR
ISI
4
Tipe data array ................................................................22
PROYEK ........................................................... 97
DAFTAR PUSTAKA .......................................... 102
LAMPIRAN ..................................................... 103
5
vi
BAB I Bahasa C
Arduino
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
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;
3
a = b + c;
a = 4 + 5;
a = 9;
4
- Operator Precedence
Misalkan terdapat statemen dengan beberapa ekspresi
sebagai berikut:
j = 5 + k * 2;
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;
}
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:
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:
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
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:
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:
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
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
Elektronika_lanjut
hari1
2
sedangkan penulisan nama variabel yang salah adalah:
^teknik Fisika-
Dasar
Elektronika_lanjut?
1hari
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
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
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(){
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.
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];
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
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
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();
3
Jika salah maka tubuh fungsi if diskip dan menjalankan statemen
lain, pada kasus ini adalah memanggil fungsi lakukanYangLain().
3
Gambar 3.1. Board Arduino dirangkai LED
3
/*
Program LED kedap kedip
Oleh Muh Pauzan
*/
//memberikan nama pada tiap pin LED dan tidak diperbolehkan
untuk mengubahnya
void setup() {
void loop(){
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
}
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
3
delay(1000);
}
if (keadaan==4){
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
delay(1000);
}
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);
}
}
}
penulisan lainnya
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
berikut;
int c = 5;
int k;
k = c++; //operator paska-meningkat
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:
}
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;
}
4
Tabel 3.3. Preprosesor direktif
4
const int LED1 = 10 ;
4
Soal-Soal
4
BAB IV
Program
Loop
4
A. Loop for
Sintaks dari loop for
adalah:
for (ekspresi1;ekspresi2;ekspresi3) {
4
}
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.
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() {}
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) {
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);
5
Berdasarkan listing program di atas, meskipun nilai k berlogika
salah terhadap loop while tapi program loop tetap dijalankan
meskipun cuma sekali.
5
if (angka==MAXTONGDIUKUR) //reset sehingga tetap di loop
angka = 0;
}
tambahBahan(angka);
6
if (angka < MAXTONGDIUKUR) {
angka++;
} else {
angka = 0;
}
}
6
Soal-Soal
6
BAB V Fungsi di
Arduino
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;
gantiBaju; wudhu;
pergiKeMasjid;
shalat;
pulangDariMasjid;
gantiBaju;
6
}
6
Mendefinisikan dan mendeklarasi fungsi harus dilakukan
sebelum memanggilnya. Di IDE Arduino, mendefinisikan fungsi
di dalamnya juga termasuk mendeklarasikannya. Perhatikan
contoh berikut:
//mendefinisikan fungsi
6
void loop() {
}
6
//mendefinisikan fungsi bernama NamaSaya()
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
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
}
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;
}
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
Jelaskan. Jawab
݈×ܮ =
Rumus ralat luas menggunakan persamaan untuk perambatan
ralat:
߲ܮ ଶ ߲ܮ
ଶ
Δ = ܮඨ൬ Δ +൬
Δ݈ ൰
൰ ◌݈
߲݈
߲
ଶ
߲(
݈ ߲( ݈ ) ଶ
) Δ = ܮඨ൬ Δ + ൬ ߲ Δ݈ ൰
߲
൰ ݈
ଶ
߲ ◌݈
߲݈
Δ = ܮඨ൬
൬݈ ଶ + ൬ Δ݈ ൰
߲݈
◌݈
Δ
൰
߲
Δ = ܮඥ(݈Δ)ଶ + (Δ݈)ଶ
7
Jadi rumus untuk Luas adalah:
݈×ܮ =
7
Δ = ܮඥ(݈Δ)ଶ + (Δ݈)ଶ
7
hasil2=((lebar*ralatPanjang)*(lebar*ralatPanjang)) +
((panjang*ralatLebar)*(panjang*ralatLebar));
hasil2=sqrt(hasil2);
return hasil2;
}
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))
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);
8
Soal-Soal
8
BAB VI
int nilaiSaya[4];
int pinSaya[]=[5, 4, 9, 1];
int nilaiBulat[6]=[2, 5, 1, 4, 9, 8];
char pesan[6]=”hello”;
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:
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() {
}
x=arraySaya[3];
}
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:
}
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() {
}
7
Listing 6.5. string yang lebih ringkas
void setup(){
char stringSaya[]=”Hallo”;
Serial.begin(9600);
Serial.println(stringSaya);
}
void loop() {
}
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:
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() {
7
sebaliknya yaitu menggunakan fungsi toLowerCase(), ada
masih banyak lagi yang lainnya. Berikut dituliskan cara
mengubah String menggunakan fungsi:
namaVariabel.fungsi();
7
startsWith() =satu string mulai dengan karakter spesifik
yang berurutan
substring() =mencari substring di dalam String
toCharArray() =merubah dari String ke array karakter
void loop() {
// put your main code here, to run repeatedly:
}
7
Gambar 6.6. Memberikan fungsi toUpperCase() pada String
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:
7
Serial.println)stringKu);
}
void loop() {
// put your main code here, to run repeatedly:
}
namaString.replace(“kataLama”, “kataBaru”);
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:
void loop() {
// put your main code here, to run repeatedly:
}
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
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);.
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;
}
}
}
}
8
if ((terimaByte>='0')&&(terimaByte<='9')){
terimaString+=terimaByte;
}
else if (terimaByte=='\n'){
if(bukanAngka){
Serial.println("Bukan suatu angka");
}
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
9
60 27
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 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
9
attachInterrupt(digitalPinToInterrupt(pin), ISR,
mode)
9
ISR: merupakan fungsi yang dipanggil ketika interrupt
eksternal selesai
int i;
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);
keadaan=HIGH;
Serial.println(“Interrupt”);
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:
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 byteEeprom2=*(pointerAngka+1);
byteEeprom4=*(pointerAngka+3);
EEPROM.write(0, *pointerAngka);
EEPROM.write(1, *(pointerAngka+1));
EEPROM.write(2, *(pointerAngka+2));
EEPROM.write(3, *(pointerAngka+3));
1
Soal
1
PROYEK
1
Catatan: HARUS menggunakan fungsi untuk kelima kondisi di
atas.
1
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();
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();
digitalWrite(LED1, HIGH);
digitalWrite(LED3, HIGH);
digitalWrite(LED5, HIGH);
1
}
//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
different-data-types-to-byte s/
Diakses pada 7 Januari 2020
1
LAMPIRAN
1
Fungsi-fungsi pada
LCD
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
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.