Saturday 25 June 2016

Dasar Pemrograman C++ Pada Arduino

Dasar Pemrograman C++ Pada Arduino
Pembahasan:
● Struktur Dasar Pemrograman pada Arduino
● Komentar
● Identifier
● Konstanta
● Variabel
○ Tipe Data
○ Variabel Global
○ Variabel Lokal
● Operator
● Percabangan
● Pengulangan

Dasar Pemrograman C++  Pada Arduino
Target:
● Memahami dasar-dasar pemrograman pada Arduino
● Memahami dasar-dasar pemrograman C++
● Dapat menggunakan percabangan, pengulangan pada bahasa pemrograman C++

Pendahuluan
● Pada bagian ini akan dijelaskan mengenai dasar-dasar pemrograman
Arduino (C++)
● Untuk mempelajari bahasa pemogramaan C++ dapat mengunjungi
link berikut 
http://www.cplusplus.com/files/tutorial.pdf

Struktur Dasar
● Pemrograman pada Arduino selalu dilakukan dengan menyertakan
dua fungsi utama yaitu void setup() dan void loop()
fungsi utama pada pemrograman Arduino
void setup() {
}
void loop() {
}

Struktur Dasar (cont’d)
● Kedua fungsi yang disebutkan sebelumnya harus disertakan pada
saat pemrograman, meskipun di dalam fungsi tidak terdapat kode
program untuk dieksekusi
● Apabila tidak disertakan, maka akan terjadi error pada saat proses
compile (penerjemahan kode program ke bahasa mesin) program

Komentar
● Fitur bahasa pemograman yang dapat digunakan untuk membuat
dokumentasi pada kode program yang dibuat
Contoh penulisan komentar
Cara 1
//Kalimat ini adalah komentar
Cara 2
/*
Kalimat ini
adalah
komentar
*/

Identifier
● Identifier digunakan sebagai pengenal/identitas dari variabel,
konstanta, fungsi, structure, maupun class agar compiler dapat
membedakan antara satu dengan yang lainnya
Contoh penggunaan identifier
#define A 5
long 
B = 2;
void 
setup() {
Serial.begin(9600);
}
void 
loop() {
}

Identifier (cont’d)
● Pada contoh sebelumnya, dua buah identifier yaitu setup dan loop
digunakan sebagai nama fungsi, sedangkan dua buah identifier
lainnya digunakan sebagai nama konstanta (A) dan nama variabel (B)
● Aturan penulisan identifier pada bahasa C/C++ adalah sebagai
berikut:
○ Bersifat case sensitive, A dan a dianggap berbeda
○ Tidak dapat diawali dengan karakter angka
○ Tidak dapat menggunakan karakter space
○ Tidak dapat menggunakan karakter simbol (#, @, ?, !, $, %, &, *, dll.)
○ Tidak dapat mengguakan kata kunci yang telah digunakan oleh C/C++
ataupun oleh Arduino IDE
○ Hindari penggunaan nama identifier yang sama dengan nama identifier
yang sebelumnya telah digunakan

Konstanta
● Konstanta digunakan untuk menyimpan nilai tetap yang nantinya tidak
dapat diubah pada saat program dieksekusi
● Salah satu kegunaannya adalah untuk menentukan nilai yang bersifat
tetapan seperti nilai pi (Ṑ), kecepatan suara, batas pembacaan nilai
sensor (sebagai contoh panas didefinisikan dengan nilai 55), batas
pengulangan, dll.
● Konstanta dapat dibuat dengan dua cara, yaitu menggunakan
preprocessor directive #define ataupun menggunakan kata kunci
const

Konstanta (cont’d)
Contoh penggunaan preprocessor directive #define
#define MOTOR 5
void setup() {
pinMode(MOTOR, OUTPUT);
}
void loop() {
digitalWrite(MOTOR, HIGH);
}

● Contoh penggunaan #define adalah seperti di bawah
Apabila terdapat revisi pada rangkaian hardware, yaitu pin yang digunakan untuk
menggendalikan motor bukan lagi pin 5, kita hanya perlu mengubah nilai dari baris
konstanta MOTOR.
Konstanta (cont’d)
● Contoh penggunaan const adalah seperti di bawah
Contoh penggunaan kata kunci const
const byte MAX = 5 ;
void setup() {
Serial.begin(9600);
}
void loop() {
for(unsigned char i = MAX; i > 0; i--)
Serial.print("hello");
}

Apabila terdapat revisi pada program, yaitu jumlah pengulangan yang dilakukan bukan
lagi 5 kali, kita hanya perlu mengubah nilai dari baris konstanta MAX.

Variabel
● Variabel merupakan sebuah lokasi pada memori yang digunakan
untuk penyimpanan data/nilai yang dapat diubah
● Variabel dibedakan berdasarkan ruang lingkupnya, yaitu global atau
lokal
Contoh proses deklarasi variabel
//cara 1
tipe_data identifier;
//cara 2
tipe_data identifier = nilai;
//cara 3
tipe_data identifier1, identifier2;
//cara 4
tipe_data identifier1 = nilai1, identifier2 = nilai2;

Variabel Global
● Sebuah variabel global akan dikenali oleh semua bagian program
● Variabel global dapat dibuat dengan mendeklarasikannya di luar
semua fungsi yang ada
Contoh deklarasi variabel global
byte readSensor;
void setup() {
}
void loop() {
}

Variabel Global (cont’d)
● Keleluasaan pengaksesan oleh semua fungsi yang ada pada program
merupakan kelebihan kelebihan dari variabel global, namun hal
tersebut juga sekaligus menjadi kekurangan
● Apabila kode program menjadi sangat panjang dan kompleks, maka
keleluasaan pengaksesan tersebut akan menjadi salah satu sumber
error/bug, dimana proses pelacakan error akan sulit dilakukan apabila
seluruh bagian kode program dapat mengakses variabel tersebut
● Berdasarkan alasan tersebut maka hendaknya penggunaan variabel
global harus dibatasi dan jika memang benar-benar diperlukan

Variabel Lokal
● Seperti namanya, variabel lokal merupakan variabel yang hanya
dapat diakses pada lingkup lokal, yaitu di dalam sebuah fungsi
tertentu saja
Contoh deklarasi variabel lokal
void setup() {
byte angka1;
}
void loop() {
byte angka2;
}
Variabel angka1 hanya akan dikenali pada fungsi void setup(), sedangkan variabel
angka2 hanya akan dikenali pada fungsi void loop(). Pengaksesan variabel angka1
pada fungsi void loop() akan mengakibatkan error, demikian juga sebaliknya.

Tipe Data
● Variabel memiliki tipe data yang akan digunakan oleh compiler untuk
mengetahui jenis data yang disimpan
Tipe Data Ukuran Memori Rentang Nilai
boolean 8-bit true/false
byte 8-bit 0 - 255
char 8-bit -128 - 127
unsigned char 8-bit 0 - 255
word 16-bit 0 - 65,535
int 16-bit -32,768 - 32,767
unsigned int 16-bit 0 - 65,535
long 32-bit -2,147,483,648 - 2,147,483,647
unsigned long 32-bit 0 - 4,294,967,295
float 32-bit -3.4028235E+30 - 3.4028235E+38

Operator
● Simbol atau karakter pada program yang digunakan untuk melakukan
suatu operasi atau manipulasi
● Pada program, seringkali kita membutuhkan sebuah solusi dimana
solusi tersebut dihasilkan dari operasi dari satu atau beberapa
variabel/operand
● Bahasa C++ memiliki beberapa jenis operator yaitu:
○ Assignment
○ Arithmetic
○ Increase dan decrease
○ Relational dan equality
○ Logical
● Masing-masing operator memiliki tingkat eksekusi yang berbedabeda, sebagai contoh operator * (perkalian) akan didahulukan dari
operator + (penjumlahan)

Assignment
● Operator yang digunakan untuk menentukan nilai sebuah variabel
Contoh penggunaan operator assignment
//nilai 5 diisikan ke variabel a
a = 5;
//nilai variabel b diisikan ke variabel a
a = b;
//hasil penjumlahan nilai variabel a dan angka 7 diisikan ke
//variabel b
b = a + 7;
//nilai 5 diisikan ke variabel c, kemudian nilai variabel c
//diisikan ke variabel b, kemudian nilai variabel b diisikan ke
//variabel a
a = b = c = 5
Pembacaan operator assignment dilakukan dari kanan ke kiri

Arithmetic
● Operator yang digunakan untuk membuat ekspresi matematis pada
kode program

Simbol Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Modulo (hasil bagi dari 2 bilangan)


Increase dan Decrease
● Operator penambah atau pengurang nilai pada variabel
● Operator increase dilambangkan dengan ++, sedangkan operator
decrease dilambangkan dengan --
increase dan decrease
//kesamaan operator increase
a = a + 1;
a++;
//kesamaan operator decrease
a = a - 1;
a--;

Increase dan Decrease (cont’d)
● Operator increase dan decrease dapat dituliskan sebagai prefix atau
suffix sebuah variabel

Prefix dan suffix untuk operator increase dan decrease
b = 3;
a = b++;
//nilai a = 3, nilai b = 4
b = 3;
a = ++b;
//nilai a = 4, nilai b = 4
Suffix: nilai variabel akan ditambah setelah menemui operator increase
Prefix: nilai variabel akan ditambah sebelum menemui operator increase


Relational dan Equality
● Operator yang digunakan untuk membandingkan nilai dari dua
ekspresi pemrograman
● Hasil dari operator relational dan equality adalah nilai boolean yaitu
true atau false

Simbol Keterangan
==           Sama dengan
!=            Tidak sama dengan
>             Lebih dari
<             Kurang dari
>=           Lebih dari atau sama dengan
<=           Kurang dari atau sama dengan

Relational dan Equality (cont’d)
● Contoh penggunaan dari operator relational dan equality adalah
seperti di bawah
Contoh penggunaan operator relational dan equality
(7 == 5) //false
(5 > 4) //true
(13 < 2) //false
(2 < 2) //false
//anggap nilai a = 4, b = 5, c = 6
(a == 5) //4 tidak sama dengan 5, false
(a * b > 7) //20 lebih dari 7, true
(b - 3 < 5) //2 kurang dari 5, true

Logical
● Operator yang digunakan untuk melakukan operasi logika pada
program
Simbol Keterangan
! NOT
&& AND
|| OR

Logical (cont’d)
● Contoh penggunaan operator logical adalah seperti di bawahtoh penggunaan operator logical
!(17 < 6) //!false, memberikan hasil true
!(12 >= 12) //!true, memberikan hasil false
((5 == 5) && (7 < 5)) //(true && false) memberikan hasil false
((7 < 5) || (13 > 6)) //(false || true) memberikan hasil true

Percabangan
● Pada pemrograman pasti akan dijumpai keadaan dimana program
harus memilih kode program mana yang akan dieksekusi sesuai
dengan kondisi yang didapatkan
● Pada pemrograman C/C++ percabangan dapat dilakukan
menggunakan dua buah struktur sintaks yaitu if...else dan
switch...case
Contoh kebutuhan pemilihan tindakan berdasarkan sebuah kondisi
jika suhu ruangan panas
- maka kipas angin dinyalakan
jika suhu ruangan dingin
- maka kipas angin dimatikan
if...else
Contoh struktur penulisan if...else
if(kondisiLogika1) {
...
}
else if(kondisiLogika2) {
...
}
else {
...
}

else if dan else bersifat opsional. else if diletakkan setelah if, sedangkan else
diletakkan setelah if atau else if (jika ada).
Penulisan kondisi logika dilakukan dengan memanfaatkan operator relational dan
equality. Sebagai contoh adalah A * 5 < 18. Apabila tidak digunakan operator
relational dan equality, maka secara default kodisi tersebut dibandingkan dengan nilai
true (== true).

else if dan else bersifat opsional. else if diletakkan setelah if, sedangkan else
diletakkan setelah if atau else if (jika ada).
Penulisan kondisi logika dilakukan dengan memanfaatkan operator relational dan
equality. Sebagai contoh adalah A * 5 < 18. Apabila tidak digunakan operator
relational dan equality, maka secara default kodisi tersebut dibandingkan dengan nilai
true (== true).

If...else (cont’d)Co
ntoh penggunaan if...else
int angka = 0;
void setup(){
Serial.begin(9600);
if(angka > 0) {
Serial.println ("bilangan positif");
}
else if(angka < 0) {
Serial.println ("bilangan negatif");
}
else {
Serial.println ("angka 0");
}
}
void loop(){
}

switch...case
Contoh struktur penulisan switch...case
switch(kondisi) {
case nilai1:
...
break;
case nilai2:
...
break;
default:
...
break;
}

Program akan mengeksekusi ekspresi, yaitu kondisi yang ada pada switch. Nilai dari
eksekusi kondisi akan dibandingkan dengan nilai konstanta pada case pertama, yaitu
nilai1. Jika nilai kondisi sama degan nilai1, maka kode program yang ada dalam
case pertama akan dieksekusi. Jika tidak, maka pemeriksaan akan dilanjutkan ke case
berikutnya. Apabila nilai pada case tidak ada yang sesuai dengan nilai hasil eksekusi
kondisi, maka kode program yang ada pada bagian default akan dieksekusi.

switch...case (cont’d)ntoh struktur penulisan switch...case
int hari = 2;
void setup(){
Serial.begin(9600);
switch(hari) {
case 1:
Serial.println("hari senin");
break;
case 2:
Serial.println("hari selasa");
break;
default:
Serial.println("hari rabu");
break;
}
}
void loop(){
}

Pengulangan
● Kode program secara umum bersifat sekuensial, yaitu dieksekusi dari
atas ke bawah
● Ada kalanya pada program kita menghendaki suatu bagian kode
program dieksekusi berulang dengan batasan yang kita tentukan
Contoh penulisan kode program yang tidak efisien
int a;
void setup() {
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
a = a + 7;
}

Pengulangan (cont’d)oh penulisan kode program menggunakan pengulangan for
int a;
void setup() {
for(byte i = 0; i < 7; i++){
a = a + 7;
}
}
Nilai a akan ditambah dengan angka 7 sebanyak 7 kali. Jika dibandingkan dengan contoh
sebelumnya, penulisan ini terlihat lebih rapi dan terstruktur.

forontoh struktur penulisan for
word a;
void setup() {
//struktur for memiliki 3 parameter yang dapat diisi
//parameter pertama , deklarasi variabel pembatas pengulangan
//parameter kedua , kondisi yang akan diperiksa sebelum
//pengulangan dilakukan
//parameter ketiga , bagian increment atau decrement untuk
//variabel pembatas
for(int i = 0; i < 7; i++) {
a = a + 7;
}
}



5 comments:

Mengakses LCD 16x2 dengan Arduino

    Pada postingan sebelumnya kita sudah membahas tentang mengakses lcd 16x2 dengan atmega16. Kali ini saya akan berbagi tutorial cara menga...