Menu
CoddyTech

Przełączanie przy każdym naciśnięciu

Część sekcji Wejścia ścieżki Arduino w Coddy. Lekcja 4 z 22.

Do tej pory dioda LED naśladowała przycisk: świeciła, gdy był wciśnięty, i gasła po jego zwolnieniu. Włącznik lampy działa inaczej: naciśnij raz, aby ją włączyć, i naciśnij ponownie, aby ją wyłączyć. To jest przełączanie.

Aby przełączać stan, szkic musi wykryć moment wciśnięcia przycisku: teraz jest wciśnięty, ale nie był wciśnięty, gdy ostatnio uruchomiono loop(). Ten moment nazywa się zboczem. Zachowaj poprzedni odczyt w zmiennej przed setup(), tak jak licznik:

int lastReading = HIGH;

void loop() {
  int reading = digitalRead(2);
  if (reading == LOW && lastReading == HIGH) {
    // przycisk został naciśnięty
  }
  lastReading = reading;
}

Przytrzymanie przycisku utrzymuje odczyt LOW, więc zbocze występuje raz na każde naciśnięcie, niezależnie od tego, jak długo przytrzymujesz przycisk.

Aby odwrócić wartość bool, użyj !, co oznacza „nie”: ledOn = !ledOn; zmienia true na false i odwrotnie.

challenge icon

Wyzwanie

Średni

Przycisk jest podłączony do pinu 2 (INPUT_PULLUP), a dioda LED do pinu 13. Każde naciśnięcie ma przełączać stan diody LED:

  • gdy przycisk zostanie naciśnięty (LOW teraz, HIGH poprzednio), przełącz ledOn
  • zapisz odczyt w lastReading na końcu loop()
  • włącz lub wyłącz diodę LED, aby jej stan odpowiadał ledOn

Naciśnij Run, kilka razy naciśnij przycisk, a następnie Check.

Spróbuj swoich sił

const int buttonPin = 2;
const int ledPin = 13;

bool ledOn = false;
int lastReading = HIGH;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int reading = digitalRead(buttonPin);
  // zmień wartość ledOn na przeciwną, gdy przycisk zostanie naciśnięty
  // zapamiętaj ten odczyt na następny raz
  // włącz lub wyłącz diodę LED zgodnie z wartością ledOn
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Wejścia

Poćwicz samodzielnie: Edytor online Arduino