Arduino memiliki bahasa program tersendiri untuk dapat beroperasi, bahasa program ini biasa disebut sebagai bahasa processing. Bahasa program ini pada dasarnya mirip dengan bahasa program C/C++. Oleh karena itu aturan penulisan bahasa program Arduino sama dengan bahasa C/C++. Bahasa program C sendiri merupakan salah satu bahasa program yang sangat populer dan paling banyak digunakan. Artikel ini adalah kelanjutan dari artikel sebelumnya tentang struktur pemrograman Arduino dan akan membahas komponen pemrograman pada Arduino. Anda juga dapat mempelajari lebih lanjut tentang bahasa pemrograman Arduino dan syntax apa saja yang tersedia, yang dapat anda terapkan pada program anda, melalui situs resmi Arduino Reference atau mengaksesnya dalam bentuk aplikasi android melalui Arduino Language Reference.
Digital I/O
Board Arduino UNO mempunyai jumlah pin yang berlabel digital D0 – D13 sebanyak 14 pin 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 (TX,RX), sehingga harus hati-hati dalam pengalokasian I/O.
- pinMode(pin, mode)
Biasa ditulis pada void setup() untuk mengkonfigurasi pin sebagai INPUT atau OUTPUT. Arduino digital pin secara default akan dikonfigurasi sebagai input sehingga untuk merubahnya harus menggunakan operator pinMode(pin, mode).
pinMode (pin, OUTPUT); //mengeset pin sebagai output
- digitalRead(pin)
Membaca nilai dari pin yang ditunjuk dengan hasil HIGH atau LOW.
value = digitalRead(pin); //mengeset ‘value’ dengan nilai dari pin
- digitalWrite(pin, value)
Digunakan untuk mengeset pin yang kita kehendaki dalam kondisi level tegangan HIGH atau LOW (on/off).
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 – 5V dengan resolusi ADC (Analog to Digital) 10-bit. Pada Arduino UNO 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).
- 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 rentang 0 sampai 1023.
value = analogRead(pin); //mengeset ‘value’ sama dengan nilai analog pin
- analogWrite(pin, value)
Mengirimkan nilai analog dengan metode 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
Constants
Constants adalah expression yang telah ditentukan sebelumnya dalam bahasa Arduino. Constant digunakan untuk membuat program lebih mudah dibaca. Constant dapat digolongkan dalam beberapa kelompok diantaranya,
- Boolean Constant (True/False)
Merupakan konstanta yang mendefinisikan benar atau salahnya suatu expression. False berarti 0 dan true berarti 1 dalam boolean. Semua angka yang bukan nol juga dianggap sebagai true. Penulisan boolean constant semua menggunakan huruf kecil berbeda dengan konstanta yang lainnya. Contoh penulisan,
if(x == true)
{
//doSomething
}
- Pin Level (HIGH/LOW)
Saat membaca atau menulis pada pin digital, hanya ada dua nilai yang dapat diterapkan oleh pin: HIGH dan LOW.
HIGH
Pengertian HIGH pada pin tergantung dari apakah pin diatur sebagai input atau output. Ketika pin diatur sebagai input, Arduino akan membaca keadaan HIGH ketika,
- Terdapat voltase lebih dari 3.0V pada pin (untuk board 5V)
- Terdapat voltase lebih dari 2.0V pada pin (untuk board 3.3V)
Sedangkan ketika pin diatur sebagai output, dan pin dinyalakan menggunakan statement digitalWrite(), maka pin akan mengeluarkan listrik 5V (untuk board 5V) dan 3.3V (untuk board 3.3V).
LOW
Pengertian LOW pada pin juga tergantung pada pengaturan pin. Ketika pin diatur sebagai input, maka Arduino akan membaca keadaan LOW ketika,
- Terdapat voltase kurang dari 1.5V pada pin (untuk 5V)
- Terdapat voltase kurang dari 1.0V pada pin (untuk board 3.3V)
Sedangkan ketika pin diatur sebagai output, maka dalam kondisi LOW, pin berada apa kondisi 0 volt atau kondisi off baik pada board 5V dan 3.3V. Contoh penulisan,
digitalWrite(13,HIGH); //pin 13 berada pada kondisi on
digitalWrite(13,LOW); //pin 13 berada pada kondisi off
- Digital Pin Mode (INPUT, OUTPUT)
Konstanta ini digunakan untuk mengatur status dari pin Arduino. Mode ditulis menggunakan expression pinMode(). Secara sederhana, jika pin diatur sebagai input, maka pin tersebut akan menerima sinyal yang diberikan oleh instrument misalnya sensor, dan jika pin diatur sebagai output maka Arduino akan mengirimkan sinyal kepada instrument misalnya kepada LED. Contoh penulisan,
pinMode(13,OUTPUT);
pinMode(13,INPUT);
Serial
- Serial.begin(rate)
Statement ini digunakan untuk mengaktifkan komunikasi serial antara Arduino dengan computer dan mengatur baudrate. Bauderate yang standar biasa digunakan dengan komputer adalah 9600. Serial.begin() harus ditulis pada void setup() agar dapat menggunakan komunikasi serial.
void setup()
{
Serial.begin(9600); //mengaktifkan serial port dengan baudrate 9600bps
}
- Serial.println(data)
Statement ini digunakan untuk 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 dengan Serial.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 enter
Variable
Variable adalah tempat untuk menyimpan nilai pada suatu program. Variable sangat berguna ketika kita bekerja dengan value yang berubah-ubah. Kita dapat membuat sebuah variable sesuai dengan keinginan dan tidak ada batas berapa banyak variable yang dapat dibuat. Ketika mendeklarasikan sebuah variable, harus mengikutsertakan data type dari variable serta nilai awal variable. Format dan contoh penulisan variable antara lain,
data type variableName = value;
Contoh:
int Variabel1 = 0; //mendefinisikan sebuah variable bernama “Variabel1” dengan nilai 0
Variabel1 = analogRead(2); //menyimpan nilai yang ada di analog pin 2 ke Variable1, tidak perlu menambahkan data type lagi di awal karena sudah dideklarasikan di line sebelumnya.
Sebuah variable dapat di deklarasikan pada awal program sebelum void setup(), artinya variable tersebut berlaku secara global dan dapat digunakan pada semua blok function dan statement di dalam program. Variabel juga dapat ditulis secara lokal di dalam sebuah function, artinya sebuah variable local yang dideklarasikan di setiap blok function atau di setiap blok statement pengulangan hanya dapat digunakan pada blok yang bersangkutan saja. Variabel juga dapat digunakan untuk mendeklarasikan pin yang digunakan pada Arduino. Contoh penggunaan:
int pin = 13; // variable “pin” digunakan untuk mendeklarasikan penggunaan pin 13 secara global
int value = 0; // mendeklarasikan variable “value” dengan niali 0 secara global
void setup()
{
pinMode(pin, OUTPUT); //Mengatur pin 13 yang dimuat pada variable “pin” sebagai pin output
}
void loop()
{
digitalWrite(pin, HIGH); //Mengubah variable “pin” dalam kondisi HIGH/on
value = analogRead(12); //Menyimpan nilai analog dari pin 12 ke variable “value”
int jumlah = value + 2; //Mendeklarasikan sebuah variable lokal dengan nama “jumlah” dan menyimpan nilai dari
variable “value” yang ditambah 2
}
Data type
Berikut adalah macam-macam tipe data yang tersedia pada pemrograman Arduino.
- Byte
Byte dapat menyimpan 8-bit nilai angka bilangan asli tanpa koma. Byte dapat menyimpan data dengan rentang 0 – 255. Contoh penulisan,
byte bytevariabel = 160; //mendeklarasikan “bytevariable” sebagai type byte
- Integer
Integer merupakan tipe data yang paling banyak digunakan untuk menyimpan nilai bilangan bulat tanpa koma. Penyimpanan integer sebesar 16-bit dengan rentang 32.767 sampai -32.768. Contoh penulisan,
int intvar = 100; //mendeklarasikan “intvar” sebagai type integer
- Unsigned integer
Unsigned integer secara fungsi sama dengan integer, namun unsigned integer tidak dapat menyimpan nilai negatif dan memiliki rentang penyimpanan dari 0 sampai 65.535. Contoh penulisan,
unsigned int uintvar = 1500; //mendeklarasikan “uintvar” sebagai type unsigned integer
- Long
Tipe data Long sama dengan tipe integer yaitu menyimpan nilai bilangan bulat tanpa koma. Perbedaannya adalah long memiliki penyimpanan sebesar 32-bit dengan rentang 2.147.483.647 sampai -2.147.483.648. Contoh penulisan,
long longvar = 900000; //mendeklarasikan “longvar” sebagai type long
- Unsigned Long
Unsigned long secara fungsi sama dengan long, namun unsigned long tidak dapat menyimpan nilai negatif dan memiliki rentang penyimpanan dari 0 sampai 4.294.967.295. Contoh penulisan,
unsigned long ulongvar = 1000000; //mendeklarasikan “ulongvar” sebagai type unsigned long
- Float
Float adalah tipe data yang dapat menampung nilai desimal, float merupakan penyimpan yang lebih besar dari integer dan dapat menyimpan sebesar 32-bit dengan rentang 3.4028235E+38 sampai -3.4028235E+38. Contoh penulisan,
float floatvar = 3.14; //mendeklarasikan “floatvar” sebagai type float
- String
String adalah tipe data yang digunakan untuk menyimpan data berupa kata. Untuk penulisan kata pada Arduino harus memberikan tanda petik dua di awal dan di akhir kata.
string strvar = “Arduino”; //mendeklarasikan “strvar” sebagai type string
- Char
Char adalah tipe data yang digunakan untuk menyimpan data dalam bentuk satu karakter.
char charvar = “a”; //mendeklarasikan “charvar” sebagai type char
- Bool
Bool adalah tipe data yang digunakan untuk menyimpan data berupa boolean, yang berarti hanya menyimpan data dalam 0 dan 1 atau true dan false.
bool boolvar = FALSE; //mendeklarasikan “boolvar” sebagai type boolean
- 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. Penulisan array adalah sebagai berikut,
int myArray[] = {value0, value1, value2 . . . }
Contoh penggunaan array:
int nilai[] = {2,4,6,8,10} x = nilai[5]; //x sekarang sama dengan 10
Operator Aritmatika
- Aritemtic
Operator aritmatika terdiri dari penjumlahan, pengurangan, pengkalian, dan pembagian. Contohnya:
y = y + 1;
x = x - 4;
i = i * 2;
r = r / 2.5;
- Compound Assignments
Compound assignments merupakan kombinasi dari aritmetika dengan sebuah variabel. Ini biasanya digunakan untuk mempersingkat penulisan dan dipakai pada pengulangan.
x++; //sama seperti x = x + 1 atau menaikkan 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
Sesuai namanya, pernyataan comparison digunakan untuk membandingkan dua variable dan apabila terpenuhi akan bernilai 1 atau true. Pernyataan 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
Boolean Operators
Boolean Operator digunakan untuk membandingkan dua expression dan menghasilkan nilai output benar atau salah tergantung dari operator yang digunakan. Terdapat 3 operator logical yaitu AND, OR, dan NOT, yang biasanya digunakan pada if statement. Contoh penggunaan:
- Operator AND
if(x>0 && x<5) //bernilai benar apabila kedua operator pembanding terpenuhi
- Operator OR
if(x>0 || y>0) //bernilai benar apabila salah satu dari operator pembanding terpenuhi
- Operator NOT
if(!x > 0)//benilai benar apabila ekspresi operator salah
if(!x > 0)//benilai benar apabila ekspresi operator salah
Flow control
- If
Fungsi If digunakan untuk menjalankan perintah berdasarkan suatu kondisi tertentu yang telah terpenuhi, misal jika nilai dari suatu sensor sama dengan nilai yang diinginkan, maka program yang berada di lingkup fungsi if akan berjalan, jika kondisi tidak terpenuhi maka program akan melewati baris kode tersebut. Cara penulisan fungsi if adalah sebagai berikut,
If (nilaisensor >= 100) //jika nilai sensor lebih besar atau sama dengan 100 maka pernyataan1 akan dijalankan
{
Pernyataan1;
}
- If….else
Fungsi ini memiliki fungsi yang sama dengan fungsi if sebelumnya, perbedaannya adalah jika kondisi tidak terpenuhi, maka program akan membaca baris yang terdapat pada lingkup else. Contoh penulisan,
If (nilaisensor >= 100) //jika nilai sensor lebih besar atau sama dengan 100 maka pernyataan1 akan dijalankan
{
Pernyataan1;
}
else //jika if tidak sesuai, pernyataan2 yang akan berjalan
{
Pernyataan2;
}
Fungsi if else juga dapat menerapkan kondisi lebih dari satu menggunakan sintaksis else if(). Contoh penulisan,
If (nilaisensor >= 100) //jika nilai sensor lebih besar atau sama dengan 100 maka pernyataan1 akan dijalankan
{
Pernyataan1;
}
else if (nilaisensor <= 14) //jika nilai sensor kurang dari atau sama dengan 14 maka pernyataan2 akan dijalankan
{
Pernyataan2;
}
else //jika semua kondisi tidak sesuai, pernyataan3 akan berjalan
{
Pernyataan3;
}
- for
Fungsi for digunakan untuk menciptakan sebuah loop atau pengulangan statement dengan kondisi tertentu, misal mengulang perintah untuk menyalakan dan mematikan LED 3 kali. Format penulisan fungsi for adalah,
for(int i = 0 ; i <= 3; i++) //For akan mengulang pernyataan di bawahnya selama i kurang dari atau sama dengan 3 {
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);
}
Cara kerja dari contoh program di atas adalah pertama kita inisialisasikan sebuah variable loop bernama i senilai 0 lalu for akan menguji apakah i kurang dari atau sama dengan 3, jika benar maka pernyataan di bawahnya akan berjalan, lalu nilai dari i akan bertambah 1 karena pernyataan i++. Pengulangan akan terus terjadi hingga nilai i tidak kurang dari atau sama dengan 3.
- while
Fungsi while adalah fungsi loop atau pengulangan yang mana fungsi ini akan terus berjalan hingga perbandingan yang diatur di dalamnya bernilai salah. Contoh penulisan,
while(nilai < 5) //selama variable “nilai” kurang dari 5, maka pernyataan akan terus berjalan
{
Pernyataan;
}
- do… while
Fungsi do while hampir sama dengan fungsi while, namun pada fungsi do while, program akan menjalankan peritah terlebih dahulu baru melakukan perbandingan. Contoh penulisan,
do //Pernyataan akan berjalan terlebih dahulu
{
Pernyataan;
{
while(nilai < 5) //Setelah itu program melakukan perbandingan variable
Time
- delay()
Fungsi delay() digunakan untuk memberikan jeda pada program, jika terdapat pernyataan delay() maka program akan menunggu selama waktu yang tertulis pada pernyataan tersebut sebelum melanjutkan ke baris kode selanjutnya. Waktu ditulis dalam satuan milisekon. Contoh penulisan,
delay(1000); //jeda selama 1 detik
- millis()
Fungsi millis() digunakan sebagai penghitung waktu sejak Arduino dinyalakan. Nilai millis() harus ditampung dalam sebuah variable. Contoh penulisan,
Unsigned long Time = millis();
- micros()
Fungsi micros() hampir sama dengan millis(), perbedaanya millis() menghitung waktu dalam satuan milidetik sedangkan micros() menghitung waktu dengan satuan mikrodetik. Contoh penulisan,
Unsigned long Time = micros();