OPADAJĄCE, NARASTAJĄCE i ZMIANA
Część sekcji Odmierzanie czasu bez delay() ścieżki Arduino w Coddy. Lekcja 13 z 18.
Uno ma dwa piny, które mogą wywołać przerwanie: pin 2 i pin 3. Przycisk, który wymaga przerwania, musi być podłączony do jednego z nich. Wewnątrz układu są to przerwanie 0 i przerwanie 1, więc użyj digitalPinToInterrupt(), aby zamienić pin na jego numer. attachInterrupt(3, ...) żąda przerwania 3, którego Uno nie ma, więc nic się nie dzieje.
Ostatni argument attachInterrupt() określa, na jaką zmianę reagować:
FALLING: pin zmienia stan zHIGHnaLOW(przy podciąganiu — naciśnięcie)RISING: pin zmienia stan zLOWnaHIGH(zwolnienie przycisku)CHANGE: dowolna z tych zmian
Przy CHANGE procedura ISR uruchamia się zarówno po naciśnięciu, jak i po zwolnieniu przycisku. Odczytuje pin, aby ustalić, która z tych sytuacji nastąpiła:
void onChange() {
if (digitalRead(buttonPin) == LOW) {
// przycisk został wciśnięty
} else {
// przycisk został zwolniony
}
}
attachInterrupt(digitalPinToInterrupt(buttonPin), onChange, CHANGE);Wyzwanie
ŁatwyPrzycisk jest podłączony do pinu 3, a loop() zajmuje się wolnym zadaniem. Spraw, aby dioda LED na pinie 13 natychmiast reagowała na przycisk:
- w
onChange()odczytaj stan przycisku:LOWzapala diodę LED, aHIGHją wyłącza - podłącz
onChange()do pinu przycisku za pomocąCHANGE
Naciśnij Run, przytrzymaj i puść przycisk, a następnie naciśnij Check.
Spróbuj swoich sił
const int ledPin = 13;
const int buttonPin = 3;
// Uruchamia się za każdym razem, gdy zmienia się stan pinu przycisku.
void onChange() {
// zaświeć diodę LED, gdy przycisk jest wciśnięty, i zgaś ją, gdy jest zwolniony
}
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
// tutaj przypisz onChange() do pinu przycisku
}
void loop() {
// powolne zadanie: pozostaw je bez zmian
Serial.println("working");
delay(2000);
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Odmierzanie czasu bez delay()
1millis()
Zegar millis()Czas w typie unsigned longMiganie bez opóźnieniaDwie diody LED, dwa tempaMiganie podczas przełączania przyciskiemŚwiatło na czas4Precyzyjne odmierzanie czasu
Pomiar za pomocą micros()Gdy licznik millis() się przepełniaStoper z przyciskiem3Przerwania
Naciśnięcie, które umyka pętliOPADAJĄCE, NARASTAJĄCE i ZMIANAWspółdzielenie z volatileZliczanie naciśnięć za pomocą przerwańPoćwicz samodzielnie: Edytor online Arduino