FALLING, RISING ve CHANGE
Coddy'nin Arduino Journey'sinin delay() Kullanmadan Zamanlama bölümünün bir parçası. Ders 13 / 18.
Uno'da kesmeyi tetikleyebilen iki pin vardır: pin 2 ve pin 3. Kesme gerektiren bir düğme bunlardan birine bağlanmalıdır. Çipin içinde bunlar kesme 0 ve kesme 1'dir; bu nedenle pini numarasına dönüştürmek için digitalPinToInterrupt() kullanın. attachInterrupt(3, ...) kesme 3'ü ister; Uno'da böyle bir kesme yoktur ve hiçbir şey olmaz.
attachInterrupt() işlevinin son kısmı, hangi değişikliğe tepki verileceğini belirtir:
FALLING: pinHIGHdeğerindenLOWdeğerine geçer (pull-up kullanıldığında, basma)RISING: pinLOWdeğerindenHIGHdeğerine geçer (bırakma)CHANGE: ikisinden biri
CHANGE ile ISR hem basıldığında hem de bırakıldığında çalışır. Hangisinin gerçekleştiğini öğrenmek için pini okur:
void onChange() {
if (digitalRead(buttonPin) == LOW) {
// butona basıldı
} else {
// buton bırakıldı
}
}
attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);Görev
KolayButon 3 numaralı pine bağlı ve loop() yavaş bir işle meşgul. 13 numaralı pindeki LED'in butonu anında takip etmesini sağla:
onChange()içinde butonu oku:LOWLED'i yakar,HIGHsöndürüronChange()işleviniCHANGEile buton pinine bağla
Run'a bas, butonu basılı tutup bırak, ardından Check'e bas.
Kendin dene
const int ledPin = 13;
const int buttonPin = 3;
// Düğme pininin durumu her değiştiğinde çalışır.
void onChange() {
// Düğmeye basıldığında LED'i yak, bırakıldığında söndür
}
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
// onChange() işlevini burada düğme pinine bağla
}
void loop() {
// yavaş işlem: olduğu gibi bırak
Serial.println("working");
delay(2000);
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
delay() Kullanmadan Zamanlama bölümündeki tüm dersler
Kendi başına pratik yap: Arduino playground