Gaitas gaismas uz arduino. Darbojas pagrieziena rādītāji uz WS2812 lentes un Arduino

Gaitas gaismas uz arduino. Darbojas pagrieziena rādītāji uz WS2812 lentes un Arduino

22.08.2023

Mēs izgatavojam gaitas lukturus no Arduino gaismas diodēm. Šajā gadījumā tiek izmantots Arduino Mega 2560, kas potenciāli spēj vadīt 54 LED skrejceliņu. Bet shēma un programma nemainīsies, ja izmantosit citus kontrolierus no šāda veida Arduino platformas (UNO, Leonardo...)

Gaismas diožu pieslēguma shēma Arduino Mega 2560.

Šādi skice izskatās standarta Arduino programmēšanas lietojumprogrammas logā.

Programmas teksts gaitas lukturu ieviešanai Arduino platformā.

int first_out = 11; //pirmā diskrētā izvade

int last_out = 13; //pēdējā diskrētā izvade

//bloks ieeju/izeju un citu sākotnējo datu inicializācijai

pēdējais_izlaidums = pēdējais_izlaidums + 1; //pievienojiet vienu, lai pareizi lietotu cilpas

//noteikt Arduino plates 11., 12. un 13. diskrēto tapu kā izvadi

for (i = pirmais_ārējais; i< last_out; i++) { pinMode(i, OUTPUT); }

for (t = pirmais_ārējais; t< last_out; t++) { //перебираем номера дискретных выходов 11,12,13 поочереди

digitalWrite(t, HIGH); //izgaismojiet nākamo LED

kavēšanās (500); //aizkavēšanās 500 ms

for (i = pirmais_ārējais; i< last_out; i++) { digitalWrite(i, LOW); }//гасим все светодиоды

Lai palielinātu kontrolējamo gaismas diožu skaitu vītnē, programmai vienkārši jāaizstāj mainīgo first_out un last_out. Pirmais mainīgais saglabā kontroliera sākotnējo diskrēto izvadi, bet otrais mainīgais saglabā pēdējo no secīgo izeju grupas. Piemēram, ja mēs vēlamies savienot 10 gaismas diodes vītnē, mēs ievadām šādas vērtības: first_out = 4, pēdējais_ārējais = 13. Un Gaismas diodes uz tapām secībā no 4. līdz 13.. Un labāk nepieskarties diskrēto ieeju-izeju pirmajam un otrajam kontaktam, jo ​​datoram pievienotais usb ports tiem traucē.

Šajā apmācībā mēs turpināsim strādāt ar gaismas diodēm, bet palielināsim gaismas diožu skaitu līdz 5. Un mēs radīsim plūstošas ​​uguns efektu. Lai kontrolētu gaismas diodes, mēs izmantosim Arduino porta manipulācijas. Mēs tieši ierakstīsim datus Arduino portos. Tas ir labāk nekā darbs ar īpašām kontrollera ieejām/izejām. Tas ļaus iestatīt gaismas diožu vērtības ar vienu darbību.

Arduino UNO ir 3 porti:
B (digitālās ieejas/izejas no 8 līdz 13)
C (analogās ieejas)
D (digitālā I/O no 0 līdz 7)

Katru portu kontrolē 3 reģistri. Reģistrējieties DDR nosaka, kāda kāja (tapa) būs ievade vai izvade. Izmantojot PORT reģistru, varat iestatīt tapu stāvoklī AUGSTS vai LOW. Izmantojot PIN reģistru, varat nolasīt Arduino kāju stāvokli, kad tās tiek ievadītas.

Mēs izmantosim portu B. Pirmkārt, mums ir jāiestata visas B porta tapas kā digitālās izejas. Portam B ir tikai 6 tapas. Reģistra biti DDRB B portam ir jāiestata uz 1, ja kāju izmantos kā IZJUMU, un uz 0, ja kāju izmantos kā IEEJA. Porta biti ir numurēti no 0 līdz 7, taču tie ne vienmēr satur visas 8 kājas.
Piemērs:
DDRB = B00111110; // iestatiet porta B tapas no 1 līdz 5 kā izejas un 0 kā ieeju.

Lūdzu, ņemiet vērā, ka mikroshēmu mikrokontrolleros ir pretējais. 0 bits - kāja darbojas kā izeja, un 1 - kā ieeja.

Mūsu ugunsdzēsības projektā mēs izmantosim 5 kontaktligzdas:
DDRB = B00011111; // iestatiet porta B tapas no 0 līdz 4 kā izejas

Lai rakstītu vērtības portā B, jums jāizmanto PORTB reģistrs.
Jūs varat iedegt pirmo LED ar komandu:
PORTB=B00000001;
pirmais un ceturtais:
PORTB=B00001001;

Tagad jūs redzat, cik vienkārši mēs varam ieslēgt un izslēgt gaismas diodes. Tagad parunāsim par maiņas operatoriem

Ir 2 binārās maiņas operatori: kreisās maiņas operators<< и оператор сдвига вправо >>. Kreisās maiņas operators<< заставляет все биты сдвигаться влево, соответственно оператор сдвига вправо >> pārbīda bitus pa labi.

Piemērs:
varA = 1; // 00000001
varA = 1<< 0; // 00000001
varA = 1<< 1; // 00000010
varA = 1<< 2; // 00000100

Tagad atgriezieties pie mūsu programmas, kas ir parādīta zemāk.
Mums jāievieš 2 mainīgie: pirmajā upDown būs vērtība, kur pārvietoties — uz augšu vai uz leju, un otrajā cilindrā, kuras gaismas diodes jāiedegas.

Funkcijā uzstādīt() mēs definējam, kurām kājiņām jādarbojas kā izvadiem.

Galvenajā programmas cilpā cilpa (), gaismas diodes iedegas pēc kārtas, palielinot mainīgo cilindrs, un, kad tas sasniedz augstāko, tad mainīgais uz augšu uz leju ir piešķirts 0, un gaismas diodes iedegas pārmaiņus uz leju.

/* Skrienoša uguns. 5 LED */ neparakstīts char upDown=1; // sākt virzīties uz augšu unsigned char cylon=0; // nosaka LED secību void setup() ( DDRB = B00011111; // iestata portu B 0 līdz 4 kā izejas ) void loop() ( if(upDown==1)( // ja mēs ejam uz augšu, tad cylon++; if ( cylon>=4) upDown=0; // kad sasniegts augstākais LED skaitlis, tad nākamajā cilpā iet uz leju ) else ( cylon--; if(cylon==0) upDown=1; // kad zemākais Tiek sasniegts gaismas diodes numurs, tad nākamajā ciklā mēs ejam uz augšu) PORTB = 1<< cylon; //сдвиг delay(200); // пауза 200 мс }

Šajā apmācībā mēs turpināsim strādāt ar gaismas diodēm, bet palielināsim gaismas diožu skaitu līdz 5. Un mēs radīsim plūstošas ​​uguns efektu. Lai kontrolētu gaismas diodes, mēs izmantosim Arduino porta manipulācijas. Mēs tieši ierakstīsim datus Arduino portos. Tas ir labāk nekā darbs ar īpašām kontrollera ieejām/izejām. Tas ļaus iestatīt gaismas diožu vērtības ar vienu darbību.

Arduino UNO ir 3 porti:

  • B (digitālās ieejas/izejas no 8 līdz 13)
  • C (analogās ieejas)
  • D (digitālā I/O no 0 līdz 7)

Katru portu kontrolē 3 reģistri. DDR reģistrs nosaka, vai kājiņa (tapa) būs ieeja vai izeja. PORT reģistru var izmantot, lai iestatītu tapu uz HIGH vai LOW. Izmantojot PIN reģistru, varat nolasīt Arduino kāju stāvokli, kad tās tiek ievadītas.

Mēs izmantosim portu B. Pirmkārt, mums ir jāiestata visas B porta tapas kā digitālās izejas. Portam B ir tikai 6 tapas. Reģistra biti DDRB B portam ir jāiestata uz 1, ja kāju izmantos kā IZJUMU, un uz 0, ja kāju izmantos kā IEEJA. Porta biti ir numurēti no 0 līdz 7, taču tie ne vienmēr satur visas 8 kājas.

Piemērs:

DDRB = B00111110; // iestatiet porta B tapas no 1 līdz 5 kā izejas un 0 kā ieeju.

Lūdzu, ņemiet vērā, ka mikroshēmu mikrokontrolleros ir pretējais. 0 bits - kāja darbojas kā izeja, un 1 - kā ieeja.

Mūsu ugunsdzēsības projektā mēs izmantosim 5 kontaktligzdas:

DDRB = B00011111; // iestatiet porta B tapas no 0 līdz 4 kā izejas

Lai rakstītu vērtības portā B, jums jāizmanto PORTB reģistrs. Jūs varat iedegt pirmo LED ar komandu:

PORTB=B00000001;
pirmais un ceturtais:
PORTB=B00001001;

Tagad jūs redzat, cik vienkārši mēs varam ieslēgt un izslēgt gaismas diodes. Tagad parunāsim par maiņas operatoriem

Ir 2 binārās maiņas operatori: kreisās maiņas operators<< и оператор сдвига вправо >>. Kreisās maiņas operators<< заставляет все биты сдвигаться влево, соответственно оператор сдвига вправо >> pārbīda bitus pa labi.

Piemērs:

VarA = 1; // 00000001
varA = 1<< 0; // 00000001
varA = 1<< 1; // 00000010
varA = 1<< 2; // 00000100

Tagad atgriezieties pie mūsu programmas, kas ir parādīta zemāk. Mums jāievieš 2 mainīgie: pirmais uz augšu uz leju saturēs vērtību, kur pārvietoties - uz augšu vai uz leju, un otrā cilindrs kādas gaismas diodes apgaismot.

Funkcijā uzstādīt() mēs definējam, kurām kājiņām jādarbojas kā izvadiem.

Galvenajā programmas cilpā cilpa (), gaismas diodes iedegas pēc kārtas, palielinot mainīgo cilindrs, un, kad tas sasniedz augstāko, tad mainīgais uz augšu uz leju ir piešķirts 0, un gaismas diodes iedegas pārmaiņus uz leju.

Arduino iesācējiem

Šajā apmācībā mēs turpināsim strādāt ar gaismas diodēm, bet mēs palielināsim LED skaitu līdz 5. Un mēs to darīsim skriešanas uguns efekts. Lai kontrolētu gaismas diodes, mēs izmantosim Arduino porta manipulācijas. Mēs tieši ierakstīsim datus Arduino portos. Tas ir labāk nekā darbs ar īpašām kontrollera ieejām/izejām. Tas ļaus iestatīt gaismas diožu vērtības ar vienu darbību.

Arduino UNO ir 3 porti:

  • B (digitālās ieejas/izejas no 8 līdz 13)
  • C (analogās ieejas)
  • D (digitālā I/O no 0 līdz 7)

Katru portu kontrolē 3 reģistri. DDR reģistrs nosaka, vai kājiņa (tapa) būs ieeja vai izeja. PORT reģistru var izmantot, lai iestatītu tapu uz HIGH vai LOW. Izmantojot PIN reģistru, varat nolasīt Arduino kāju stāvokli, kad tās tiek ievadītas.

Mēs izmantosim portu B. Pirmkārt, mums ir jāiestata visas B porta tapas kā digitālās izejas. Portam B ir tikai 6 tapas. Reģistra biti DDRB B portam ir jāiestata uz 1, ja kāju izmantos kā IZJUMU, un uz 0, ja kāju izmantos kā IEEJA. Porta biti ir numurēti no 0 līdz 7, taču tie ne vienmēr satur visas 8 kājas.

Piemērs:

DDRB = B00111110; // iestatiet porta B tapas no 1 līdz 5 kā izejas un 0 kā ieeju.

Lūdzu, ņemiet vērā, ka mikroshēmu mikrokontrolleros ir pretējais. 0 bits - kāja darbojas kā izeja, un 1 - kā ieeja.

Mūsu ugunsdzēsības projektā mēs izmantosim 5 kontaktligzdas:

DDRB = B00011111; // iestatiet porta B tapas no 0 līdz 4 kā izejas

Lai rakstītu vērtības portā B, jums jāizmanto PORTB reģistrs. Jūs varat iedegt pirmo LED ar komandu:

PORTB=B00000001;
pirmais un ceturtais:
PORTB=B00001001;

Tagad jūs redzat, cik vienkārši mēs varam ieslēgt un izslēgt gaismas diodes. Tagad parunāsim par maiņas operatoriem

Ir 2 binārās maiņas operatori: kreisās maiņas operators<< и оператор сдвига вправо >>. Kreisās maiņas operators<< заставляет все биты сдвигаться влево, соответственно оператор сдвига вправо >> pārbīda bitus pa labi.

Piemērs:

varA = 1; // 00000001
varA = 1<< 0; // 00000001
varA = 1<< 1; // 00000010
varA = 1<< 2; // 00000100

Tagad atgriezieties pie mūsu programmas, kas ir parādīta zemāk. Mums jāievieš 2 mainīgie: pirmais uz augšu uz leju saturēs vērtību, kur pārvietoties - uz augšu vai uz leju, un otrā cilindrs kādas gaismas diodes apgaismot.

Funkcijā uzstādīt() mēs definējam, kurām kājiņām jādarbojas kā izvadiem.

Galvenajā programmas cilpā cilpa (), gaismas diodes iedegas pēc kārtas, palielinot mainīgo cilindrs, un, kad tas sasniedz augstāko, tad mainīgais uz augšu uz leju ir piešķirts 0, un gaismas diodes iedegas pārmaiņus uz leju.

Kods: /* Ugunsgrēks. 5 LED */ neparakstīts char upDown=1; // sākt virzīties uz augšu unsigned char cylon=0; // nosaka LED secību void setup() ( DDRB = B00011111; // iestata portu B 0 līdz 4 kā izejas ) void loop() ( if(upDown==1)( // ja mēs ejam uz augšu, tad cylon++; if ( cylon>=4) upDown=0; // kad sasniegts augstākais LED skaitlis, tad nākamajā cilpā iet uz leju ) else ( cylon--; if(cylon==0) upDown=1; // kad zemākais Tiek sasniegts gaismas diodes numurs, tad nākamajā ciklā mēs ejam uz augšu) PORTB = 1<< cylon; //сдвиг delay(200); // пауза 200 мс

Šajā eksperimentā mēs iedarbinām gaismu pa LED skalu.

EKSPERIMENTA DAĻU SARAKSTS

- 1 Arduino Uno dēlis;

- 1 bezlodējamais maizes dēlis;

- 1 LED skala;

- 10 rezistori ar nominālo vērtību 220 omi;

- 11 vīriešu-vīriešu vadi.

PAMATDIAGRAMMA

DIAGRAMMA UZ maizes dēļa

SKICE

lejupielādējiet Arduino IDE skici
// LED skala ir savienota ar tapu grupu, kas atrodas // rindā. Piešķiriet draudzīgus nosaukumus pirmajai un pēdējai tapai #define FIRST_LED_PIN 2 #define LAST_LED_PIN 11 void setup() ( // skalā ir 10 gaismas diodes. Mēs varētu rakstīt pinMode 10 // reizes: katrai tapai, bet tas būtu uzpūst kodu un // padarīja to problemātiskāku mainīt to. // Tāpēc labāk ir izmantot cilpu. Mēs veicam // pinMode for (eng. for) every pin (pin mainīgais) // no pirmā (= FIRST_LED_PIN) līdz pēdējam ieskaitot // ​​(<= 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); }

KODA SKAIDROJUMI

  • Izmantojot izteiksmi priekš mēs organizējam cilpa ar skaitītāju . Šajā gadījumā, lai konfigurētu izvades portus. Lai izveidotu šādu ciklu, jums ir nepieciešams:
    • Inicializējiet skaitītāja mainīgo ar tā sākotnējo vērtību. Mūsu gadījumā: int pin = FIRST_LED_ PIN ;
    • Norādiet nosacījumu, līdz kuram cilpa atkārtosies. Mūsu gadījumā: pin<= LAST_LED_ PIN ;
    • Nosakiet noteikumu, saskaņā ar kuru skaitītājs mainīsies. Mūsu gadījumā ++pin(operatoru skatiet zemāk ++ ).
  • Piemēram, jūs varat izveidot cilpu par (int i = 10; i > 0; i = i - 1). Šajā gadījumā:
    • Mainīgajam i tiek piešķirta vērtība 10 ;
    • Šī vērtība atbilst nosacījumam i > 0 ;
    • Tāpēc cilpā ievietotais koda bloks tiek izpildīts pirmo reizi;
    • Nozīme i samazinās par vienu, saskaņā ar doto noteikumu, un iegūst vērtību 9 ;
    • Koda bloks tiek izpildīts otro reizi;
    • Viss atkārtojas atkal un atkal līdz nozīmei i vienāds 0 ;
    • Kad i kļūst vienāds ar 0 , stāvoklis i > 0 netiks izpildīts, un cilpas izpilde beigsies;
    • Kontrolieris pāries uz kodu pēc cilpas priekš ;
  • Ievietojiet kodu, kuru vēlaties ievietot starp cirtainiem lencēm {} ja tajā ir vairāk nekā viena instrukcija;
  • Paziņojumā deklarētais skaitītāju mainīgais priekš, var izmantot cilpas iekšpusē. Piemēram, šajā eksperimentā pin secīgi ņem vērtības no 2 līdz 11 un tiek pārsūtītas uz pinMode, ļauj konfigurēt 10 portus ar vienu līniju, kas ievietota cilpā;
  • Skaitītāja mainīgie ir redzami tikai cilpas iekšpusē. Tie. ja tu vērsies pie pin pirms vai pēc cilpas kompilators izmetīs kļūdu par nedeklarētu mainīgo;
  • Dizains i = i - 1 iepriekš sniegtajā skaidrojumā nav vienādojums! Mēs izmantojam piešķiršanas operatoru =, lai ievietotu mainīgajā i ielieciet vērtību, kas vienāda ar pašreizējo vērtību i, samazināts par 1 ;
  • Izteiksme ++pin- tas ir tā sauktais. operators pieaugums , lietots mainīgajam pin. Šī instrukcija dos tādu pašu rezultātu kā pin = pin + 1 ;
  • Operators darbojas līdzīgi kā palielinājums samazinājums - - Vērtības samazināšana par vienu. Vairāk par to rakstā par aritmētiskajām operācijām;
  • Datu tips neparakstīts int izmanto, lai saglabātu neparakstītus veselus skaitļus, t.i. tikai nenegatīvs . Pateicoties papildu bitam, kas tagad netiek izmantots zīmes glabāšanai, mēs varam saglabāt vērtības līdz 65 535 ;
  • Funkcija millis atgriež milisekundes, kas pagājušas kopš mikrokontrollera ieslēgšanas vai atiestatīšanas. Šeit mēs to izmantojam, lai iestatītu laiku starp LED pārslēgšanu;
  • Izmantojot izteiksmi (ms/120) % 10 mēs nosakām, kurai no 10 gaismas diodēm tagad vajadzētu iedegties. Pārfrāzējot, mēs nosakām, kurš 120 ms segments tagad ir un kāds ir tā numurs pašreizējā desmitā. Segmenta kārtas numuru pievienojam porta numuram, kas pašreizējā komplektā parādās pirmais;
  • Tas, ka mēs izslēdzam LED ar digitalWrite (pin, LOW) tikai 10 ms pēc ieslēgšanas tas nav acij pamanāms, jo pavisam drīz tiks pārrēķināts, kuru no gaismas diodēm ieslēgt, un ieslēgsies - tikko nodzisis vai nākamā.

JAUTĀJUMI, LAI PĀRBAUDĪTIES

  1. Kāpēc šajā eksperimentā mēs savienojam LED skalu, neizmantojot tranzistoru?
  2. Ja mēs ieslēgtu gaismas diodes tikai pieslēgvietām 5, 6, 7, 8, 9, kas programmā būtu jāmaina?
  3. Kādu citu norādījumu var izmantot, lai veiktu darbību, kas līdzvērtīga ++pin ?
  4. Kāda ir atšķirība starp tipa mainīgajiem starpt Un neparakstīts int ?
  5. Ko funkcija atgriež millis() ?
  6. Kā mēs aprēķinām porta numuru, kurā šajā eksperimentā vēlamies ieslēgt LED?

UZDEVUMI NEATKARĪGAM RISINĀJUMAM

  1. Mainiet kodu tā, lai gaismas diodes tiktu pārslēgtas reizi sekundē.
  2. Neizslēdzot pieslēgvietas, pārliecinieties, ka gaisma darbojas tikai pa skalas vidējiem četriem nodalījumiem.
  3. Modificējiet programmu tā, lai tā vietā int pin = FIRST_LED_ PIN + (ms/120) % 10 liesmas kustību kontrolēja cikls priekš .
  4. Nemainot vadus, mainiet programmu tā, lai gaisma darbotos pretējā virzienā.



© 2023 globusks.ru - Automašīnu remonts un apkope iesācējiem