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.
Tantangan
MudahAlarm 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 denganFALLING
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);
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengaturan Waktu Tanpa Delay
1millis()
Jam millis()Waktu dalam unsigned longLED Berkedip Tanpa JedaDua LED, Dua KecepatanLED Berkedip Saat Tombol Mengubah StatusLampu dengan Pengatur Waktu4Pengaturan Waktu yang Presisi
Mengukur dengan micros()Saat millis() Berputar KembaliStopwatch Tombol3Interupsi
Tekanan Tombol yang Luput dari LoopFALLING, RISING, dan CHANGEBerbagi dengan volatileHitung Tekanan Tombol dengan InterupsiLatihan sendiri: Playground Arduino