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
//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"); Serial.println("https://www.project.semesin.com/"); } 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:
//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"); Serial.println("https://www.project.semesin.com/"); } 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); }