Soek Kode

Les 98-8: Looplig met Druktoets en LED's met Arduino

Les 98-8: Looplig met Druktoets en LED's met Arduino

Hierdie projek wys jou hoe om 'n "wandelende lig" te bou wat een stap vorentoe beweeg elke keer wanneer jy 'n drukknop druk. In plaas van 'n lig wat op sy eie tydhouer werk, kry jy direkte, tasbare beheer: elke druk beweeg die verligte LED een posisie vorentoe, en ná die laaste LED keer dit terug na die eerste. Dit is een van die nuttigste boublokke in Arduino-leer, want dit leer jou hoe om 'n digitale inset (die knoppie) te kombineer met 'n roterende toestandmasjien (watter LED tans verlig is) — 'n patroon wat jy voortdurend sal hergebruik.

5 leds on breadboard with push button shown connected to Arduino UNO
5 leds on breadboard with push button shown connected to Arduino UNO

Sodra jy hierdie patroon verstaan, dryf dieselfde logika 'n groot verskeidenheid werklike projekte aan. Hier is 'n paar praktiese idees wat jy daarmee kan bou:

  • 'n Kieslyskeurder op 'n toestel waar elke druk die volgende opsie uitlig.
  • 'n Opeenvolgende stapaanwyser vir 'n masjien of proses (stap 1, stap 2, stap 3...).
  • 'n Telling- of vlakvertoning wat jy met die hand met 'n knoppie vorentoe beweeg.
  • 'n "volgende kanaal" of "volgende modus"-aanwyser vir 'n beligtingsbeheerder.
  • 'n Eenvoudige speletjie of vasvra-zoemer waar spelers om die beurt die volgende lamp verlig.
  • 'n Relais- of lasopeenvolger waar elke druk die volgende uitset in volgorde aktiveer.

Die sleutelvoordeel bo 'n outomatiese lopende lig is beheer: niks gebeur totdat jy druk nie, so die lig beweeg net vorentoe wanneer jy besluit. Die video noem ook dat dieselfde wissel- en opeenvolgingsidee 'n relais kan dryf om 'n WS-lig te skakel of 'n motor te beheer, nie net LEDs nie (in video by 19:52).

Hardeware en Komponente

Die onderdelelys is kort en goedkoop:

  • 'n Arduino-bord (Uno, Nano, Mega, of enige versoenbare bord).
  • Vyf LEDs — 5 mm of 3 mm, enige kleure wat jy wil.
  • Vyf stroombeperkende weerstande, 200 Ω tot 1000 Ω (die video gebruik 1 kΩ).
  • Een drukknopskakelaar ('n momentêre taktiele skakelaar is ideaal).
  • 'n Broodbord en 'n paar DuPont-verbindingsdrade.

'n Vinnige nota oor die LEDs: die katode is die korter been en die kant met die plat rand, terwyl die anode die langer been is (in video by 03:13). Die weerstandwaarde is nie krities nie — 'n hoër weerstand maak die LED eenvoudig dowwer, so enigiets van ongeveer 300 Ω tot 1000 Ω sal goed werk (in video by 05:33).

Bedradingsgids

Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
wiring for Arduino walking light LEDs with push button
wiring for Arduino walking light LEDs with push button

Die bedrading is in wese dieselfde as 'n standaard vyf-LED wandelende lig, met een drukknop bygevoeg. Elke LED se anode verbind met sy eie Arduino-pen, en elke katode verbind deur sy eie weerstand na 'n gedeelde grondrelings op die broodbord. In hierdie bou word die LEDs aan penne 3, 4, 5, 6, en 7 gekoppel (in video by 31:37). Die drukknop word op die broodbord geplaas met een been na grond en die ander been na pen 2 — dieselfde pen wat die kode vir die knoppie gebruik (in video by 37:04).

Omdat die kode die Arduino se interne optrekweerstand aktiveer, is geen eksterne weerstand op die knoppie nodig nie. Wanneer die knoppie nie gedruk word nie, lees die pen HOOG, en wanneer jy dit druk, word die pen na grond getrek en lees LAAG (in video by 14:02).

Kode-verduideliking

Die volledige program is beskikbaar onder hierdie artikel. Hier fokus ons op die dele wat jy werklik sal wil verander.

Bo-aan die skets word elke LED en die knoppie aan 'n pen toegewys. Dit is waar jy die bou aanpas om by jou eie bedrading te pas:

const int pushButtonPin = 2; // push button pin
const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;

int LED_ON = LED1; // which LED is currently lit

Die LED_ON-veranderlike is die hart van die projek. Dit onthou watter LED tans verlig is, en begin by LED1. Elke keer wanneer jy die knoppie druk, beweeg die kode LED_ON na die volgende LED in die volgorde en skakel die vorige een af, so net een LED is ooit op 'n slag verlig.

Daar is ook 'n klein vertraging na elke druk:

delay(200); // debounce / give the user time between presses

Hierdie 200 millisekonde pouse verhoed dat 'n enkele fisiese druk as veelvuldige druk geregistreer word. As jou vinger bewe of die knoppie te sensitief voel, verhoog hierdie getal; as jy vinniger reaksie wil hê, verlaag dit. Wees bewus daarvan dat om dit te laag te stel kan veroorsaak dat die lig onverwags vorentoe spring (in video by 41:20).

Die hoof-logika is in die loop(). Dit lees die knoppie, en slegs wanneer die knoppie gedruk word (lees LOW) beweeg dit die lig aan. Die volgorde gebruik 'n ketting van if / else if-kontroles om van LED1 na LED2 na LED3 te beweeg, en so aan, en keer terug na LED1 ná die laaste een. As jy die rigting of die volgorde van die LEDs wil verander, is dit die blok om te redigeer — hertoewys bloot watter pen op watter een volg.

Lewendige Projek en Demonstrasie

Nadat die kode opgelaai is, laat die druk van die knoppie die eerste LED lig; die loslaat daarvan laat daardie LED aan. Die volgende druk beweeg die lig na die tweede LED, dan die derde, vierde en vyfde, en die volgende druk keer terug na die eerste — 'n deurlopende rotasie (in video by 40:22).

'n Mooi newe-effek van die 200 millisekonde-vertraging is dat as jy die knoppie ingedruk hou, die lig elke 200 millisekondes vanself aanbeweeg, wat die projek effektief in 'n outomatiese wandelende lig verander terwyl die knoppie ingedruk gehou word (in video by 42:07). Los die knoppie en dit stop op die huidige LED. Dit gee jou beide handmatige stepping en handvrye werking vanaf 'n enkele knoppie.

As jy eerder wil hê die lig moet outomaties sonder enige knoppie werk, is dit 'n aparte bou. Die outomatiese weergawe word gedek in Les 98-7: Wandelende Lig met Arduino en 5 LEDs.

Verwante projekte uit hierdie video

Hoofstukke

  • [00:00] Oorsig van die 10 Arduino LED-projekte
  • [01:22] Inleiding tot die Arduino stap-vir-stap kursus
  • [02:29] Verstaan LEDs: simbole, polariteit en penne
  • [03:49] Bereken die LED stroombeperkende weerstand
  • [30:47] Wandelende lig met 5 LEDs: bedrading en beginsel
  • [32:52] Wandelende lig-kode: penne, tydsberekening en lus
  • [36:41] Beweeg die lig met 'n drukking-knoppie
  • [37:44] Wandelende lig met drukking-knoppie: kode-deurloop
  • [40:22] Demonstrasie en aanpassing van die drukvertraging
  • [57:16] Slotopmerkings en kursus-afsluiting

Beelde

wiring for Arduino walking light LEDs with push button
wiring for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
5 leds op broodbord met drukknop wat aan Arduino UNO gekoppel is
5 leds op broodbord met drukknop wat aan Arduino UNO gekoppel is
940-Lessson 98-LED-8: Arduino code walking LED light with push button
Taal: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Lêers📁

Arduino Biblioteke (zip)

Gebruikershandleiding