Variabel Scope dan Qualifier pada Arduino

Artikel ini membahas tentang variabel scope dan qualifier, secara sederhana, variabel scope adalah sebuah teknik untuk menentukan dimana variabel dapat diakses (apakah di seluruh program atau hanya di dalam fungsi tertentu). Sedangkan qualifier digunakan memberikan informasi tambahan tentang bagaimana variabel diperlakukan, seperti apakah nilainya tetap selama eksekusi program (static) atau dapat berubah kapan saja (volatile).

scope

Bahasa pemrograman C++ ada islitah yang dinamakan “scope”, scope adalah pengelompokan variabel berdasarkan keterbacaanya, ada 2 kelompok, yaitu global variabel dan local variabel. Global variabel adalah variabel yang bisa di akses pada semua fungsi program, variabel yang dideklarasikan diluar fungsi  (seperti setup(), loop(), dll) termasuk kadalam global variabel. Sedangkan local variabel adalah variabel yang hanya bisa diases pada fungsi dimana variabel tersebut dideklarasikan. Lihat Contoh Dibawah:

				
					int k;				
void setup() {
// no code 
}
void loop() {
int i;					
for ( int j = 0, j < 100; j++) {	

				
			
  • Variabel k adalah  global variabelsehingga  bisa dibaca oleh seluruh fungsidan blok.

  • variabel i adalah local variabel pada fungsi loop sehingga hanya bisadibaca pada fungsi loop() saja

  • variabel j adalah local variabel pada blok program for-loop sehingga hanya bisa dibaca pada statement blok fungsi for.

const

kata const adalah kependekan dari constant. Adalah sebuah variabel qualifier yang merubah sifat suatu variabel, yang tadinya read-write menjadi read-only, artinya variabel tersebut tidak bisa diubah nilainya, tapi masih bisa digunakan untuk menyimpan nilai. 

				
					cost float pi = 3,14;
float x;
x  = pi * 2; 	// nilai pi bisa digunakan pada operasi aritmatik
pi = 7 ;	// akan terjadi error, karena kita merubah nilai pi

				
			

static 

Adalah sebuah variabel qualifier yang merubah sifat suatu variabel. Static digunakan untuk mempertahan nilai local variabel yang didefinisikan pada suatu fungsi. ketika variable menggunakan static, maka nilainya akan dijaga sampai program berakhir. Masih ingat global variabel ? Nilai global variabel akan tetap terjaga sampai program berakhir, berbeda dengan local variabel dimana nilainya akan akan hilang setelah variabel dibaca, dan ketika terjadi loop, nilai variabel tersebut akan dibuat ulang, begitulah seterusnya. Jika belum paham coba lihat sketch dibawah

				
					void setup() {
Serial.begin (9600);
}

void loop(){
fungsi_pertama( );
delay(1000);
}

void fungsi_pertama(){
int variabel = 0;
Serial.print("fungsi Pertama: ");
Serial.println(variabel);
variabel++;
}

				
			

Pada serial monitor hasilnya adalah seperti ini

 Terlihat bahwa counternya tidak bertambah (tetap angka nol) padahal terdapat sintax “variabel++” yang artinya nilai variabel akan ditambah satu setiap loop terjadi. Ini terjadi karena nilai variabel lokal tidak dipertahankan setelah nilai nya dibaca, sehingga pada loop selanjutnya pun nilai variabel tetap nol. Lihat Contoh selanjutnya

				
					int variabel = 0;

void setup() {
Serial.begin (9600);
}

void loop(){
Counter( );
delay(1000);
}

void Counter(){
Serial.print("Counter: ");
Serial.println(variabel);
variabel++;
}


				
			

Pada serial monitor hasilnya adalah seperti ini

Nilai counter mulai bertambah satu tiap loop, ini terjadi karena variabel di definisikan sebaga variabel global, sehingga nilai variablenya tidak hilang ketika terjadi pengulangan, ketika sintax “variabel++” terbaca nilai variabel akan bertambah satu.

Sekarang, jika kita ingin mendefinisikan variabel sebagai variabel lokal tetapi nilainya tidak hilang setiap terjadi pengulangan, bisa kita gunakan static untuk mempertahankan nilai variabelnya. Coba lihat sketch dibawah 

				
					void setup() {
Serial.begin (9600);
}

void loop(){
Counter( );
delay(1000);
}

void Counter(){
static int variabel = 0;
Serial.print("Counter: ");
Serial.println(variabel);
variabel++;}

				
			

Pada serial monitor hasilnya adalah seperti ini

Dengan menggunakan static terlihat bahwa counter bertambah satu tiap pengulangan meskipun variabel didefinisikan sebagai variabel lokal.

volatile 

Adalah sebuah variabel qualifier yang merubah sifat suatu variabel. Dengan menggunakan volatile, nilai variable akan disimpan RAM, tidak di penyimpanan register. Variabel perlu menggunakan volatile ketika nilai variabelnya bisa diubah oleh sesuatu diluar program utama. biasanya kondisi itu terjadi ketika kita menggunakan Interrupt (ISR). Lihat contoh dibawah (buat rangkaian push button yang terhubung ke pin 2 arduino)

				
					volatile byte changed = 0;
void setup() {
pinMode (LED-BUILTIN, OUTPUT);
attachInterrupt (digitalPinToInterrupt(2), toggle, CHANGE);
}

void loop() {
if (changed == 1) {		//tombol ditekan, eksekusi program interrupt 
changed = 0;		//reset nilai variabel
digitalWrite (LED_BUILTIN, HIGH);
delay(200);
digitalWrite (LED_BUILTIN, LOW) }
}
void toggle() {
changed = 1;}

				
			

Dari contoh sketch itu terlihat kan ? bahwa nilai variabel “changed” berubah ketika program interrupt dieksekusi, makanya kita menggunakan prefix volatile pada variabelnya. volatile akan memastikan perubahan nilai variabel terjadi secara langsung pada loop(). Tanpa prefix volatile, nilai variabel akan dibaca dari register, sehingga tidak memungkinkan terjadi perubahan nilai sampai suatu fungsi selesai dijalankan, akibatnya pemrosesan data menjadi terlalu lama dan bisa jadi datanya tidak bisa diolah dengan baik. 

Adakalanya kita perlu menggunakan variabel secara local atau global, maupun menggunakan qualifier, semua tergantung kebutuhan untuk melakukan efisiensi code yang kita buat. sekian artikel kali ini, semoga bermanfaat.

Tinggalkan komentar