Tutorial Arduino #1: Dasar Pemrograman C pada Arduino 0

Agung Dwi Prasetyo | 11.03.00 |

Pada tutorial yang pertama ini saya akan membahas pengetahuan dasar pemrograman bahasa C pada Arduino. Seperti yang kita tahu bahwa Arduino merupakan sebuah modul mikrokontroler dengan port input dan output yang diprogram menggunakan bahasa C khusus Arduino dan bisa juga dengan bahasa lainnya (seperti Java). Modul Arduino terdiri dari beberapa tipe, yang membedakan hanya fitur-fiturnya saja sedangkan dari segi pemrograman sama saja. beberapa tipe modul tersebut antara lain Arduino Uno, Arduino Leonardo, Arduino Due, dll. 


Kelebihan Modul Arduino antara lain:
1. Mudah digunakan, cocok sekali untuk pemula
2. Fungsi Library (code program tinggal pakai) untuk mengakses hardware sangat banyak.

Untuk instalasi modul Arduino pada PC dapat dilihat pada postingan sebelumnya disini

Berikut akan dibahas tentang pengenalan bahasa C untuk Arduino. Bagi yang sudah terbiasa dengan bahasa C pada umumnya (ANSI-C) tidak akan kesulitan untuk mempelajari bahasa C Arduino karena pada umumnya sintaks-sintaksnya hampir sama.

Pengenalan bahasa C sebagai bahasa pemrograman
Semua bahasa pemrograman terdiri dari:
  • Ekspresi
  • Statemen
  • Blok statemen
  • Blok fungsi
Ekspresi adalah kombinasi operand dan operator, contoh 4+7, x>y, x!=z, dll. 4, 7, x, y, z adalah operand sedangkan +, >, dan != adalah operator.
Statemen adalah instruksi lengkap dalam bahasa C yang harus diakhiri dengan tanda titik koma (;). Contoh x=y+4;
Blok statemen adalah kumpulan-kumpulan statemen yang berada dalam satu kurung kurawal. Biasanya blok statemen ini berada dalam perintah logika IF atau dalam perulangan (looping). Contoh IF(x>0){x=x+5; print("x adalah positif"); }
Blok fungsi  adalah satu blok kode yang melakukan tugas tertentu atau satu blok instruksi yang dieksekusi ketika dipanggil dari bagian lain dalam suatu program.

Statemen dan ekspresi C arduino identik dengan ANSI-C. Struktur program C Arduino minimal terdiri dari dua fungsi yaitu setup() dan loop().
Fungsi setup() dijalankan pertama  kali  setiap board  arduino dihidupkan sedangkan fungsi loop() dijalankan terus menerus selama board arduino hidup. Pada program standar ANSI-C  fungsi yg pertama dijalankan adalah fungsi main() sedangkan pada C Arduino  adalah fungsi setup().
Berikut ini struktur minimal C Arduino:
//setup digunakan untuk inisialisasi variable, mode pin (Input atau Output), dll
void setup() 
{
   statement1;
   statement2;
...
} 

void loop()
{ 
   statement1;
   statement2;
...
}


Contoh program untuk membuat lampu led nyala-mati secara periodik:
//inisialisasi variabel yang akan digunakan
int led = 13;   //dalam hal ini led menjadi variabel dengan nilai 13
                //13 ini akan digunakan sebagai pin input/output dari arduino
                //yang dihubungkan ke lampu led
//setup dijalankan sekali saat arduino direset
void setup(){
   pinMode(led,OUTPUT);  //variabel led dengan pin nomor 13 merupakan output 
}

//loop melakukan eksekusi berulang
void loop(){
   digitalWrite(led,HIGH);  //HIGH berarti led menyala
   delay(100);              //selang waktu nyala-mati (dalam mikrosekon)
   digitalWrite(led,LOW);   //LOW berarti led mati
   delay(100);              //selang waktu mati-nyala (dalam mikrosekon)
}
*ket: tanda "//" merupakan baris komentar. Satu baris komentar tidak akan ikut dieksekusi dalam program


Variabel dan Konstanta
Variabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah. Variabel disimpan di dalam RAM.
Konstanta adalah memori penyimpanan data yang nilainya tidak dapat dirubah setelah program di-compile. Konstanta disimpan di memory program.

Variabel Scope
Variabel dan konstanta global dapat diakses di seluruh bagian program.
Variabel dan konstanta lokal hanya dapat diakses di dalam fungsi tempat dideklarasikannya.

Tipe Data 
Arduino C mendukung sebagian besar tipe data ANSI C dengan beberapa pengecualian. Variabel adalah sebuah atau beberapa lokasi memori yang diberi nama. Ketika anda mendefinisikan variabel Anda juga harus memberitahu compiler jenis data variable tersebut. Tipe data dari variabel penting karena untuk menentukan berapa banyak byte memori yg disediakan untuk variabel itu, dan jenis data yang dapat disimpan dalam variabel. Tipe data ini untuk mendeklarasikan variabel.



OPERATOR DAN EKSPRESI
  • Operator Penugasan ( “=” )
Setelah variabel telah dideklarasikan, operasi dapat dilakukan pada variable menggunakan operator penugasan (=). Sebuah nilai yang diberikan untuk variabel dapat berupa sebuah konstanta, variabel, atau ekspresi. Sebuah ekspresi dalam bahasa C adalah kombinasi dari operand (pengidentifikasi) dan operator. Operator penugasan antara lain sebagai berikut:
int nilai;
int x;
nilai = 13;
x=nilai;
  • Operator Aritmetika
Terdiri dari:
Penjumlahan (+)
Pengurangan atau Negasi (-) 
Perkalian (*)
Pembagian (/)
Modulo (%) 
  • Operator Logika
AND  ( && )
OR    ( || )
sama dengan   ( == )
tidak sama dengan   ( != )
lebih kecil    ( < )
lebih kecil atau sama dengan    ( <= )
lebih besar   ( > )
lebih besar atau sama dengan    ( >= ) 
  • Increment dan Decrement
++x atau x++ disebut increment, artinya nilai x=x+1 (nilai x bertambah satu dari nilai x sebelumnya).
Perbedaan antara ++x dengan x++ yaitu untuk ++x tambahkan dulu nilai x dengan 1 setelah itu di proses baris kode tersebut, sedangkan x++ proses dulu baris kode setelah itu tambahkan nilai x dengan 1.
 --y atau y-- disebut decrement, artinya nilai y=y+1 (nilai y berkurang satu dari nilai y sebelumnya).
Perbedaan antara --y dengan y-- yaitu untuk --y kurangkan dulu nilai y dengan 1 setelah itu di proses baris kode tersebut, sedangkan y-- proses dulu baris kode setelah itu kurangkan nilai y dengan 1. 
  • Compound
Compound digunakan hanya untuk menyingkat baris expresi saja.Contohnya: 
X+= 3; artinya X = X + 3
X-= 3; artinya X = X – 3
X*= 3; artinya X = X * 3
X/= a; artinya X = X / a
X |= 3; artinya X = X OR 3
X &= 3; artinya X = X AND 3
X ^= 3; artinya X = X ^ 3
X &= 3; artinya X = X & 3


Fungsi
Fungsi adalah sebuah blok statement yang melaksanakan tugas tertentu dan bisa dipakai lebih dari 1 kali di dalam program. Program bahasa C terdiri dari fungsi-fungsi dan sebuah program C minimal terdiri dari 1 fungsi .Pada C Arduino fungsi setup() dijalankan pertama kali saat program dijalankan. Fungsi terdiri dari dua bagian utama yaitu kepala fungsi dan blok fungsi. Berikut ini bentuk umum sebuah fungsi:
(type) nama_fungsi( (type) parameter)
{
   statement;
...
   return (value);
}
Kepala fungsi terdiri dari type return value, nama fungsi, serta type dan nama parameter. Type pada kepala fungsi merupakan tipe data (dalam hal ini int, float, atau double). Statement di blok fungsi menyatakan apa yang fungsi harus lakukan. Jika return value atau parameter tidak ada maka type-nya ditulis void seperti dibawah ini:

void nama_fungsi()
{
   statement;
...
}


Library
Library adalah kumpulan fungsi-fungsi khusus yang sudah disediakan oleh bahasa pemrograman C. Library ini biasanya berekstensi *.h dan dalam pemanggilannya digunakan sintaks #include <*.h>. Library ini juga diletakkan pada header dari source code. Sebagai contoh:

#include <NewPing.h>    //mengimport library NewPing.h

void setup() {... }

void loop() {... }
Biasanya ada beberapa library yang tidak disediakan secara default oleh modul Arduino dan harus mendownloadnya sendiri melalui situs web Arduino atau mencari di Google. Untuk mendownload library lainnya dapat dilakukan di https://www.arduino.cc/en/Reference/Libraries
 

Control Statement
Semua control statement pada bahasa C Arduino sama dengan bahasa C pada umumnya.
  • WHILE Loop
while(expression)  //selama expresi bernilai true laksanakan perulangan blok 
{                  //statemen dibawahnya (dalam kurung kurawal)
   statement1;
   statement2;
...
}
atau jika statemen hanya 1 baris, statemen tidak perlu diberi tanda kurung kurawal { }

while(expression)
   statement;
  • DO/WHILE Loop
do                  //jalankan statement dibawah (dalam kurung kurawal)
{                   //minimal 1 kali perulangan dilaksanakan
   statement1;
   statement2;
...
}
while(expression);   //jika expresi true, jalankan kembali perulangan
atau jika statemen hanya 1 baris

do
   statement;
while(expression);
  • FOR Loop
for(expr1; expr2; expr3)
{
   statement1;
   statement2;
...
}
//* expr1 dievaluasi hanya satu kali sebelum mulai looping
//* expr2 merupakan ekspresi boolean. Jika tidak dituliskan diasumsikan bernilai 
//     true
//* jika expr2 bernilai false maka proses looping dihentikan
//* jika expr2 bernilai true maka statement1, statement2, dan yang berada dalam
//     kurung kurawal dieksekusi
//* setelah eksekusi statement-statement yang berada dalam kurung kurawal maka 
//     expr 3 dieksekusi
Contoh program

for(int i=0; i<5; i++)
{
   Serial.print("Hello World! \t");
   Serial.println(i);
}
Maka output dari potongan program diatas yaitu:

Hello World!    0
Hello World!    1
Hello World!    2
Hello World!    3
Hello World!    4
Dapat dilihat dari potongan program diatas terjadi 5 kali pengulangan. Dalam hal ini variabel i bertindak sebagai iterator. Mula-mula i bernilai 0 kemudian diincrement sampai nilainya kurang dari 5. Ketika i bernilai 5 maka ekspresi boolean pada looping bernilai false sehingga proses looping berhenti.
  •  IF/ELSE
if(expression) //jika ekspresi bernilai true laksanakan blok statemen setelah if
{              
   statement1;
   statement2;
...
}
else         //jika ekspresi pada if diatas bernilai false maka laksanakan blok  
{            //statemen pada bagian else disini
   statement3;
   statement4;
...
}
  • BREAK, CONTINUE, dan GOTO
Break, Continue, dan GoTo statement digunakan untk merubah alur eksekusi untuk statement pengulangan FOR, WHILE, DO/While, dan IF/ELSE.

BREAK
Break statement digunakan untuk keluar dari pengulangan FOR, WHILE, DO/WHILE, atau switch. BREAK keluar daru blok pengulangan dimana dia beada saja.

CONTINUE
Continue akan menyebabkan program memulai iterasi berikutnya dari statemen pegulangan WHILE. DO/WHILE, atau FOR loop. CONTINUE sama seperti BREAK pengulangan akan berhenti pada point yang dituju (di skip), bedanya CONTINUE akan memulai loop lagi dari atas, sedangkan BREAK memaksa keluar dari loop/pengulangan.

Contoh program

void setup(){
Serial.begin(9600);
pinMode(led,OUTPUT);
}
void loop()
{
int i=0;
for(i; i<10; i++)
   {
      if(i<=1)
         continue;
      if(i==8)
         break;
      Serial.println(i);
   }
}
Maka output dari program diatas yaitu

2
3
4
5
6
7


Structures, Union, dan Data Storage

void setup()
{
   pinMode(int pin, int mode);
}
Potongan program diatas memerintahkan apakah pin akan diset sebagai digital input atau output. Mode berupa Input atau Output.
  • Digital Input/Output
int digitalRead (int pin);
Program diatas untuk membaca nilai dari pin digital. Nilai yang diperoleh dapat berupa 1 atau 0 (1 untuk HIGH dan 0 untuk LOW).

digitalWrite (int pin, int value);
Program diatas untuk menulis nilai ke pin digital. Nilai dari value yang ditulis yaitu berupa 1 atau 0 (1 untuk HIGH dan 0 untuk LOW).
  • Analog Input/Output

int analogRead (int pin);
Program diatas untuk membaca nilai dari pin analog. Nilai yang diperoleh yaitu antara 0 sampai 1023.

analogWrite (int pin, int value);
Program diatas untuk menulis nilai analog ke pin. Nilai dari value yang ditulis yaitu antara 0 sampai 255.







Penulis: Agung Dwi Prasetyo, Computer Science IPB
Referensi : 
https://www.arduino.cc/en/Reference/HomePage
C Programming for Arduino

0 Responses So Far:

 
HardCode Copyright © 2012 Prozine Theme is Designed by Agoenk Home | RSS Feed | Comment RSS