Belajar dan Mengenal Fungsi Interrupt pada Arduino

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

Baca Juga  Cara Mengisi / Burning Bootloader Arduino menggunakan USB ASP

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? :sup2:  semoga artikel kali ini bermanfaat ya  :salaman wassalamu’alaikum

Vote and Share your Fell !
  • Fascinated
  • Happy
  • Sad
  • Angry
  • Bored
  • Afraid

About Giri Wahyu Pambudi

Giri Wahyu Pambudi - Seorang Anak Desa yang berkeinginan membangun Indonesia dengan Sedikit Ilmu yang dimiliki
Jumlah Post : 347 Artikel

Artikel Serupa

Check Also

Cara menggunakan Modul deteksi Gas CO MQ7 dengan Arduino