Arduino UNO program futó fények létrehozásához. A WS2812 és az Arduino szalagon futó jelek
Ebben a leckében továbbra is a LED-eknél fogunk dolgozni, de a LED-ek száma 5-re emelkedik, és a tűz hatása. A LED-ek vezérléséhez az Arduino portokkal manipulációkat használunk. Közvetlenül rögzítjük az adatokat az Arduino portokban. Jobb, mint a vezérlő konkrét bemenetei / kimenetei. Ez lehetővé teszi, hogy a műveletet használó LED-ek értékeit hozza létre.
Az Arduino Uno 3 portja van:
- B (digitális bemenetek / kilépés 8-ról 13-ra)
- C (analóg bejárat)
- D (digitális bemenetek / kilépés 0 és 7 között)
Mindegyik portot 3 regiszter vezérli. A DDR-regiszter meghatározza, hogy a láb (PIN) bemenet vagy a kimenet hogyan lesz. A portregiszterrel a PIN-kódot a magas vagy alacsony állapotba helyezheti. A PIN-regiszterrel elolvashatja az Arduino lábak állapotát, amikor a bejáratnál dolgoznak.
Először a B portot használjuk. Először telepítjük a B port összes lábát digitális kimenetként. A B portnak csak 6 lába van. Regisztrációs biteket a Port DDRB-re kell telepíteni az 1-ben, ha a lábat kimenetként (kimenet), és 0-ban használjuk, ha a lábat bemenetként használják (bemenet). A portok bitjei 0 és 7 között vannak, de nem mindig tartalmaznak mind a 8 lábat.
Példa:
DDRB \u003d B00111110; // Adja meg a port portjait C 1-től 5-ig kimenetként, és 0-as bemenetként.
Kérjük, vegye figyelembe, hogy a mikrochip mikrokontrollerek az ellenkezője. 0 bites láb működik, mint kimenet, és 1 - bejárat.
A futó tűz projektünkben 5 üzletet fogunk használni:
DDRB \u003d B00011111; // Állítsa be a port portjait 0 és 4 között, mint a kimenet
A kikötőben lévő értékek rögzítéséhez a Portb regisztert kell használnia. Hurok Az első LED lehet csapat:
Portb \u003d B00000001;
Első és negyedik:
Portb \u003d B00001001;
Most már látja, milyen könnyen bekapcsolhatjuk és kikapcsolhatjuk a LED-eket. Most mondd el a Shift operátorokról
Vannak 2 bináris műszakos üzemeltető: Shear operátor balra<< и оператор сдвига вправо >\u003e. Shift operátor balra<< заставляет все биты сдвигаться влево, соответственно оператор сдвига вправо >\u003e A biteket jobbra váltja.
Példa:
Varo \u003d 1; // 00000001.
Vara \u003d 1.<< 0; // 00000001
Vara \u003d 1.<< 1; // 00000010
Vara \u003d 1.<< 2; // 00000100
Most vissza a programunkhoz, amely az alábbiakban látható. 2 változót kell megadnunk: az első fel le. tartalmaz egy értéket, ahol mozog - felfelé vagy lefelé, és a második cylon. Milyen LED-t világít.
Funkcióban beállít () Meghatározzuk, hogy a lábaknak kijáratként kell működniük.
A program fő ciklusában hurok (), A LED-ek viszont világítanak a változó növelésével cylon., és amikor a legfelsőbb, akkor változó fel le. A 0-as hozzárendelés és a LED-ek viszont fordulnak elő.
Ebben a kísérletben arra kényszerítjük a fényt, hogy futjon a LED skálán.
Kísérleti alkatrészek listája
- 1 Arduino UNO tábla;
- 1 befogadó dömpingtábla;
- 1 LED-es skála;
- 10 ellenállás, 220 ohmos névértékű ellenállások;
- 11 Papa Papa vezeték.
Sématikus rendszer
Rendszer a férfion
VÁZLAT
töltse le vázlat az Arduino IDE-hez// LED skála van csatlakoztatva egy sorban lévő csapok csoportjához. Tiszta neveket adunk az első és az utolsó rúgásokhoz #define first_led_pin 2 #define last_ll_pin 11 Void Setup () (// 10 LED skálán. Meg tudnánk írni Pinmode 10 // Times: mindegyik csapot, De felrobbantja a kódot, és // változik, ami problémásabbat váltott. // Előre jobb a ciklus használata. Végezzük el // PINMODE-t (angolul) minden Pina (Változó PIN) // ) az utolsó befogadó // (<= LAST_LED_PIN), всякий раз продвигаясь к следующему // (++pin увеличивает значение pin на единицу) // Так все пины от 2-го по 11-й друг за другом станут выходами for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin) pinMode(pin, OUTPUT); } void loop() { // получаем время в миллисекундах, прошедшее с момента // включения микроконтроллера unsigned int ms = millis(); // нехитрой арифметикой вычисляем, какой светодиод // должен гореть именно сейчас. Смена будет происходить // каждые 120 миллисекунд. Y % X — это остаток от // деления Y на X; плюс, минус, скобки — как в алгебре. int pin = FIRST_LED_PIN + (ms / 120) % 10; // включаем нужный светодиод на 10 миллисекунд, затем — // выключаем. На следующем проходе цикла он снова включится, // если гореть его черёд, и мы вообще не заметим отключения digitalWrite(pin, HIGH); delay(10); digitalWrite(pin, LOW); }
Magyarázat a CODA-hoz
- Kifejezést használva -Ért Szervezünk ciklusmérővel
. Ebben az esetben, hogy a portokat a kimenetre állítsa be. Egy ilyen ciklus létrehozásához szüksége van:
- Inicializálja a változó számlálót, hozzárendeli eredeti értékét. A mi esetünkben: iNT PIN \u003d FIRST_LED_ PIN. ;
- Adja meg az állapotot, amíg az elérési eredmény ismétlődik. A mi esetünkben: pIN.<= LAST_LED_ PIN. ;
- Határozza meg a szabályt, amellyel a számláló megváltozik. A mi esetünkben ++ PIN. (Lásd alább az üzemeltető számára ++ ).
- Például egy ciklust tehetsz mert (int i \u003d 10, i\u003e 0; i \u003d i - 1) . Ebben az esetben:
- Az I változó hozzárendelt érték 10 ;
- Ez az érték megfelel az állapotnak i\u003e 0 ;
- Ezért a ciklusban elhelyezett kód blokkját először végezzük;
- Érték ÉN. a megadott szabály szerint egy egységenként csökken, és az értéket veszi figyelembe 9 ;
- A kódblokkot másodszor végezzük;
- Minden ismét megismétlődik, és újra az értékig ÉN. egyenlő 0 ;
- Mikor ÉN. egyenlő lesz 0 , Feltétel i\u003e 0 nem fejeződött be, és a ciklus végrehajtása véget ér;
- A vezérlő a ciklus után a kódot fogja elérni -Ért ;
- Helyezze a kódot, amelyet hurok, egy pár göndör zárójel között {} Ha több utasítással rendelkezik;
- Az üzemeltetőben kijelölt mérő változó -Ért a ciklus belsejében használható. Például ebben a kísérletben pIN. következetesen 2-től 11-ig terjedő értékeket vesz igénybe, és továbbítják pinmode. Lehetővé teszi a 10 port beállítása egy sorban a ciklusban;
- A változók számlálók csak a cikluson belül láthatóak. Azok. Ha fordul pIN. A ciklus előtt vagy után a fordító hibát ad a be nem jelentett változó tekintetében;
- Tervezés i \u003d I - 1 A fenti magyarázat nem egyenlet! A hozzárendelési szolgáltatót használja a változóhoz ÉN. Helyezze az értéket az aktuális értékkel ÉN. csökkent 1 ;
- Kifejezés ++ PIN. - Ez az úgynevezett. operátor növekedés A változóra alkalmazzák pIN. . Ez az utasítás ugyanazt az eredményt adja, mint PIN \u003d pin + 1;
- Hasonló a növekmény munkatársához dekerent - - az egységenkénti érték csökkentése. További információ erről az aritmetikai műveletekről szóló cikkről;
- Adattípus aláíratlan int. Az egész számok tárolására szolgál, azaz azaz csak nem negatív . Az extra bit miatt, amelyet már nem használnak a jel tárolására, az ilyen típusú értékváltozóban tárolhatunk 65 535 ;
- Funkció millisz. Visszaadja a mikrokontroller beillesztése vagy újraindítása óta eltelt milliszekundumok számát. Itt használjuk a LED-ek közötti váltás idejét;
- Kifejezést használva (MS / 120)% 10 Meghatározzuk, hogy 10 LED-t kell égetni. Pramrazing, meghatározzuk, hogy melyik hosszúságú 120 ms hosszú, és mi a száma a jelenlegi tízben. A szegmens szegmensének számát adjuk hozzá a portszámhoz, amely az aktuális készletben először kiállt;
- Amit segítünk a LED segítségével digitalwrite (PIN, Alacsony) Összesen 10 ms bekapcsolása után nem észrevehető a szem, mert Hamarosan ismét kiszámítják, hogy melyik LED-ek bekapcsolódnak, és bekapcsolják - csak megváltották, vagy a következő.
Kérdések a saját ellenőrzéséhez
- Miért a kísérletben a LED-léptéket a tranzisztor használata nélkül csatlakoztatjuk?
- Ha csak az 5, 6, 7, 8, 9, 9, 6, 7, 8, 9 porton szerepelt, mi lenne szükség a program megváltoztatására?
- Annak segítségével, hogy más utasításokat is végrehajthat egy cselekvési egyenértéket ++ PIN. ?
- Mi a különbség a típusok változók között int. és aláíratlan int. ?
- Mi visszaadja a funkciót millis () ?
- Hogyan számoljuk fel ezt a kísérletet, kiszámítjuk a portszámot, amelyre be kell kapcsolnia a LED-et?
Feladatok az önálló döntésekhez
- Módosítsa a kódot úgy, hogy a LED-ek másodpercenként egyszer kapcsolódjanak.
- Ne kapcsolja ki a portokat, hogy a fények csak a középső négy divízióval menekültek.
- Távoli a programot, hogy helyette iNT PIN \u003d FIRST_LED_ PIN. + (MS / 120)% 10 A fény mozgása vezeti a ciklust -Ért .
- A vezetékek megváltoztatása nélkül változtassa meg a programot úgy, hogy a fény az ellenkező irányba futott.
Sématikus rendszer
Rendszer a rétegen
jegyzet
Felhívjuk figyelmét, hogy ebben a kísérletben az ellenállások a katódok és a föld között vannak felszerelve, ellentétben a Pulsar kísérletével.
Mi csatlakoztassa a LED-ek a digitális portok, kezdve a port 2. tudjuk használni portok 0 és 1, de ezek a csatornák adatátviteli csatornák és az egyes reflashing fedélzeten kell kikapcsolni a csatlakoztatott készülékek őket.
Vázlat
Az UNIVEDED INT adattípusokat az egész számok tárolására használják jelek nélkül, azaz csak nem negatív. Az extra bit miatt, amelyet jelenleg nem használnak a jel tárolására, az ilyen típusú értékváltozóban 65.535-re tárolhatunk.
A kifejezés (ms / 120)% 10 alkalmazásával meghatározzuk, hogy a 10 LED-nek melyik LED-nek kell égnie. Pramrazing, meghatározzuk, hogy melyik hosszúságú 120 ms hosszú, és mi a száma a jelenlegi tízben. Adjuk hozzá a szegmens szegmensszámát a portszámhoz, amely az aktuális készletben először kiállt.
Az a tény, hogy a LED a Digitalwrite (PIN, Alacsony), mindössze 10 ms, miután bekapcsolt állapotban van, nem észrevehető a szem, mert Hamarosan ismét kiszámítják, hogy melyik LED-ek bekapcsolódnak, és bekapcsolják - csak megváltották, vagy a következő.
Kérdések a saját ellenőrzéséhez
Miért a kísérletben a LED-léptéket a tranzisztor használata nélkül csatlakoztatjuk?
Ha csak az 5, 6, 7, 8, 9, 9, 6, 7, 8, 9 porton szerepelt, mi lenne szükség a program megváltoztatására?
Amelyek más utasításokkal végezhetnek ++ PIN-kóddal egyenértékű műveletet?
Mi a különbség az int és az aláírás nélküli int változók között?
Mi visszaadja a Millis () funkciót?
Hogyan számoljuk fel ezt a kísérletet, kiszámítjuk a portszámot, amelyre be kell kapcsolnia a LED-et?
Ebben a leckében továbbra is a LED-eknél fogunk dolgozni, de a LED-ek száma 5-re emelkedik, és a tűz hatása. A LED-ek vezérléséhez az Arduino portokkal manipulációkat használunk. Közvetlenül rögzítjük az adatokat az Arduino portokban. Jobb, mint a vezérlő konkrét bemenetei / kimenetei. Ez lehetővé teszi, hogy a műveletet használó LED-ek értékeit hozza létre.
Az Arduino Uno 3 portja van:
B (digitális bemenetek / kilépés 8-ról 13-ra)
C (analóg bejárat)
D (digitális bemenetek / kilépés 0 és 7 között)
Mindegyik portot 3 regiszter vezérli. Ddr regiszter Meghatározza, hogy a láb lesz (PIN) bemenet vagy kimenet. A portregiszterrel az állapotba telepíthető PIN-kódot Magas vagy Alacsony.. A PIN-regiszterrel elolvashatja az Arduino lábak állapotát, amikor a bejáratnál dolgoznak.
Először a B portot használjuk. Először telepítjük a B port összes lábát digitális kimenetként. A B portnak csak 6 lába van. Regisztrációs biteket a Port DDRB-re kell telepíteni az 1-ben, ha a lábat kimenetként (kimenet), és 0-ban használjuk, ha a lábat bemenetként használják (bemenet). A portok bitjei 0 és 7 között vannak, de nem mindig tartalmaznak mind a 8 lábat.
Példa:
DDRB \u003d B00111110; // Adja meg a port portjait C 1-től 5-ig kimenetként, és 0-as bemenetként.
Kérjük, vegye figyelembe, hogy a mikrochip mikrokontrollerek az ellenkezője. 0 bites láb működik, mint kimenet, és 1 - bejárat.
A futó tűzünkben 5 kimenetet fogunk használni:
DDRB \u003d B00011111; // állítsa be a port portjait 0 és 4 között
A kikötőben lévő értékek rögzítéséhez a Portb regisztert kell használnia.
Hurok Az első LED lehet csapat:
Portb \u003d B00000001;
Első és negyedik:
Portb \u003d B00001001;
Most már látja, milyen könnyen bekapcsolhatjuk és kikapcsolhatjuk a LED-eket. Most mondd el a Shift operátorokról
Vannak 2 bináris műszakos üzemeltető: Shear operátor balra<< и оператор сдвига вправо >\u003e. Shift operátor balra<< заставляет все биты сдвигаться влево, соответственно оператор сдвига вправо >\u003e A biteket jobbra váltja.
Példa:
varo \u003d 1; // 00000001.
Vara \u003d 1.<< 0; // 00000001
Vara \u003d 1.<< 1; // 00000010
Vara \u003d 1.<< 2; // 00000100
Most vissza a programunkhoz, amely az alábbiakban látható.
Meg kell adnunk 2 változót: Az első legújabban tartalmaz egy értéket, ahol mozoghat - felfelé vagy lefelé, és a fényt jelző második cylon.
Funkcióban beállít () Meghatározzuk, hogy a lábaknak kijáratként kell működniük.
A program fő ciklusában hurok (), A LED-ek viszont világítanak a változó növelésével cylon., és amikor a legfelsőbb, akkor változó fel le. A 0-as hozzárendelés és a LED-ek viszont fordulnak elő.
/ * Futás tüzet. 5 LED * / UNIDNED CHAN UPDOWN \u003d 1; // Indítsa el a mozgás nélküli charon \u003d 0 mozgását; // meghatározza a LED VOID SETUP () () (DDRB \u003d B00011111; // A B portot 0-tól 4-ig állítsa ki) Void Loop () (ha (frissítés \u003d\u003d 1) (// Ha megyünk fel, akkor Cylon ++; ha (ha (cylon\u003e \u003d 4) frissítés \u003d 0; //, amikor eléri a legnagyobb LED-számot, akkor a következő. A ciklus lefelé halad (Cylon--; ha (cylon \u003d\u003d 0) Updown \u003d 1; // Amikor elérte a legkisebb LED-számot, a következő. Ciklus Up Up) Portb \u003d 1<< cylon; //сдвиг delay(200); // пауза 200 мс }
Kapunk egy kicsit több Perky LED-t. Hozzunk létre az ARDUINO LED-ekkel, amelyek balról jobbra és jobbra villognak, és nem egy, hanem nyolc darabot használnak. Létezzük a LED-ek villogását 1-2-3-4-5-6-7-8-7-6-5-4-3-2-1-2-3 - ... a késedelem egy másodpercig.
Szükséged lesz:
- A szabványos Arduino beállításai (számítógép, kábel, uno vagy kompatibilis)
- 8 fénykibocsátó dióda.
- 8 ellenállások 360 ohm 0,25 W. Ellenállások szükségesek az aktuális LED-ek korlátozásához.
- Készítsen Plata-t és csatlakoztassa a vezetéket
A Massimo Bankok könyvében leírt "villogó LED" projektben digitális kimenetet használtunk 13. Ezúttal a 2-9. A LED anód, majd csatlakoztassa a csatlakozóvezeték ellenállás 360 om ellenállást és a LED-es további katódot a Földhez. Lásd az alábbi sémát:
Most az Ön feladata, hogy kódot írjon! De mielőtt ezt megtenné, meg kell írnia a munkatervet vagy az algoritmust. Például, erre a gyakorlatra írhatsz valamit, mint ...
0,1 A program algoritmusa.
Telepítse az összes kapcsolatot, amelyet kimenetként fogunk használni
Hozzon létre egy változót a késleltetési időtartam tárolásához milliszekundumban
Elkezdjük a végtelenül ismételt ciklust
kapcsolja be a kapcsolatot 2, várjon a késleltetési időre, kapcsolja ki
kapcsolja be a 3 érintkezőt, várjon a beállított késleltetési időre, kapcsolja ki
Ismételje meg ezeket a műveleteket más kimenetekre - 4-től 9-ig
Ezután tegye ugyanezt, de az ellenkező irányba a 3
Végtelen ciklus vége
Mi történt veled? Nincs szörnyű, ha nincs semmi történt. Így megtanulsz. De az alábbi idő mentéséhez, a rendszer kódja megmutatja..
int del \u003d 100; // beállítja az alapértelmezett késleltetési időt, 100 milliszekundumot (egy tizedik másodperc)
Void Setup ()
{
// inicializálja a digitális csapokat kimenetként:
// később ott lesz könnyebb módja ennek
Pinmode (2, kimenet);
Pinmode (3, kimenet);
Pinmode (4, kimenet);
Pinmode (5, kimenet);
Pinmode (6, kimenet);
Pinmode (7, kimenet);
Pinmode (8, kimenet);
Pinmode (9, kimenet);
}
// A hurok () módszer végtelenül megismétli, amíg kikapcsolja a teljesítményt
Void hurok ()
{
Digitalwrite (2, magas); // kapcsolja be a LED-ot a 2. csapon
Késleltetés (del); // várjon (a "del" értéke alapján határozott hossz)
Digitalwrite (2, alacsony); // Kapcsold ki
Késleltetés (del); // Várjon.
Késleltetés (del); // Várjon.
Késleltetés (del); // Várjon.
Késleltetés (del); // Várjon.
Késleltetés (del); // Várjon.
Késleltetés (del); // Várjon.
Digitalwrite (9, magas); // kapcsolja be a LED-et a 9. ponton
Késleltetés (del); // Várjon.
Digitalwrite (9, alacsony); // Kapcsold ki
Digitalwrite (8, magas); // kapcsolja be a LED-et a 8-as csapon
Késleltetés (del); // Várjon.
Digitalwrite (8, alacsony); // Kapcsold ki
Digitalwrite (7, magas); // kapcsolja be a LED-et a PIN-kódon 7
Késleltetés (del); // Várjon.
Digitalwrite (7, alacsony); // Kapcsold ki
Digitalwrite (6, magas); // kapcsolja be a LED-et a 6. ponton
Késleltetés (del); // Várjon.
Digitalwrite (6, alacsony); // Kapcsold ki
Digitalwrite (5, magas); // kapcsolja be a LED-et az 5. tűben
Késleltetés (del); // Várjon.
Digitalwrite (5, alacsony); // Kapcsold ki
Digitalwrite (4, magas); // kapcsolja be a LED-et a 4. ponton
Késleltetés (del); // Várjon.
Digitalwrite (4, alacsony); // Kapcsold ki
Digitalwrite (3, magas); // kapcsolja be a LED-et a 3. csapon
Késleltetés (del); // Várjon.
Digitalwrite (3, alacsony); // Kapcsold ki