Assalamu’alaikum teman – teman, gimana kabarnya? baik? Alhamdulillah. kali ini kita akan belajar lagi tentang di Uno Uno alias Arduino, pada kesempatan ini kita akan belajar tentang pengggunaan fungsi interrupt / interupsi pada arduino. apa itu interrupt? jawabanya akan kalian dapatkan sendiri setelah selesai membaca artikel ini insyaAllah :2thumbup
Belajar kita kali ini akan kita coba dengan sebuah kasus sederhana, kasusnya yaitu saya mempunyai sebuah program yang sangat sederhana seperti dibawah ini
void setup() { Serial.begin(9600); } void loop() { Serial.println("kode 1"); delay(1000); Serial.println("kode 2"); delay(1000); Serial.println("kode 3"); delay(1000); Serial.println("kode 4"); delay(1000); Serial.println("kode 5"); delay(1000); Serial.println("kode 6"); delay(1000); }
Jika program itu dijalankan maka akan menampilkan karakter, kde 1, kode2 dan seterusnya di serial monitor dengan jeda 1 detik. namun lalu saya ingin menambahkan sebuah logika pada code diatas, logikanya adalah jika push button ditekan maka serial monitor akan segera menampilkan karakter tertentu ( contoh : “sisipkan”)
Okelah, berarti kita perlu membuat dulu rangkaiannya, kurang lebih seperti ini
Kembali lagi bahwa tadi saya ingin menambahkan sebuah logika pada code diatas, logikanya tadi adalah jika push button ditekan maka serial monitor akan segera menampilkan karakter tertentu ( contoh : “sisipkan”)
secara sederhana mungkin kita akan menambahkan code seperti ini
if (digitalRead(2) == LOW) { Serial.println("sisipkan"); }
sehingga kodenya kurang lebih menjadi seperti ini
void setup() { Serial.begin(9600); pinMode(2,INPUT_PULLUP); } void loop() { Serial.println("kode 1"); delay(1000); Serial.println("kode 2"); delay(1000); Serial.println("kode 3"); delay(1000); Serial.println("kode 4"); delay(1000); Serial.println("kode 5"); delay(1000); Serial.println("kode 6"); delay(1000); if (digitalRead(2) == LOW) { Serial.println("sisipkan"); delay(1000); } }
program diatas sudah bisa bekerja, dimana jika push button ditekan maka nantinya akan keluar karakter “sisipka” di serial monitor, namun kita harus menunggu sampai baris kode di bawah ini selesai dieksekusi terlebih dahulu
if (digitalRead(2) == LOW) { Serial.println("sisipkan"); delay(1000); }
atau dalam artian ketika kita menekan push button setelah muncul “kode 1” di serial monitor maka karakter “sisipkan” tidak akan langsung muncul setelah “kode 1” namun “sisipkan” akan muncul setelah “kode 6”, itupun kalau kita masih tetap menahan push buttonnya, misal push button kita lepaskan sesaat setelah serial monitor menampilkan “kode 4” maka karakter “sisipkan” tidak akan di tampilkan.
Kesimpulan dari kasus diatas adalah kita memerlukan sebuah fungsi dimana sebuah logika dapat dieksekusi tanpa menunggu logika yang lain / logika sebelumnya selesai dieksekusi. nah, fungsi interruptlah yang dapat kita gunakan.
kode di bawah ini adalah kode yang dibuat dengan fungsi interrupt yang akan kita gunakan untuk mengatasi kelemahan kode yg tadi kita buat tadi.
void setup() { Serial.begin(9600); pinMode(2,INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(2),fungsiSisip,FALLING); } void fungsiSisip() { Serial.println("sisipan"); delay(1000); } void loop() { Serial.println("kode 1"); delay(1000); Serial.println("kode 2"); delay(1000); Serial.println("kode 3"); delay(1000); Serial.println("kode 4"); delay(1000); Serial.println("kode 5"); delay(1000); Serial.println("kode 6"); delay(1000); }
Nah, dengan kode diatas kita dapat menampilkan karakter “sisipan” kapanpun kita mau. gimana? kereenn kan? :thumbup
Setelah kita tahu tentang asal muasal tujuan penggunaan interrupt, selanjutnya mari kita pelajari tentang cara – cara penggunaanya, untuk menggunakan interrupt kita perlu menambahkan baris seperti ini
attachInterrupt(digitalPinToInterrupt(pin), fungsi, mode);
Dimana,
pin = nomor pin interput yg digunakan
pada percobaan tadi kita menggunakan pin digital 2, karena memang tidak semua pin support digunakan untuk interput, berikut alah nomor pin yg support untuk digunakan sebagai pin interput
BOARD ARDUINO | DIGITAL PINS |
---|---|
Uno, Nano, Mini, (ATmega 328) |
2, 3 |
Mega, Mega2560, MegaADK |
2, 3, 18, 19, 20, 21 |
Micro, Leonardo, other 32u4-based |
0, 1, 2, 3, 7 |
Zero |
Semua pin kecuali pin digital 4 |
MKR1000 Rev.1 |
0, 1, 4, 5, 6, 7, 8, 9, A1, A2 |
Due |
Semua pin |
101 |
semua pin, namun hanya pins 2, 5, 7, 8, 10, 11, 12, 13 yang dapat bekerja dengan mode CHANGE |
fungsi = fungsi yg akan dieksekusi
pada percobaan tadi kita menginginkan nama fungsi “fungsiSisip” untuk dieksekusi
mode = mode deteksi pin yg digunakan
pada percobaan tadi kita menggunakan mode FALLING, dimana mode ini akan membuat interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan dari HIGH ke LOW ( dieksekusi 1 kali pas terjadi perubahan ), ada mode lain yang dapat kita gunakan, mode2 tersebut adalah :
LOW = interrupt akan dieksekusi terus menerus selama pin membaca logika LOW
RISING = interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan dari LOWke HIGH( dieksekusi 1 kali pas terjadi perubahan )
CHANGE = interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan, baik itu dari HIGH ke LOW ataupun LOW ke HIGH ( dieksekusi 1 kali pas terjadi perubahan )
FALIING = interrupt akan dieksekusi jika terjadi perubahan nilai pembacaan dari HIGH ke LOW ( dieksekusi 1 kali pas terjadi perubahan )
Gimana teman – teman? tidak pusing kan? semoga artikel kali ini bermanfaat ya wassalamu’alaikum