Pembahasan Struktur Kontrol Arduino

Catatan kali ini mengenai struktur kontrol pemrograman dalam arduino. Di bawah ini merupakan elemen-elemen kode Arduino ( C++ ). Terdiri dari perintah perintah seperti while, switch...case, return, if, goto, for, else, do...while, continue, break.

break

Kontrol break digunakan untuk keluar dari perintah perulangan for, while, atau pengulangan do...while. Statemen break juga digunakan untuk keluar dari pernyataan switch case.

Catatan ini mengulas sedikit tentang Pernyataan break Dalam Bahasa Pemrograman Arduino.

Pernyataan Break Dalam Pemrograman Arduino

Contoh Kode

Dalam kode berikut, digunakan untuk kontrol keluar dari perulangan for ketika nilai sensor melebihi ambang batas atau threshold.
int threshold = 40;
for (int x = 0; x < 255; x++) {
  analogWrite(PWMpin, x);
  sens = analogRead(sensorPin);
  if (sens > threshold) {     // bail out on sensor detect
    x = 0;
    break;
  }
  delay(50);
}

continue

Statemen continue melewati kondisi perulangan yang sedang terjadi seperti ( for, while, do...while). Statemen continue tersebut akan mengecek kondisi ekspresi dalam perulangan dan akan meneruskan ke baris program selanjutnya. Di bawah ini adalah contoh kodenya.
for (int x = 0; x <= 255; x ++) {
  if (x > 40 && x < 120) {  // create jump in values
    continue;
  }

  analogWrite(PWMpin, x);
  delay(50);
}

Dalam kode di atas PWM akan bernilai 0-255, namun ketika nilainya 41-119 maka akan skip/melompat ke program selanjutnya.

do...while

Perulangan do...while bekerja dengan cara yang sama seperti perulangan while, dengan pengecualian bahwa kondisi diuji pada akhir loop, sehingga loop do akan selalu berjalan setidaknya sekali.

Syntax
do {
  // statement block
} while (condition);

Parameter

condition : ekspresi boolean yang bernilai benar (true) atau salah (false).

Contoh Kode

int x = 0;
do {
  delay(50);          // wait for sensors to stabilize
  x = readSensors();  // check the sensors
} while (x < 100);

for 

Pernyataan for digunakan untuk mengulang blok pernyataan yang diapit kurung kurawal. Increment biasanya digunakan untuk menambah dan menghentikan perulangan. Pernyataan for berguna untuk setiap operasi berulang, dan sering digunakan dalam kombinasi dengan array untuk beroperasi pada kumpulan data/pin.

Syntax
for (initialization; condition; increment) {
  // statement(s);
}

Parameter

initialization : pertama dan dilakukan sekali

condition :  setiap kali melalui loop, kondisi diuji; jika benar, blok pernyataan, dan kenaikan dijalankan, maka kondisi diuji lagi. Ketika kondisi menjadi salah, loop berakhir.

increment : dieksekusi setiap kali melalui loop ketika kondisinya benar.

Contoh Kode

// Dim an LED using a PWM pin
int PWMpin = 10;  // LED in series with 470 ohm resistor on pin 10
void setup() {
  // no setup needed
}
void loop() {
  for (int i = 0; i <= 255; i++) {
    analogWrite(PWMpin, i);
    delay(10);
  }
}

Catatan dan Peringatan

C++ for loop jauh lebih fleksibel daripada for loop yang ditemukan di beberapa bahasa komputer lain, termasuk BASIC. Salah satu atau semua dari tiga elemen header dapat dihilangkan, meskipun titik koma diperlukan. Juga pernyataan untuk inisialisasi, kondisi, dan kenaikan dapat berupa pernyataan C++ yang valid dengan variabel yang tidak terkait, dan menggunakan tipe data C++ apa pun termasuk float. Jenis pernyataan yang tidak biasa ini dapat memberikan solusi untuk beberapa masalah pemrograman yang jarang terjadi.

Misalnya, menggunakan perkalian pada garis kenaikan akan menghasilkan progresi logaritmik:

for (int x = 2; x < 100; x = x * 1.5) {
  println(x);
}

Hasilnya : 2,3,4,6,9,13,19,28,42,63,94

Contoh lain, memudarkan LED ke atas dan ke bawah dengan satu for loop:

void loop() {
  int x = 1;
  for (int i = 0; i > -1; i = i + x) {
    analogWrite(PWMpin, i);
    if (i == 255) {
      x = -1;  // switch direction at peak
    }
    delay(10);
  }
}

goto

Dalam pernyataan goto ini digunakan untuk berpindah / mentransfer ke titik berlabel dalam sebuah program. pernyataan ini mempunyai berbagai ketentuan dalam penulisannya berikut ulasannya.

Syntax

label:
goto label; // sends program flow to the label

Contoh Kode

Agar lebih memahami mengenai pernyataan goto ini berikut ini adalah contoh kodenya.

for (byte r = 0; r < 255; r++) {
  for (byte g = 255; g > 0; g--) {
    for (byte b = 0; b < 255; b++) {
      if (analogRead(0) > 250) {
        goto bailout;
      }
      // more statements ...
    }
  }
}
bailout:
// more statements ... 

Catatan dan Peringatan Tentang Pernyataan Goto

Penggunaan goto tidak disarankan dalam pemrograman C, dan beberapa penulis buku pemrograman C mengklaim bahwa pernyataan goto tidak pernah diperlukan, tetapi digunakan dengan bijaksana, ini dapat menyederhanakan program tertentu. Alasan mengapa banyak programmer tidak menyukai penggunaan goto adalah bahwa dengan penggunaan pernyataan goto yang tidak terkendali, mudah untuk membuat program dengan aliran program yang tidak ditentukan, yang tidak pernah dapat di-debug.

Dengan demikian, ada beberapa contoh di mana pernyataan goto dapat berguna, dan menyederhanakan pengkodean. Salah satu situasi ini adalah keluar dari loop for yang sangat bersarang, atau jika blok logika, pada kondisi tertentu.

If

Statemen if  mengecek untuk sebuah kondisi dan mengeksekusi statemen di bawahnya atau mengeset berbagai statemen jika kondisi adalah benar (true).

Syntax

if (condition) {
  //statement(s)
}

Parameter

condition :  ekspresi boolean (bisa benar atau salah).

Contoh Kode

Tanda kurung kurawal dapat dihilangkan setelah pernyataan if. Jika ini dilakukan, maka hanya bisa ada satu pernyataan kondisi, baris berikutnya (didefinisikan oleh titik koma) 

if (x > 120) digitalWrite(LEDpin, HIGH);
if (x > 120)
digitalWrite(LEDpin, HIGH);
if (x > 120) {digitalWrite(LEDpin, HIGH);}
if (x > 120) {
  digitalWrite(LEDpin1, HIGH);
  digitalWrite(LEDpin2, HIGH);
}
// all are correct

Catatan dan Peringatan

Pernyataan yang dievaluasi di dalam tanda kurung memerlukan penggunaan satu atau lebih operator yang ditunjukkan di bawah ini.

Operator Perbandingan :

  • x == y (x is equal to y)
  • x != y (x is not equal to y)
  • x <  y (x is less than y)
  • x >  y (x is greater than y)
  • x <= y (x is less than or equal to y)
  • x >= y (x is greater than or equal to y)

Hati-hati jika tidak sengaja menggunakan tanda sama dengan tunggal (mis. if (x = 10) ). Tanda sama dengan tunggal adalah operator penugasan, dan menetapkan x ke 10 (menempatkan nilai 10 ke dalam variabel x). Alih-alih gunakan tanda sama dengan ganda (mis. if (x == 10) ), yang merupakan operator perbandingan, dan menguji apakah x sama dengan 10 atau tidak. Pernyataan terakhir hanya benar jika x sama dengan 10, tetapi pernyataan sebelumnya akan selalu benar.

Ini karena C++ mengevaluasi pernyataan if (x=10) sebagai berikut: 10 diberikan ke x (ingat bahwa tanda sama dengan tunggal adalah (operator penugasan)), jadi x sekarang berisi 10. Kemudian kondisi 'if' mengevaluasi 10 , yang selalu bernilai TRUE, karena bilangan bukan nol mana pun akan bernilai TRUE. Akibatnya, if (x = 10) akan selalu bernilai TRUE, yang bukan merupakan hasil yang diinginkan saat menggunakan pernyataan 'if'. Selain itu, variabel x akan disetel ke 10, yang juga bukan merupakan tindakan yang diinginkan.

else

If…else memungkinkan kontrol yang lebih besar atas aliran kode daripada pernyataan if dasar, dengan mengizinkan beberapa pengujian untuk dikelompokkan. Klausa else (jika ada) akan dieksekusi jika kondisi dalam pernyataan if menghasilkan false. Selanjutnya dapat melanjutkan pengujian if yang lain, sehingga beberapa pengujian yang saling eksklusif dapat dijalankan pada waktu yang sama.

Setiap tes akan dilanjutkan ke yang berikutnya sampai tes yang benar ditemukan. Ketika tes yang benar ditemukan, blok kode yang terkait dijalankan, dan program kemudian melompat ke baris mengikuti seluruh konstruksi if/else. Jika tidak ada pengujian yang terbukti benar, blok else default dijalankan jika ada, dan menetapkan perilaku default.

Perhatikan bahwa blok else if dapat digunakan dengan atau tanpa penghentian blok else dan sebaliknya. Jumlah yang tidak terbatas dari yang lain jika cabang diizinkan.

Syntax

if (condition1) {
  // do Thing A
}
else if (condition2) {
  // do Thing B
}
else {
  // do Thing C
}

Contoh Kode

Di bawah ini adalah ekstrak dari kode untuk sistem sensor suhu

if (temperature >= 70) {
  // Danger! Shut down the system.
}
else if (temperature >= 60) { // 60 <= temperature < 70
  // Warning! User attention required.
}
else { // temperature < 60
  // Safe! Continue usual tasks.
}

return

Statemen return  ini digunakan untuk menghentikan fungsi dan mengembalikan nilai dari dari fungsi ke fungsi pemanggil, jika diinginkan.

Syntax

return;
return value;

Parameter

value : Tipe data yang diizinkan: tipe variabel atau konstanta apa pun.

Contoh Kode

Fungsi untuk membandingkan input sensor dengan ambang batas.

int checkSensor() {
  if (analogRead(0) > 400) {
    return 1;
  }
  else {
    return 0;
  }
}

Pernyataan return  berguna untuk menguji bagian kode tanpa harus "mengomentari" sebagian besar kode yang mungkin bermasalah.

void loop() {
  // brilliant code idea to test here
  return;
  // the rest of a dysfunctional sketch here
  // this code will never be executed
}

switch...case

Statemen ini hampir sama seperti ifswitch case mengontrol aliran program dengan mengizinkan programer untuk menentukan kode berbeda yang harus dieksekusi di berbagai kondisi.Secara khusus statemen switch case membandingkan nilai variabel dengan nilai yang ditentukan dalam pernyataan khusus. Ketika sebuah pernyataan ditemukan dengan nilai yang cocok dengan variabel, kode dalam pernyataan tersebut akan di jalankan.

Statemen break akan menghentikan pernyataan switch...case, dan umumnya break digunakan untuk menghentikan program setelah bagian case. Tanpa pernyataan break statemen switch  akan terus melanjutkan program di bawahnya sampai ada sebuah pernyataan break atau akhir pernyatatan switch tercapai.

Syntax

switch (var) {
  case label1:
    // statements
    break;
  case label2:
    // statements
    break;
  default:
    // statements
    break;
}

Parameter

var : sebuah variabel yang nilainya dibandingkan dengan berbagai kasus. Tipe data yang diizinkan: int, char.
label 1, label 2 dst : merupakan konstanta, tipe data yang diizinkan: int, char.

Contoh Kode

switch (var) {
  case 1:
    //do something when var equals 1
    break;
  case 2:
    //do something when var equals 2
    break;
  default:
    // if nothing else matches, do the default
    // default is optional
    break;
}

while

Perulangan while akan berulang terus menerus, dan tak terhingga, sampai ekspresi di dalam tanda kurung, () menjadi salah. Sesuatu harus mengubah variabel yang diuji, atau perulangan while tidak akan pernah keluar. Ini bisa dalam kode Anda, seperti variabel yang bertambah, atau kondisi eksternal, seperti menguji sensor.

Perulangan while dalam pemrograman Arduino

Syntax
while (condition) {
  // statement(s)
}
 
Parameters
condition: ekspresi boolean yang bernilai benar atau salah.

Contoh Kode
var = 0;
while (var < 200) {
  // do something repetitive 200 times
  var++;
}

Dalam contoh di atas dapat di jelaskan ketika nilai var kurang dari 200 maka var akan bertambah terus dan fungsi perulangan while akan tetap berjalan. Jika nilai var = atau lebih dari 200 maka akan keluar dari perulangan while.

Penjelasan lainnya masih dalam pemrograman Arduino khususnya struktur bahasa pemrograman C++ yang digunakan di Arduino diantaranya tentang Operator BooleanSketch atau Baris Program Arduino telah kami tulis di blog ini.