Menu
CoddyTech

Tekanan Tombol yang Luput dari Loop

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

Sebuah sketch terkadang sibuk dengan pekerjaan yang lambat atau delay() yang lama. Perulangan yang membaca tombol hanya di antara pekerjaan akan melewatkan tekanan tombol yang dimulai dan berakhir di dalam satu pekerjaan.

Interrupt mengatasi hal itu: saat pin berubah, board menghentikan pekerjaannya, menjalankan fungsi yang kamu pilih, lalu melanjutkan pekerjaan. Chip memantau pin itu sendiri, bahkan selama delay().

void onPress() {
  digitalWrite(ledPin, HIGH);
}

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(buttonPin), onPress, FALLING);
}

attachInterrupt() menerima tiga hal: interrupt untuk pin tersebut (digitalPinToInterrupt(buttonPin) menemukannya), fungsi yang akan dijalankan, dan waktunya. FALLING adalah saat pin berubah dari HIGH menjadi LOW: dengan pull-up, saat tombol ditekan.

Fungsi ini disebut interrupt service routine, atau ISR. Buat fungsi ini tetap singkat: jangan gunakan delay() dan Serial.

challenge icon

Tantangan

Mudah

Alarm ini memeriksa tombolnya hanya sekali setiap 2 detik, jadi tekan cepat tidak terdeteksi. Buat LED menyala saat tombol ditekan:

  • tulis ISR, onPress(), yang menyalakan LED
  • di setup(), pasangkan ISR ke pin tombol dengan FALLING

Pertahankan tugas lambat di loop(). LED tetap menyala setelah tombol ditekan, seperti alarm. Tekan Jalankan, ketuk tombol, lalu tekan Periksa.

Coba sendiri

const int ledPin = 13;
const int buttonPin = 2;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  // pasang interupsi di sini
}

void loop() {
  // tugas yang lambat: biarkan apa adanya
  Serial.println("working");
  delay(2000);

  // bagian ini hanya memeriksa tombol sekali setiap 2 detik,
  // sehingga tekanan singkat terlewat
  if (digitalRead(buttonPin) == LOW) {
    digitalWrite(ledPin, HIGH);
  }
}
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