Button Interrupt

Penjelasan Proyek

Pada proyek ini, kita akan membuat tombol dengan interrupt.

Daftar Komponen

Komponen yang diperlukan yaitu sebagai berikut:

  • Board ESP32

  • Breadboard

  • Push button

  • LED 5 mm berwarna merah dan hijau

  • Resistor 100 Ω

Rangkaian

Rangkaian yang dibuat yaitu sebagai berikut. Button dirangkai dengan konfigurasi rangkaian active-low dengan internal pull-up resistor pada pin GPIO 23. LED merah dirangkai secara active-high ke pin 32 dan LED hijau dirangkai secara active-high ke pin 26.

Kode Program

Kode program yang dibuat yaitu sebagai berikut. Fungsi attachInterrupt() berfungsi untuk menghubungkan pin GPIO input dengan interrupt. Fungsi ini memiliki tiga argumen input yaitu pin GPIO, nama fungsi ISR, dan mode interrupt:

  • pin merupakan nomor pin GPIO yang akan dihubungkan dengan interrupt. Disarankan menggunakan fungsi digitalPinToInterrupt() untuk memasukkan argumen ini.

  • intRoutine merupakan nama fungsi ISR yang kita definisikan.

  • mode merupakan mode trigger interrupt yang akan digunakan. Terdapat lima mode trigger interrupt pada ESP32:

    • LOW: trigger interrupt ketika pin bernilai LOW

    • HIGH: trigger interrupt ketika pin bernilai HIGH

    • CHANGE: trigger interrupt ketika pin berubah nilai dari HIGH menjadi LOW atau LOW menjadi HIGH.

    • FALLING: trigger interrupt ketika pin berubah nilai dari HIGH menjadi LOW.

    • RISING: trigger interrupt ketika pin berubah dari LOW menjadi HIGH.

Fungsi button_isr() akan dipanggil ketika ada interrupt dari button. Fungsi ini akan menyalakan atau mematikan LED merah.

button_interrupt.ino
#define RED_LED_PIN     32
#define GREEN_LED_PIN   26
#define BTNPIN          23

void IRAM_ATTR button_isr()
{
  if (digitalRead(BTNPIN) == LOW)
    digitalWrite(RED_LED_PIN, HIGH);
  else
    digitalWrite(RED_LED_PIN, LOW);
}

void setup()
{
  pinMode(GREEN_LED_PIN, OUTPUT);
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(BTNPIN, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(BTNPIN), button_isr, CHANGE);
}

void loop()
{
  digitalWrite(GREEN_LED_PIN, LOW);
  delay(2000);
  digitalWrite(GREEN_LED_PIN, HIGH);
  delay(2000);emb

Hasil

Hasil dari proyek ini yaitu pada gambar berikut ini. Interrupt menyebabkan LED merah menyala pada saat bersamaan LED hijau berkedip.

Last updated