Menu
CoddyTech

FALLING, RISING, dan CHANGE

Termasuk bagian Pengaturan Waktu Tanpa Delay dalam perjalanan Arduino di Coddy. Pelajaran 13 dari 18.

Uno memiliki dua pin yang dapat memicu interupsi: pin 2 dan pin 3. Tombol yang membutuhkan interupsi harus dihubungkan ke salah satunya. Di dalam chip, keduanya adalah interupsi 0 dan interupsi 1, jadi biarkan digitalPinToInterrupt() mengubah pin menjadi nomornya. attachInterrupt(3, ...) meminta interupsi 3, yang tidak dimiliki Uno, sehingga tidak terjadi apa-apa.

Bagian terakhir dari attachInterrupt() menentukan perubahan yang akan ditanggapi:

  • FALLING: pin berubah dari HIGH ke LOW (dengan pull-up, saat tombol ditekan)
  • RISING: pin berubah dari LOW ke HIGH (saat tombol dilepas)
  • CHANGE: salah satu perubahan tersebut

Dengan CHANGE, ISR berjalan saat tombol ditekan dan saat tombol dilepas. ISR membaca pin untuk mengetahui perubahan mana yang terjadi:

void onChange() {
  if (digitalRead(buttonPin) == LOW) {
    // tombol ditekan
  } else {
    // tombol dilepas
  }
}

attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);
challenge icon

Tantangan

Mudah

Tombol terhubung ke pin 3, dan loop() sibuk dengan pekerjaan yang lambat. Buat LED pada pin 13 mengikuti tombol seketika:

  • di onChange(), baca tombolnya: LOW menyalakan LED, HIGH mematikannya
  • pasang onChange() ke pin tombol dengan CHANGE

Tekan Jalankan, tahan dan lepaskan tombol, lalu tekan Periksa.

Coba sendiri

const int ledPin = 13;
const int buttonPin = 3;

// Berjalan setiap kali pin tombol berubah.
void onChange() {
  // Nyalakan LED saat tombol ditekan, matikan saat tombol dilepas.
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  // Hubungkan onChange() ke pin tombol di sini.
}

void loop() {
  // Proses yang lambat: biarkan seperti ini.
  Serial.println("working");
  delay(2000);
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pengaturan Waktu Tanpa Delay

Latihan sendiri: Playground Arduino