Program External Interrupt Arduino
Pada umumnya, alur program arduino dimulai dari setup() yang dijalankan sekali, kemudian dilanjutkan dengan loop() yang dijalankan berulang-ulang. Namun ada cara untuk menyisipkan program lain saat loop() sedang berjalan, yaitu dengan interrupt. Untuk memicu interrupt bisa memanfaatkan pin-pin tertentu, kalau pada Arduino UNO bisa menggunakan pin 2 atau 3. Terdapat berbagai mode pemicu interrupt, misal RISING (ketika nilai pin berubah dari LOW ke HIGH), FALLING (ketika nilai pin berubah dari HIGH ke LOW), CHANGE (ketika nilai pin berubah). Baiklah kita langsung lihat saja contoh program sederhananya, sebagai berikut:
Program di atas menggunakan Arduino UNO dan pin 2 sebagai pemicu interrupt. Bagian program untuk menambahkan interrupt yaitu attachInterrupt(digitalPinToInterrupt(2), interrupt, RISING);. Parameter pertama yaitu pin pemicu interrupt, parameter kedua yaitu fungsi yang dijalankan ketika interrupt terpicu, sedangkan parameter ketiga yaitu mode interrupt. Dapat kita lihat pada loop() kosong, sehingga tidak melakukan apapun. Ketika interrupt terpicu, kondisi LED internal arduino berubah berlawanan dengan kondisi sebelumnya. Jika HIGH maka menjadi LOW, dan jika LOW maka menjadi HIGH. O iya berikut rangkaiannya, saya menggunakan tinkercad supaya mudah visualisasinya.
Kondisi pin 2 saat ditekan adalah LOW, sedangkan saat tidak ditekan adalah HIGH. Karena mode yang digunakan adalah RISING (LOW ke HIGH), maka interrupt terpicu ketika tombol dilepaskan setelah ditekan. Dan inilah hasilnya:
Sedikit catatan bahwa pada program interrupt jangan menggunakan delay() maupun Serial.print(). Apabila menggunakan variabel yang digunakan bersama di program utama dan program interrupt, deklarasikan dengan kata kunci awal volatile, jika normalnya byte variabel maka ganti dengan volatile byte variabel. Nah cukup sekian ya, kalau mau tahu info lengkapnya bisa dilihat di referensi. Semoga bermanfaat :)
Referensi : http://gammon.com.au/interrupts