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.
Contoh Kode
int threshold = 40;for (int x = 0; x < 255; x++) {analogWrite(PWMpin, x);sens = analogRead(sensorPin);if (sens > threshold) { // bail out on sensor detectx = 0;break;}delay(50);}
continue
for (int x = 0; x <= 255; x ++) {if (x > 40 && x < 120) { // create jump in valuescontinue;}
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.
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 stabilizex = 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.
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 pinint PWMpin = 10; // LED in series with 470 ohm resistor on pin 10void 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;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 herereturn;// the rest of a dysfunctional sketch here// this code will never be executed}
switch...case
Statemen ini hampir sama seperti if. switch 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.
Syntax
switch (var) {case label1:// statementsbreak;case label2:// statementsbreak;default:// statementsbreak;}
Parameter
label 1, label 2 dst : merupakan konstanta, tipe data yang diizinkan: int, char.
Contoh Kode
switch (var) {case 1://do something when var equals 1break;case 2://do something when var equals 2break;default:// if nothing else matches, do the default// default is optionalbreak;}
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.while (condition) {// statement(s)}
var = 0;while (var < 200) {// do something repetitive 200 timesvar++;}
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 Boolean, Sketch atau Baris Program Arduino telah kami tulis di blog ini.