Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Spraw, 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
}
quiz iconSprawdź się

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()

Poćwicz samodzielnie: Edytor online Arduino