Anda di halaman 1dari 10

Pemrograman Arduino

Struktur program Arduino adalah dasar yang harus di pegang kuat sebelum membuat project
Arduino dengan tingkat yang jauh lebih kompleks. Mahir strukur dasar ini akan membuat kita
semakin mudah bagaimana cara memprogram yang baik. Karena tingkat lanjut dari program
dasar Arduino adalah OOP ( object-oriented Programming),Sebuah program yang akan
tersusun Rapi dan lebih ringkas,yah saya masih belajar ini, insyallah akan di jadikan jadi
bahan tutorial lanjutan di sini.

Pahami lah coding arduino tiap baris nya, bukan hanya copy paste dan edit

Struktur dasar program Arduino setidak nya terdiri dari 3 Bagian, ini sudah di bahas juga
secara singkat di link belajar arduino ini, tiga bagian ini adalah sebagai berikut,

1. Global Variable
2. Setup
3. Loop

Bahagian ini akan kita bahas satu satu di sini, yuk kita lihat dan langsung di praktikan dengan
modul belajar arduino nya yah? biar gak bosen dan selaras dengan apa yang kita maksud
kan.

Global Variable
Global Variable ini berlaku juda di program jenis lain ya, sebuah variable ( akan kita bahas
di sub tema variable program arduino di artikel selanjut nya )yang akan di kenal di semua
fungsi fungsi nanti nya. Struktur dasar sebagai berikut, yuk kita lihat

?
//global variable di sini
const byte led = 13;
void setup() {
  //inisialisasi program, hanya di akses sekali
  pinMode(led, OUTPUT);
}
 
void loop() {
  // akan di akses terus menerus
  digitalWrite(led, HIGH); 
  delay(1000);                      
  digitalWrite(led, LOW);   
  delay(1000);                     
}

Program di bawah adalah sebuah deklarasi global, yang mana di semua fungsi akan di kenali.

?
const byte led = 13;

Untuk membuktikan nya, kita coba buat program seperti di bawah ini,

?
//global variable di sini
const byte led = 13;
void setup() {
  //inisialisasi program, hanya di akses sekali
  pinMode(led, OUTPUT);
}
 
void loop() {
  // akan di akses terus menerus
  led_nyala();
}
 
void led_nyala(){
  digitalWrite(led, HIGH); 
  delay(1000);                      
  digitalWrite(led, LOW);   
  delay(1000);                     
}

Sekarang coba ketikan program di atas, kemudian compile, pasti tidak error ( seharus nya ).
Pada program di atas ada sebuah fungsi, namanya adalah

?
void led_nyala()

Sebuah fungsi dengan nama void led_nyala(), yang kemudian berisi program di bawah ini
?
void led_nyala(){
  digitalWrite(led, HIGH); 
  delay(1000);                      
  digitalWrite(led, LOW);   
  delay(1000);                     
}

Nah, program di atas tidak akan error di program karena variable led pada fungsi void
led_nyala(); sudah di declarasi,

sekarang coba hapus program di bawah ini, di program utama

?
const byte led = 13;

kemudian compile, lihat error nya.


was-not-declare

nah led pada fungsi led_menyala tidak akan di kenali, karena dia belum di deklarasi, tapi yuk
coba kita buat program berikut, agar lebih jelas lagi tentang struktur dasar program ini

Local Variable
Lokal Variable pada program C/C++. Perbedaan dasar dari global variable adalah, lokal
variable ini hanya di kenal pada fungsi nya saja, tapi pada fungsi lain tidak di kenal. Coba
kita buat program seperti di bawah ini.

?
//global variable di sini
const byte led = 13;
void setup() {
  //inisialisasi program, hanya di akses sekali
  pinMode(led, OUTPUT);
}
 
void loop() {
  // akan di akses terus menerus
  led_nyala();
}
 
void led_nyala(){
  int waktu = 1000;
  digitalWrite(led, HIGH); 
  delay(waktu);                      
  digitalWrite(led, LOW);   
  delay(waktu);                     
}

coba perhatikan program di atas, ada sebuah variable lokal dengan nama waktu dengan tipe
data integer ( tipe data akan kita bahas di artikel lanjutan). Waktu ini hanya akan di kenal di
fungsi void led_nyala() saja. Coba kompile kemudian check, seharus nya tidak error.

Ada satu hal yang unik di Global variable dan Lokal Variable ini, mungkin master master
bisa tahu, Tipe data waktu bisa saja kita letakan di Global variable, tapi mungkin ada
perbedaan esekusi waktu mau pun jumlah memory.

Jadi fungsi dari global variable adalah sebuah variable yang akan kita akses berulang ulang di
semua fungsi yang akan kita buat. sementara lokal variable adalah yang sangat jarang di
akses, bahkan dia mungkin adalah varible pembantu pada fungsi itu.

Coba buat program berikut, dan akan error jika di compile

?
//global variable di sini
const byte led = 13;
void setup() {
  //inisialisasi program, hanya di akses sekali
  pinMode(led, OUTPUT);
}
 
void loop() {
  // akan di akses terus menerus
  led_nyala();
}
 
void led_nyala(){
  int waktu = 1000;
  digitalWrite(led, HIGH); 
  delay(waktu);                      
  digitalWrite(led, LOW);   
  delay(waktu);                     
}
void led_nyala2(){
  digitalWrite(led, HIGH); 
  delay(waktu);                      
  digitalWrite(led, LOW);   
  delay(waktu);                     
}

Ketika di compile maka akan ada error pada fungsi led_nyala2(); hal ini terjadi karena
variable waktu tidak di kenal, variable waktu hanya di kenal pada fungsi led_nyala.

Rubah Ke Global Variable

Nah sampai saat ini harus nya teman-teman sudah paham. Yuk kita coba rubah waktu
menjadi global variable. Program nya ada di bawah ini

?
//global variable di sini
const byte led = 13;
const int waktu = 1000; // ini globla variable
void setup() {
  //inisialisasi program, hanya di akses sekali
  pinMode(led, OUTPUT);
}
 
void loop() {
  // akan di akses terus menerus
  led_nyala();
  led_nyala2();
}
 
void led_nyala(){
  digitalWrite(led, HIGH); 
  delay(waktu);                      
  digitalWrite(led, LOW);   
  delay(waktu);                     
}
void led_nyala2(){
  digitalWrite(led, HIGH); 
  delay(waktu);                      
  digitalWrite(led, LOW);   
  delay(waktu);                     
}

nah variable waktu telah kita angkat ke posisi global variable, ketika di compile maka tidak
akan error lagi, walaupun waktu tidak kita deklarasi pada fungsi led_nyala() dan
led_nyala2().

Semoga sudah paham yah, heheh, setup

Void Setup()
Init Register

Void setup pada program Arduino adalah sebuah tempat atau fungsi untuk men deklarasi
fungsi fungsi mikrokontroller pada Arduino. Chip mikrokontroller nya memiliki register yang
mem fungsikan apakah PIN di gunakan sebagai input, atau sebagai output, apakah di gunakan
komunikasi Serial, dan lain lain.

Jika teman-teman pernah menggunakan software pemrogram mikrokontroller seperti Atmel


Studio, Codevision AVR, Bascom, maka teman-teman akan lihat jelas bagaimana cara
deklarasi fungsi register setiap fungsi dari fitur yang di bawa setiap jenis mikrokontroller
sendiri.

Saya yakin teman-teman mikro yang langsung terjun ke dunia Arduino tanpa mendahului
belajar dengan menggunakan program seperti di atas, maka hal ini akan menjadi tabu. Seperti
anak anak jaman Sekarang yang bingung apa itu permain engklek, patok lele, main karet dan
lain lain. hahah betul lho

Sebagai Contoh, jika di Arduino kita cukup menggunakan perintah di bawah ini untuk setting
pin apakah sebagain input atau output

?
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(2, OUTPUT);
  pinMode(3, INPUT);
  Serial.begin(9600);
}

Nah, di atas pin 2 akan di gunakan sebagai sebagaioutput,kemudian pin 3 akan di gunakan
sebagaiinput. Berbeda jika menggunakan codevision AVR ( kebetulan penulis latar belakang
nya Codevision AVR ). Maka program nya akan seperti berikut,

?
#include <mega328p.h>
 
void main(void)
{
DDRD.2 = 1;  // SET OUPUT
PORTD.2 = 0; // SET O
 
DDRD.3 = 0;  // SET INPUT
PORTD.3 = 1; // SET PULLUP
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART0 Mode: Asynchronous
// USART Baud Rate: 9600
UCSR0A=(0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | (0<<DOR0) |
(0<<UPE0) | (0<<U2X0) | (0<<MPCM0);
UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (1<<RXEN0) | (1<<TXEN0) |
(0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);
UCSR0C=(0<<UMSEL01) | (0<<UMSEL00) | (0<<UPM01) | (0<<UPM00) | (0<<USBS0) |
(1<<UCSZ01) | (1<<UCSZ00) | (0<<UCPOL0);
UBRR0H=0x00;
UBRR0L=0x67;
 
 
while (1)
      {
      // Place your code here
 
      }
}

Tampak aneh kan? nah Jadi di Arduino, kita tidak lagi di pusingkan dengan register-register
mikrokontroller yang perlu di inisialisasi, karena fungsi init nya sudah di buat dalam sebuah
library.

Master Mikrokontroller angkatan Lama sangat familiar dengan register-register


mikrokontroller, migrasi ke Arduino akan memudah kan dia untuk coding Arduino, karena di
Arduino juga bisa di init atau di olah register-register ini.

Yah begitu lah. but I am not master, lazy to check register in datasheet, LOL, heheh

Hanya di Akses Sekali

Void setup ini sifat nya hanya di akses sekali saja. Dia tidak akan di akses ber ulang ulang.
Jika power on, maka dia di akses. Karena sifat nya yang di akses sekali saja, maka bisa kita
gunakan untuk keperluan tertentu. Sebagai Contoh, saya gunakan dia sebagai pemanggil
eeprom external. Jadi begitu on, akan load EEPROM external, kemudian nilai-nilai nya kita
simpan ke variable dalam Arduino.

Penggunaan setup ini layak nya booting bios awal sebuah sistem operasi, di sana semua
fungsi awal akan di akses di sini. Tergantung dari kreativitas programmer nya menggunakan
fungsi setup ini.

void Loop()
Sesuai dengan namanya, Loop, berputar tanpa henti. looping forever, sebuah program akan di
akses terus menerus, sebuah siklus tanpa akhir. Nah ini penting, karena memang nanti nya
kita ingin system ini berjalan tiada henti, hari, minggu, bulan, bahkan puluhan tahun bekerja
tanpa henti.

Untuk itu ada fungsi loop. Semua program yang akan di olah bekerja secara terus menerus
akan di olah di fungsi loop. Program akan di jalankan dari atas sampai ke bawah, kemudian
kembali lagi ke atas. hal ini terjadi dalam Kondisi normal. Kecuali jika kita gunakan fungsi
interupsi pada Arduino. Interupsi ini akan di tunda untuk di proses dan program mendadak
menjalan kan program pada fungsi interrupt. Interrupt ini akan kita bahas di kesempatan
mendatang.

Untuk lebih jelas nya, yuk kita lihat coding di bawah ini, pastikan coding ini di ketik, bukan
copy paste kemudian buka serial monitor Arduino teman-teman nanti nya.

 
?
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  Serial.println("baris satu");
  delay(1000);
  Serial.println("baris dua");
  delay(1000);
  Serial.println("baris tiga");
  delay(1000);
  Serial.println("baris empat");
  delay(1000);
  Serial.println("baris lima");
  delay(1000);
  Serial.println("baris enam");
  delay(1000);
  Serial.println("baris tujuh");
  delay(1000);
  Serial.println("baris delapan");
  delay(1000);
  Serial.println("baris sembilan");
  delay(1000);
  Serial.println("baris sepuluh");
  delay(1000);     
}

Coba upload program program di atas ke Arduino, dan buka serial monitor, pastikan baut rate
di serial monitor sesuai dengan nilai di bawah ini,

?
Serial.begin(9600);

Nilai baudrate yang berbeda antara program dengan di serial monitor akan menyebabkan
pembacaan error pada serial monitor, pastikan sama

Nah Sekarang buka serial monitor nya, check apakah yang terjadi? Maka akan tampil
karakter di serial monitor dengan karakter,

baris satu, kemudian tunda 1000ms, kemudian baris dua, kemudian tunda 1000ms, kemudian
Seterus nya sampai muncul tulisan baris sepuluh. Setelah baris sepuluh muncul maka akan
kembali berulang, serial monitor akan menampilkan baris satu, kemudian tunda 1000ms dan
seturus nya. Kejadian ini akan berulang terus menerus sampai selama nya, sampaipower
supply dari Arduino off.

Selesai sudah pelajaran Struktur program Arduino kita bahas. Semoga bermanfaat,

Saran saya adalah coba ketik berulang-ulang dengan penuh kesabaran program di atas. maka
coding demi coding akan lengkep di memory kita. Semakin di ulang akan semkain di ingat.
Jangan terbaru- buru ingin membuat sesuatu yang besar, tapi mulai lah dari yang kecil.

Untuk kembali ke daftar tutorial belajar arduino, cukup klik tombol di bawah ini, untuk
pelajaran selanjut nya
Belajar Arduino

Semoga bermanfaat

#LearningAndSharing

#mikroavr

Anda mungkin juga menyukai