az internet ablakok Android

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

  1. Miért a kísérletben a LED-léptéket a tranzisztor használata nélkül csatlakoztatjuk?
  2. 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?
  3. Annak segítségével, hogy más utasításokat is végrehajthat egy cselekvési egyenértéket ++ PIN. ?
  4. Mi a különbség a típusok változók között int. és aláíratlan int. ?
  5. Mi visszaadja a funkciót millis () ?
  6. 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

  1. Módosítsa a kódot úgy, hogy a LED-ek másodpercenként egyszer kapcsolódjanak.
  2. Ne kapcsolja ki a portokat, hogy a fények csak a középső négy divízióval menekültek.
  3. Távoli a programot, hogy helyette iNT PIN \u003d FIRST_LED_ PIN. + (MS / 120)% 10 A fény mozgása vezeti a ciklust -Ért .
  4. 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
Azt javaslom, hogy változó késedelmet hajtson végre. Így könnyen megváltoztathatod .
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