Arduino

Interupsi Dengan Arduino

Pada Arduino terdapat beberapa mekanisme input di antaranya:

  • input digital dengan fungsi digitalRead()
  • input analog dengan fungsi analogRead()
  • input data serial dengan class Serial, fungsinya di antaranya Serial.read()
  • input digital dengan interupsi melalui fungsi attachInterrupt()

Di antara mekanisme input tersebut, yang mudah dipakai adalah digitalRead() dan analogRead(). Pada tulisan ini dibahas contoh sederhana untuk memakai input interupsi.

Deskripsi perangkat keras:

  • Board prosesor menggunakan Arduino Nano v.3
  • Input dari sebuah switch push button, active low (dihubungkan ke GND)
  • Input dari switch dihubungkan ke pin 2
  • Jumlah penekanan switch dikirim dengan port serial
  • Power supply didapat dari USB

Catatan

  • Pada Arduino Nano hanya pin 2 dan pin 3 saja yang dapat dipakai untuk input interupsi. Pada program ini yang dipakai adalah pin 2.

Cara kerja perangkat lunak

  • Setiap kali switch ditekan, maka pin 2 akan menjadi low
  • Setiap kali pin 2 low, akan muncul interupsi
  • Interupsi menyebabkan fungsi impulse() dipanggil, yang akan menaikkan nilai variabel counter.
  • Pada main loop, isi dari variabel counter dikirim setiap 1 detik.

Berikut ini contoh software yang menggunakan interupsi untuk input.

// ide dari http://www.rhelectronics.net/store/radiation-detector-geiger-counter-diy-kit-second-edition.html
unsigned long counts; //variable for GM Tube events
unsigned long previousMillis; //variable for time measurement

void impulse() { // dipanggil setiap ada sinyal FALLING di pin 2
    counts++;
}

#define LOG_PERIOD 1000  // cetak tiap detik

void setup() { //setup subprocedure
    counts = 0;
    Serial.begin(9600);
    pinMode(2, INPUT);  // tidak perlu sebenarnya, untuk jaga-jaga saja.
    digitalWrite(2, HIGH); // mengaktifkan internal pull up resistor
    attachInterrupt(digitalPinToInterrupt(2), impulse, FALLING); //define external interrupts
    Serial.println("Start counter");
}

void loop() { //main cycle
    unsigned long currentMillis = millis();
    if (currentMillis - previousMillis > LOG_PERIOD) {
        previousMillis = currentMillis;
        Serial.println(counts);
        counts = 0;
    }
}

Pada referensi fungsi attachInterrupt() terdapat contoh program yang menggunakan interupsi, namun di situ belum menggunakan port serial u untuk mengirim data, sehingga hasil penekanan tombol susah diamati.

Berikut ini foto percobaan dengan Arduino Nano dan sebuah switch push button.

Arduino Nano yang dihubungkan ke sebuah switch push button

Arduino Nano yang dihubungkan ke sebuah switch push button

 

Switch push button

Switch push button

Berikut ini contoh data yang dikirim melalui port serial, berisi jumlah penekanan tombol.

Output serial dari program

Output serial dari program

Referensi

Leave a Reply

Your email address will not be published. Required fields are marked *

Powered by: Wordpress