Sistem interlock pada pemograman digunakan untuk mengunci suatu blok program agar dijalankan hanya satu kali. Penguncian dapat dilakukan dengan flag/bendera, jadi sebelum masuk suatu blok program nilai flag penguncinya diuji dan hanya bisa dilewati jika nilainya cocok. pada arduino algoritma flag arduino (pengunci nilai arduino / interlock arduino) biasanya dideklarasikan sebagai boolean/bool yang bernilai true dan false.
Contoh sketch berikut ini menggunakan sensor analog (bisa dikembangkan untuk sensor dengan basis komunikasi) sebagai input. Sedangkan alarm/buzzer berlaku sebagai output. Tombol berfungsi sebagai konfirmasi bahwa alarm telah disetujui.
Komponen yang digunakan :
- Arduino uno
- Sensor analog (potensio, LM35, water level, flex, dll)
- Buzzer
- Tombol push on
Skema pengujian sistem kunci arduino:
Sketch / koding contoh penggunaan flag pada arduino:
Fungsi utama:
- Alarm hanya hidup jika nilai diluar batas dan belum dikonfirmasi
- Alarm mati jika tombol konfirmasi sudah ditekan
- Sistem alarm dapat kembali berfungsi jika nilai sudah dalam batas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | //Pin #define pinSensor A0 #define pinTombolKonfirmasi 2 #define pinAlarm 13 #define batasAtas 600 #define batasBawah 400 bool sistemNormal = true ; void setup() { pinMode(pinTombolKonfirmasi, INPUT_PULLUP); pinMode(pinAlarm, OUTPUT); Serial.begin(9600); Serial.println( "Alarm pengunci nilai batas (Bandgap interlock) pada arduino" ); } void loop() { int nilaiSensor = analogRead(pinSensor); Serial.print( "Nilai pembacaan sensor : " ); Serial.println(nilaiSensor); if ((nilaiSensor <= batasBawah) || (nilaiSensor >= batasAtas)) //Pembacaan diluar batas { if (sistemNormal) //alarm belum dikonfirmasi { Serial.println( "Pembacaan sensor diluar batas." ); digitalWrite(pinAlarm, HIGH); sistemNormal = false ; } } else //Pembacaan dalam batas { sistemNormal = true ; } if (!digitalRead(pinTombolKonfirmasi)) { Serial.println( "Alarm dikonfirmasi." ); digitalWrite(pinAlarm, LOW); } delay(1000); } |
dalam bentuk lain:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | //Pin #define pinSensor A0 #define pinTombolKonfirmasi 2 #define pinAlarm 13 #define batasAtas 600 #define batasBawah 400 bool Alarm; bool telahKonfirmasi; bool Konfirmasi; void setup() { pinMode(pinTombolKonfirmasi, INPUT_PULLUP); pinMode(pinAlarm, OUTPUT); Serial.begin(9600); Serial.println( "Alarm pengunci nilai batas (Bandgap interlock) pada arduino" ); } void loop() { int nilaiSensor = analogRead(pinSensor); Serial.print( "Nilai pembacaan sensor : " ); Serial.println(nilaiSensor); bool sistemNormal = ((nilaiSensor >= batasBawah) && (nilaiSensor <= batasAtas)); if (!telahKonfirmasi) { Konfirmasi = !digitalRead(pinTombolKonfirmasi); } if (sistemNormal && (!Alarm || (Alarm && Konfirmasi))) { Alarm = false ; telahKonfirmasi = false ; Serial.println( "Status : Sistem normal" ); } else if (sistemNormal && Alarm) { Serial.println( "Status : Sistem normal, belum dikonfirmasi" ); } else if (!sistemNormal && Konfirmasi) { Alarm = false ; telahKonfirmasi = true ; Serial.println( "Status : Sistem tidak normal, telah dikonfirmasi" ); } else if (!sistemNormal && !telahKonfirmasi) { Alarm = true ; Serial.println( "Status : Sistem tidak normal" ); } digitalWrite(pinAlarm, Alarm); delay(1000); } |
mantap mas.. terima kasih atas penjelasannya…