Szukaj kodu

Lekcja 98-3: Jak włączyć/wyłączyć diodę LED przełączaną przyciskiem za pomocą Arduino

Lekcja 98-3: Jak włączyć/wyłączyć diodę LED przełączaną przyciskiem za pomocą Arduino

Przyciski są wszędzie — w pilotach, urządzeniach AGD i panelach sterowania — a gdy tylko pojedynczy przycisk musi wykonywać więcej niż jedno zadanie, potrzebna jest logika przełączania. Ten projekt pokazuje, jak sprawić, aby jeden przycisk włączał diodę LED przy pierwszym naciśnięciu i wyłączał ją przy następnym, dzięki czemu światło pozostaje dokładnie tam, gdzie je zostawisz. To zachowanie „naciśnij raz, aby zatrzasnąć, naciśnij ponownie, aby zwolnić” jest podstawą niemal każdego przycisku menu, przełącznika zasilania i selektora trybów, jaki kiedykolwiek zbudujesz.

LED with resistor on breadboard connected to Arduino with a push button
Dioda LED z rezystorem na płytce stykowej podłączona do Arduino z przyciskiem

Gdy zrozumiesz przełączanie, ten sam wzorzec kodu skaluje się do prawdziwego sprzętu. Możesz go użyć do:

  • Przełączania przekaźnika sterującego lampą sieciową lub lampką biurkową za pomocą jednego przycisku na panelu.
  • Uruchamiania i zatrzymywania silnika lub pompy jednym przyciskiem zamiast dwóch.
  • Przechodzenia przez tryby pracy urządzenia (na przykład wolno / szybko / wyłączone).
  • Zbudowania alarmu zatrzaskowego, który pozostaje włączony, dopóki ktoś go nie potwierdzi.
  • Utworzenia przycisku wyciszenia dla projektu audio, który pamięta swój stan.
  • Działania jako miękki przełącznik zasilania dla gadżetu zasilanego bateryjnie, zastępując przełącznik mechaniczny.

Instruktor zauważa ten punkt bezpośrednio w filmie (w filmie o 19:52): projekt tak naprawdę wcale nie dotyczy diody LED — chodzi o technikę przełączania, którą możesz zastosować do przekaźnika, sterownika silnika lub dowolnego innego wyjścia.

LED-5mm-green

Sprzęt i komponenty

Lista części jest celowo minimalna, więc to świetny projekt, jeśli dopiero zaczynasz. Potrzebujesz:

  • Płytki Arduino — Uno, Nano lub Mega, wszystkie działają.
  • Jednej diody LED, 3 mm lub 5 mm, dowolnego koloru.
  • Jednego rezystora dla diody LED, od 200 Ω do 1000 Ω. Transkrypcja wyjaśnia uzasadnienie (w filmie o 03:49): dioda LED ma spadek napięcia około 2 V i pobiera około 10 mA, więc przy zasilaniu 5 V pozostałe 3 V musi zostać odłożone na rezystorze. Prawo Ohma daje 3 V ÷ 0,01 A = 300 Ω, a wszystko od 300 Ω do 1000 Ω będzie działać — wyższe wartości po prostu powodują, że dioda LED świeci słabiej.
  • Jednego przycisku. Film pokazuje zarówno mały czteropinowy typu tact, jak i wersję z dłuższymi pinami (w filmie o 12:43). Jeśli nie masz przycisku, zwykły przełącznik też działa — wystarczy znaleźć dwa zaciski, które zamykają i przerywają obwód.
  • Płytki stykowej i kilku przewodów połączeniowych DuPont.

Jedna praktyczna wskazówka z filmu (w filmie o 07:50): czteropinowy przycisk tact ma dwie pary wewnętrznie połączonych pinów. Użyj multimetru w trybie ciągłości, aby znaleźć, które dwa piny wydają sygnał dźwiękowy razem — to jedna strona przełącznika. Podłącz jedną stronę do pinu wejściowego, a drugą do masy.

Przewodnik po połączeniach

Arduino schematic for LED with a push button switch
Schemat Arduino dla diody LED z przyciskiem
Arduino wiring for LED with a push button switch
Połączenia Arduino dla diody LED z przyciskiem

Połączenia są takie same jak w prostych obwodach z diodą LED i przyciskiem, z dodanym przyciskiem. Anoda diody LED (dłuższa nóżka) idzie do pinu 3, a jej katoda (krótsza nóżka, po płaskiej stronie obudowy) łączy się przez rezystor z masą. Przycisk łączy się między pinem 2 a masą — nic więcej nie jest potrzebne, ponieważ kod włącza wewnętrzny rezystor podciągający Arduino.

Warto zrozumieć ten wewnętrzny rezystor podciągający: bez niego pływający pin wejściowy odczytywałby losowe zakłócenia. Włączenie INPUT_PULLUP utrzymuje pin na poziomie 5 V, gdy przycisk jest otwarty, a naciśnięcie przycisku ściąga go do 0 V. Dlatego kod traktuje odczyt LOW jako „naciśnięty” — logika jest odwrócona w porównaniu do zwykłego przełącznika do masy z zewnętrznym rezystorem.

Wyjaśnienie kodu

Pełny szkic jest dostępny poniżej tego artykułu. Tutaj skupimy się na częściach, które faktycznie będziesz chciał zmienić.

Na początku pliku dwa przypisania pinów są zdefiniowane jako stałe. Jeśli przeniesiesz przewody do innych pinów, to jest jedyne miejsce, które musisz edytować:

const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED

Następnie są trzy zmienne stanu. Normalnie nie musisz ich zmieniać, ale warto wiedzieć, co robią:

int pushButtonStatus = 0; // push value from pin 2
int lightStatus = 0;//light status
int pushed = 0;//push status

pushButtonStatus przechowuje surowy odczyt pinu przycisku przy każdym przejściu pętli. lightStatus zapamiętuje, co pin przycisku odczytał w poprzednim przejściu, co pozwala szkicowi wykryć moment nowego naciśnięcia, zamiast reagować w sposób ciągły. pushed to właściwa flaga przełącznika — zmienia się między 0 i 1 i decyduje, czy dioda LED ma być włączona, czy wyłączona.

Samo przełączanie odbywa się za pomocą zgrabnego triku arytmetycznego (w filmie o 18:30). Odjęcie flagi od jedynki odwraca ją: 1 - 0 daje 1, a 1 - 1 daje 0. Tak więc pojedyncza linia odwraca stan za każdym razem, gdy wykryte zostanie nowe naciśnięcie:

pushed = 1-pushed;//toggle the pushed value
delay(100);//give some time for finger to press

Opóźnienie 100 ms jest tam po to, aby pozwolić palcowi oderwać się od przycisku. Bez niego jedno fizyczne naciśnięcie mogłoby zostać policzone kilka razy. Jeśli przycisk wydaje się zawodny lub palec drży, zwiększ tę wartość (w filmie o 40:39).

Warunek, który wyzwala przełączenie, jest kluczem do całego szkicu. Uruchamia się tylko wtedy, gdy przycisk nie jest wciśnięty (HIGH, z powodu rezystora podciągającego) i poprzedni odczyt był LOW — co oznacza, że przycisk został właśnie zwolniony po naciśnięciu:

if(pushButtonStatus == HIGH && lightStatus == LOW){
  pushed = 1-pushed;//toggle the pushed value
  delay(100);//give some time for finger to press
}

Na koniec dioda LED jest sterowana flagą przełącznika, a bieżący odczyt przycisku jest zapisywany do następnego porównania:

lightStatus = pushButtonStatus;
if(pushed == HIGH){
  Serial.println("Light ON");
  digitalWrite(LEDPin, HIGH); //turn the LED ON
}else{
  Serial.println("Light OFF");
  digitalWrite(LEDPin, LOW);//turn the LED OFF
}

Możesz także otworzyć Monitor Szeregowy przy prędkości 9600 bodów, aby obserwować komunikaty "Light ON" i "Light OFF" podczas naciskania przycisku.

Demonstracja na żywo

W filmie (w filmie o 19:41) możesz zobaczyć to zachowanie w akcji: pierwsze naciśnięcie włącza diodę LED i pozostaje ona włączona po zwolnieniu palca. Następne naciśnięcie ją wyłącza i pozostaje wyłączona. Nie ma potrzeby przytrzymywania przycisku, co jest dokładnie różnicą między tym projektem a prostszą wersją "przytrzymaj, aby zaświecić" omówioną w Lekcja 98-2: Jak włączać i wyłączać diodę LED za pomocą przycisku z Arduino.

Film wskazuje również, że możesz zamienić diodę LED na moduł przekaźnika, aby przełączać urządzenia zasilane z sieci, lub na sterownik silnika, aby uruchamiać i zatrzymywać silnik. Logika przełączania się nie zmienia — zmienia się tylko urządzenie wyjściowe.

Inne warianty pokazane w tym samym filmie — ściemnianie diody LED, wzór huśtawki, światło wędrujące, miernik paska napięcia i sygnalizacja świetlna — są omówione w osobnych samouczkach, do których linki znajdują się poniżej.

Powiązane projekty z tego filmu

Rozdziały

  • [00:00] Przegląd 10 projektów z diodami LED
  • [01:00] Wprowadzenie do kursu krok po kroku Arduino
  • [02:29] Podstawy diod LED: symbol, anoda, katoda i obliczanie rezystora
  • [05:53] Projekt 1: Włączanie i wyłączanie diody LED
  • [12:43] Projekt 2: Przycisk steruje diodą LED
  • [17:13] Projekt 3: Przycisk przełącza diodę LED włączoną i wyłączoną
  • [20:12] Projekt 4: Ściemnianie diody LED
  • [23:20] Projekt 5: Ściemnianie diody LED za pomocą przycisku
  • [27:32] Projekt 6: Huśtawka z dwiema diodami LED
  • [30:47] Projekt 7: Światło wędrujące z pięcioma diodami LED
  • [36:41] Projekt 8: Zaawansowane światło wędrujące sterowane przyciskiem
  • [42:25] Projekt 9: Miernik poziomu napięcia LED z potencjometrem
  • [49:25] Projekt 10: Sygnalizacja świetlna Arduino

Obrazy

push-button-and-finger
push-button-and-finger
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
dioda LED z rezystorem na płytce stykowej podłączona do Arduino z przyciskiem
dioda LED z rezystorem na płytce stykowej podłączona do Arduino z przyciskiem
935-Lessson 98-LED-3: Arduino code push button toggles LED ON/OFF
Język: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Pliki📁

Biblioteki Arduino (zip)

Instrukcja obsługi