Bahasa Pemograman Arduino
Bahasa pemrograman Arduino pada dasarnya menggunakan bahasa pemograman C. Bahasa C sendiri merupakan bahasa tingkat tinggi yang sangat populer dan banyak digunakan oleh para programmer. Dengan demikian aturan penulisan dan penggunaan dari bahasa Arduino akan sama dengan bahasa C. Untuk mempelajari lebih jauh lagi bahasa pemograman Arduino dan perintah-perintah apa saja yang ada pada bahasa pemrograman Arduino kamu bisa membuka disitus resmi Arduino Reference atau mengaksesnya dalam bentuk aplikasi android kamu bisa download Arduino Language Reference.Structure program
structure
Srtuktur dasar bahasa pemrograman Arduino sangat sederhana hanya terdiri dari dua bagian. Dua bagian tersebut dapat juga disebut sebagai fungsi utama yaitusetup()
dan loop()
.
void setup( )
{
//Statement;
}
void loop( )
{
//Statement;
}
dimana setup()
adalah bagian untuk inisialisasi yang hanya dijalankan sekali di awal program, sedangkan loop()
untuk mengeksekusi bagian program yang akan dijalankan berulang-ulang untuk selamanya.
setup()
Fungsisetup()
hanya di panggil satu kali ketika program pertama kali dijalankan. Ini digunakan untuk pendefinisikan mode pin atau memulai komunikasi serial. Fungsi setup()
harus di ikut sertakan dalam program walaupun tidak ada statement yang dijalankan.
void setup()
{
pinMode(13,OUTPUT); //mengset ‘pin’ 13 sebagai output
}
loop()
Setelah menjalankan fungsisetup()
maka secara langsung akan melakukan fungsi loop()
secara berurutan dan melakukan instruksi-instruksi yang ada dalam fungsi loop()
terus menerus.
void loop()
{
digitalWrite(13, HIGH); //nyalakan ‘pin’ 13
delay(1000); //pause selama 1 detik
digitalWrite(13, LOW); //matikan ‘pin’ 13
delay(1000); ///pause selama 1 detik
}
function
Function (fungsi) adalah blok pemrograman yang mempunyai nama dan mempunyai statement yang akan di eksekusi ketika function tersebut di panggil. Fungsi voidsetup()
dan void loop()
telah di bahas di atas dan pembuatan fungsi yang lain akan di bahas selanjutnya.
type functionName(parameters)
{
//Statement;
}
Contoh:
int delayVal()
{
int v; //membuat variable ‘v’ bertipe integer
v = analogRead(pot); //baca harga potentiometer
v /= 4; //konversi 0-1023 ke 0-255
return v; //return nilai v
}
Pada contoh di atas fungsi tersebut memiliki nilai balik int
(integer), karena kalau tidak menghendaki adanya nilai balik maka type function harus void
.
{ } curly braces
Curly brace mendefinisikan awal dan akhir dari sebuah blok fungsi. Apabila ketika memprogram dan progremer lupa memberi curly brace tutup maka ketika di compile akan terdapat laporan error.type function()
{
statements;
}
; semicolon
Semua statement yang di tulis dalam block comments tidak akan di eksekusi dan tidak akan di compile sehingga tidak mempengaruhi besar program yang di buat untuk di masukan dalam board arduino.int x = 13; //declares variable 'x' as the integer 13
/*…*/ blok comment
Semicolon harus di berikan pada setiap statement program yang kita buat ini merupakan pembatas setiap statement program yang di buat./* this is an enclosed block comment
don't forget the closing comment
they have to be balanced!
*/
// line comment
Sama halnya dengan block comments, line coments pun sama hanya saja yang dijadikan komen adalah perbaris.//this is a single line comment
Variable
Variable adalah sebuah penyimpan nilai yang dapat digunakan dalam program. Variable dapat di rubah sesuai dengan instruksi yang kita buat. Ketika mendeklarisikan variable harus di ikut sertakan type variable serta nilai awal variable.type variableName = 0;
Contoh:
//mendefinisikan sebuah variable bernama inputVariable dengan nilai awal 0
int inputVariable = 0;
//menyimpan nilai yang ada di analog pin 2 ke inputVariable
inputVariable = analogRead(2);
Variable scope
Sebuah variable dapat di deklarasikan pada awal program sebelum voidsetup()
, secara local di dalam sebuah function, dan terkadang di dalam sebuah block statement pengulangan.
Sebuah variable global hanya satu dan dapat digunakan pada semua block function dan statement di dalam program. Variable global di deklarasikan pada awal program sebelum fungsi setup()
.
Sebuah variable local di deklarasikan di setiap block function atau di setiap block statement pengulangan dan hanya dapat digunakan pada block yang bersangkutan saja.
Contoh penggunaan:
int value; //‘value’ adalah variable global dan dapat di gunakan pada semua block funtion
void setup()
{
//no setup needed
}
void loop()
{
for (int i=0; i<20 code="" dalam="" dapat="" di="" f="" float="" gunakan="" hanya="" i="" local="" pengulangan="" saja="" sebagai="" variable="">20>
Data type
byte
type byte dapat menyimpan 8-bit nilai angka bilangan asli tanapa koma. Byte memiliki range 0 – 255.byte biteVariable = 160; //mendeklarasikan ‘biteVariable’ sebagai type byte
integer
Integer merupakan tipe data utama untuk menyimpan nilai bilangan bulat tanpa koma. Penyimpanan integer sebesar 16-bit dengan range 32.767 sampai -32.768.int integerVariable = 1500; //mendeklarasikan ‘integerVariable’ sebagai type integer
long
Perluasan ukuran untuk long integer, penyimpanan long integer sebesar 32-bit dengan range 2.147.483.647 sampai -2.147.483.648.long longVariable = 900000; //mendeklarasikan ‘longVariable’ sebagai type long
float
Float adalah tipe data yang dapat menampung nilai decimal, float merupakan penyimpan yang lebih besar dari integer dan dapat menyimpan sebesar 32-bit dengan range 3.4028235E+38 sampai -3.4028235E+38.float floatVariable = 3.14; //mendeklarasikan ‘floatVariable’ sebagai type float
array
Array adalah kumpulan nilai yang dapat di akses dengan nomor index, nilai yang terdapat dalam array dapat di panggil dengan cara menuliskan nama array dan nomor index. Array dengan index 0 merupakan nilai pertama dari array. Array perlu di deklarasikan dan kalau perlu di beri nilai sebelum digunakan.int myArray[] = {value0, value1, value2 . . . }
Contoh penggunaan aray:
int myArray[] = {2,4,6,8,10}
x = myArray[5]; //x sekarang sama dengan 10
Operator aritmetic
aritmetic
operator aritmatik terdiri dari penjumlahan, pengurangan, pengkalian, dan pembagian.y = y + 3;
x = x - 8;
i = i * 5;
r = r / 9;
Dalam menggunakan operan aritmatik harus hati-hati dalam menentukan tipe data yang digunakan jangan sampai terjadi overflow range data.
compound assignments
Compound assignments merupakan kombinasi dari aritmatic dengan sebuah variable. Ini biasanya dipakai pada pengulangan.x ++; //sama seperti x = x + 1 atau menaikan nilai x sebesar 1
x --; //sama seperti x = x - 1 atau mengurangi nilai x sebesar 1
x += y; //sama seperti x = x + y
x -= y; //sama seperti x = x – y
x *= y; //sama seperti x = x * y
x /= y; //sama seperti x = x / y
comparison
Statement ini membadingkan dua variable dan apabila terpenuhi akan bernilai 1 atau true. Statement ini banyak digunakan dalam operator bersyarat.x == y; //x sama dengan y
x != y; //x tidak sama dengan y
x < y; //x leboh kecil dari y
x > y; //x lebih besar dari y
x <= y; //x lebih kecil dari sama dengan y
x >= y; //x lebih besar dari sama dengan y
Logic operator
Operator logical digunakan untuk membandingkan dua expresi dan mengembalikan nilai balik benar atau salah tergantung dari operator yang digunakan. Terdapat 3 operator logical AND,OR, dan NOT, yang biasanya digunakan pada if statement.Contoh penggunaan:
Logical AND
if(x>0 && x<5 apabila="" benar="" bernilai="" code="" kedua="" operator="" pembanding="" terpenuhi="">5>
Logical OR
if(x>0 || y>0) //bernilai benar apabila salah satu dari operator pembanding terpenuhi
Logical NOT
if(!x > 0) //benilai benar apabila ekspresi operator salah
Constants
Constants
Arduino mempunyai beberapa variable yang sudah di kenal yang kita sebut konstanta. Ini membuat memprogram lebih mudah untuk di baca. Konstanta di kelasifikasi berdasarkan group.true/false
Merupakan konstanta Boolean yang mendifinisikan logic level. False dapat didefinisikan sebagai 0 dan True sebagai 1.if(b == TRUE);
{
//doSomething
}
high/low
Konstanta ini digunakan untuk menentukan kondisi pin pada levelHIGH
atau LOW
ketika membaca dan menulis dari/ke pin digital. HIGH
didefinisikan sebagai logic 1, ON, atau 5 volt sedangkan LOW
sebagai logic 0, OFF, atau 0 volt.
digitalWrite(13, HIGH);
input/output
Konstanta ini digunakan dengan fungsipinMode()
untuk mendifinisikam mode pin digital, sebagai INPUT
atau OUTPUT
.
pinMode(13, OUTPUT);
Flow control
if
Operatorif
mengetes sebuah kondisi apakah sudah tercapai/benar atau belum, dicontohkan seperti pengetesan nilai analog apakah sudah berada di bawah nilai yang kita kehendaki atau belum, apabila terpenuhi maka akan mengeksekusi baris program yang ada dalam brackets kalau tidak terpenuhi maka akan melewati baris program yang ada dalam brackets.
if(someVariable ?? value)
{
//DoSomething;
}
if....else
Operatorif…else
mengetes sebuah kondisi apabila tidak sesuai dengan kondisi maka akan mengeksekusi baris program yang ada di else.
if(inputPin == HIGH)
{
//Laksanakan rencana A;
}
else
{
//Laksanakan rencana B;
}
for
Operatorfor
digunakan untuk mengulang blok statement di dalam bracket, beberapa kali sesuai dengan jumlah yang ditentukan. Setiap for()
loop mempunyai tiga parameter dan dipisahkan menggunakan titik koma (;
):
for(initialization; condition; expression)
{
//doSomethig;
}
Contoh penggunaan:
for(index=0; index<=3; index++)
{
counter++;
}
1. index=0; Sesuatu yang dikerjakan sebelum dimulai: Membuat index = 0.2. index<=3; Operasi logika yang dites, selama hasilnya benar (true) akan terus looping: Jika index lebih kecil atau sama dengan 3, akan menjalankan kode yang ada di dalam bracket {}. Ketika index = 4, akan keluar dari loop dan melanjutkan baris kode selanjutnya di dalam sketch.
3. index++ Sesuatu yang dilakukan setelah menjalankan satu baris statement: Meletakan "++" setelah sebuah variabel bermaksud menambahkan variabel tersebut dengan satu. Dapat juga menggunakan "index = index + 1".
while
Operator while akan terus mengulang baris perintah yang ada dalam bracket sampai ekspresi sebagai kondisi pengulangan benilai salah.while(someVariable ?? value)
{
//doSomething;
}
do… while
Sama halnya denganwhile()
hanya saja pada operator do…while
tidak melakukan pengecekan pada awal tapi di akhir, sehingga otomatis akan melakukan satu kali baris perintah walaupun pada awalnya sudah terpenuhi.
do
{
//doSomething;
}
while (someVariable ?? value);
Digital I/O
Board Arduino mempunyai jumlah pin yang berlabel digital D0 - D13 sebanyak 14 dengan pengalamatnya 0 - 13. Namun apabila pin digital yang kita butuhkan masih kurang, kita masih bisa menambahnya dengan menggunakan pin yang berlabel analog A0 - A5 difungsikan sebagai pin digital input/output dengan pengalamatnya 14 - 19. Ada saat tertentu pin digital 0 dan 1 tidak bisa digunakan karena di pakai untuk komunikasi serial, sehingga harus hati-hati dalam pengalokasian I/O.pinMode(pin, mode)
Biasa digunakan dalamvoid setup()
untuk mengkonfigurasi pin apakah sebagai INPUT
atau OUTPUT
. Arduino digital pins secara default di konfigurasi sebagai input sehingga untuk merubahnya harus menggunakan operator pinMode(pin, mode)
.
pinMode (pin, OUTPUT); //mengeset pin sebagai output
digitalWrite(pin, HIGH); //mengeset keluaran nilai HIGH (5 volt) pada pin
digitalRead(pin)
Membaca nilai dari pin yang kita kehendaki dengan hasilHIGH
atau LOW
.
value = digitalRead(pin); //mengeset ‘value’ sama dengan pin
digitalWrite(pin, value)
Digunakan untuk mengeset pin yang kita kehendaki dalam kondisi level teganganHIGH
atau LOW
(nyala atau mati). Pin digital arduino mempunyai 14 ( 0 – 13 ).
digitalWrite ( pin, HIGH ); //set pin ke kondisi HIGH
Analog I/O
Selain pin digital Arduino dilengkapi juga oleh pin analog yang berfungsi untuk membaca input tegangan variabel antara 0 - 5 volt dengan resolusi ADC (Analog to Digital) 10-bit. Pada Arduino ada 6 pin yang berlabel analog input dengan pengalamatan A0 - A5. Tidak seperti pin digital yang dapat di fungsikan selain sebagai digital input dapat juga sebagai digital output, namun pada pin analog hanya dapat berfungsi sebagai analog input saja, apabila kamu ingin membuat Arduino mengeluarkan output tegangan analog kamu masih bisa melakukannya dengan menggunakan pin digital yang berlabel PWM (3,5,6,9,10,11), sejatinya tegangan analog yang dikeluarkan Arduino adalah dengan memanipulasi output digital secara pulsa.analogRead(pin)
Membaca nilai pin analog yang memiliki resolusi 10-bit. Fungsi ini hanya dapat bekerja pada analog pin (0 - 5). Hasil dari pembacaan berupa nilai integer dengan range 0 sampai 1023.value = analogRead(pin); //mengeset ‘value’ sama dengan nilai analog pin
analogWrite(pin, value)
Mengirimkan nilai analog dengan metoda Pulse Width Modulation (PWM) ke pin yang berlabel PWM (3,5,6,9,10,11). Nilai yang dapat digunakan adalah dari 0 - 255.analogWrite(pin, value); //mengeluarkan nilai tegangan analog ke pin
Time
delay(ms)
Menghentikan program untuk sesaat sesuai dengan yang di kehendaki, satuanya dalam millisecond.delay(1000); //menunggu selama satu detik
millis()
Mengembalikan nilai dalam millisecond dihitung sejak arduino board menyala. Penapungnya harus long integer.value = millis(); //set ‘value’ equal to millis()
Math
min(x,y)
Membadingkan dua variable dan akan mengembalikan nilai yang paling kecil.value = min(value, 100); //set ‘value’ sebagai nilai yang paling kecil dari kedua nilai
max(x,y)
Membadingkan dua variable dan akan mengembalikan nilai yang paling besar.value = max(value, 100); //set ‘value’ sebagai nilai yang paling besar dari kedua nilai
Random
randomSeed(seed)
Mengeset sebuah nilai sebagai titik awal fungsi random().randomSeed(value); //mengeset 'value' sebagai random seed
random(max)
random(min,max)
Menghasilkan sebuah bilangan acak pada range yang di batasi oleh angka min dan max.value = random(100, 200); //mengeset 'value' ke nilai acak antara 100 - 200
Serial
Serial.begin(rate)
Statement ini digunakan untuk mengaktifkan komunikasi serial dan mengatur baudrate. bauderate yang standar biasa digunakan dengan komputer adalah 9600bps.void setup()
{
Serial.begin(9600); //open serial port and set baudrate 9600 bps
}
Serial.println(data)
Mengirimkan data ke serial port, di ikuti oleh karakter carriage return dan line feed (CR dan LF) atau yang kita kenal kode untuk Enter. Perintah ini mempunyai fungsi yang sama denganSerial.print()
namun lebih sering digunakan karena setelah selesai data di kirim di ikuti enter untuk data selanjutnya akan di tampilkan pada baris/alinea baru di bawahnya sehingga bisa memudahkan dalam pembacaan data pada serial monitor.Serial.println(100); //mengirimkan 100 dan diakhiri