Miganie podczas przełączania przyciskiem
Część sekcji Odmierzanie czasu bez delay() ścieżki Arduino w Coddy. Lekcja 5 z 18.
Szkic, który nigdy nie czeka, może obserwować przycisk i jednocześnie migać. Każda iteracja pętli trwa kilka mikrosekund, więc płytka sprawdza przycisk tysiące razy na sekundę i wykrywa nawet bardzo krótkie naciśnięcie.
Miganie wykorzystuje wzorzec millis(). Przycisk obsługuje wykrywanie zbocza z sekcji Inputs: zareaguj, gdy przycisk jest teraz wciśnięty, a w poprzedniej iteracji pętli nie był. ! oznacza „nie”, więc !wasPressed można odczytać jako „nie był wciśnięty”.
bool wasPressed = false;
void loop() {
// miganie: if (now - previous >= 500) { ... }
bool pressed = digitalRead(buttonPin) == LOW;
if (pressed && !wasPressed) {
// przycisk został właśnie wciśnięty
}
wasPressed = pressed;
}Umieść obie części w loop(), jedną po drugiej, i nie używaj delay() w żadnej z nich. Gdyby miganie czekało 500 ms, naciśnięcie, które zacznie się i skończy podczas oczekiwania, nie zostałoby wykryte.
Wyzwanie
ŚredniSpraw, aby płytka wykonywała dwie czynności jednocześnie:
- czerwona dioda LED na pinie 13 przełącza się co 500 ms, a czas jest mierzony za pomocą
millis() - każde naciśnięcie przycisku przełącza żółtą diodę LED na pinie 12: włącza ją, potem wyłącza, a następnie znów włącza
Krótkie naciśnięcie musi działać w dowolnym momencie, a przytrzymanie przycisku przełącza żółtą diodę tylko raz. Naciśnij Run, krótko naciśnij przycisk, a następnie naciśnij Check.
Spróbuj swoich sił
const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// 1. przełączaj czerwoną diodę LED co 500 ms, używając millis()
// 2. każde naciśnięcie przycisku włącza lub wyłącza żółtą diodę LED
}
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 przyciskiemPoćwicz samodzielnie: Edytor online Arduino