Deskripsi
Interrupt ini sangat berguna untuk mengatasi masalah timing pada microcontroller contohnya pada aplikasi pembacaan rotary encoder ataupun input dari user di mana program diharapkan tidak akan terlewat dalam mengambil pulsa rotary encoder sambil dapat mengerjakan hal lain tanpa harus melakukan polling menunggu signal encoder. Bisa juga untuk sensor-sensor yang lain seperti pembacaan klik pada tombol, atau sensor infrared yang membaca jatuhnya coin sambil mikrokontroler masih dapat mengerjakan tugas yang lain.
Syntax
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
- pin : arduino pin
- ISR : merupakan rutin layanan interupsi (Interrupt Service Routine) di mana rutin ini bekerja saat interupsi terjadi. Rutin ini tidak memiliki parameter dan juga tidak mengembalikan nilai pada saat return.
- Mode : merupakan mode kapan interupsi tertrigger:
- LOW: interupsi terjadi saat kondisi logika LOW
- CHANGE: interupsi terjadi saat ada perubahan kondisi logika
- RISING: interupsi terjadi saat ada perubahan dari LOW ke HIGH
- FALLING : interupsi terjadi saat ada perubahan dari HIGH ke LOW
- untuk Arduino Due, Zero dan MKR1000 juga terdapat Mode HIGH: yaitu interupsi terjadi saat kondisi logika HIGH
Tabel berikut adalah nomor-nomor Arduino pin yang dapat digunakan sebagai interrupt beserta Boardnya
| Board | Digital pin yang dapat digunakan sebagai interupsi | Catatan |
| UNO R3, Nano, Mini, other 328-based | 2,3 | |
| UNO R4 Minima, UNO R4 WiFi | 2,3 | |
| UNO WiFi Rev2, Nano Every | semua digital pin | |
| Mega, Mega 2560, Mega ADK | 2, 3, 18, 19, 20, 21 | pin 20 dan 21 tidak dapat digunakan |
| apabila fungsi I2C digunakan | ||
| Micro, Leonardo | 0, 1, 2, 3, 7 | |
| Zero | 0-3, 5-13, A0-A5 | pin 4 tidak dapat digunakan sebagai |
| interrupt | ||
| MKR Family boards | 0, 1, 4, 5, 6, 7, 8, 9, A1, A2 | |
| Nano 33 IoT | 2, 3, 9, 10, 11, 13, A1, A5, A7 | |
| Nano 33 BLE, Nano 33 BLE Sense (Rev 1 & 2) | semua pin | |
| Nano RP2040 Connect | 0-13, A0-A5 | |
| Nano ESP32 | semua pin | |
| GIGA R1 WiFi | semua pin | |
| Due | semua digital pin | |
| 101 | semua digital pin | hanya 2, 5, 7, 8, 10, 11, 12, 13 pada |
| Mode CHANGE |
Returns
Tidak ada
Catatan dan peringatan
Di sini fungsi delay() tidak bekerja dan nilai yang dikembalikan oleh millis() juga tidak akan bertambah. Fungsi data serial juga dapat kehilangan data yang diterima,
Contoh:
const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}
void loop() {
digitalWrite(ledPin, state);
}
void blink() {
state = !state;
}
Terjemahan dan edit dari https://www.arduino.cc/reference/en/language/functions/math/abs/ DELTA ELECTRONIC Paulus Andi Nalwan, ST