DIY

Cum să faci un joc Matrix Conway LED Matrix Conway cu LED-uri Arduino - DIY

Cum să faci un joc Matrix Conway LED Matrix Conway cu LED-uri Arduino - DIY

Octet scurt: Fiecare hobby are propriile sale proiecte de referință, cum ar fi introducerea Hello World în programare. Comunității Arduino îi place să înceapă oamenii cu lumina LED intermitentă. Dar ce am putea face cu 64 de lumini LED într-o matrice? Putem afișa tot felul de lucruri precum cifre, litere și chiar imagini simple. În acest articol, vom trece prin modul de a face acest lucru, precum și Conway's Game of Life.

Arduino a cunoscut o popularitate explozivă în ultimul deceniu. Există mii de biblioteci disponibile pentru aceasta. Este o platformă foarte bine documentată și uimitoare pentru învățarea programării și proiectării electronice.

În acest articol, vom acoperi ușor utilizarea driverelor LED MAX7219 și MAX7221 cu biblioteca LedControl, care este disponibilă pentru descărcare și instalare în Arduino IDE, precum și pe Github și vom implementa Conway's Game of Life. Cele două părți importante de care aveți nevoie pentru aceasta este unul dintre driverele LED menționate mai sus și o matrice LED compatibilă (în plus față de Arduino și unele componente electronice standard, desigur). Puteți găsi multe pentru foarte ieftine (mai puțin de 3 USD) pe diferite magazine online, cum ar fi eBay, Banggood și AliExpress. Cu toate acestea, este foarte important să citiți descrierea a ceea ce achiziționați, deoarece multe dintre acestea vin ca seturi care trebuie asamblate și lipite. În funcție de locul în care locuiți, timpul de expediere poate fi de câteva săptămâni, deci asigurați-vă că verificați de două ori ora estimată de sosire pentru zona dvs..

Am mers mai departe și am împărtășit sursa acestui proiect pe (baron) Pagina Github, deci nu ezitați să o descărcați, să o modificați, să o publicați din nou sau orice doriți. Va fi necesar să continuați și există o mulțime de comentarii în codul de pe Github care nu sunt incluse în acest articol pur și simplu pentru că ar fi un articol lung și sunt mult mai eficiente în codul real decât încercarea de a le stoarce în acest articol.

După fișierul antet și definițiile pinului, veți găsi o linie care ar putea să nu aibă sens.

LedControl lc = LedControl (DIN, CLK, CS, 0);

Acest lucru creează obiectul LedControl care este utilizat pentru interfața cu driverul nostru LED, oferind pinii de semnal de intrare digitală, ceas și cip, precum și specificarea numărului de dispozitive (acestea pot fi legate în lanț pentru un afișaj mare). Protocolul de control dintre driverul LED și Arduino este SPI (Serial Peripheral Interface), dar nu trebuie să intrăm în asta pentru că avem un obiect din clasa LedControl care să ne ofere pentru noi.

Următoarea porție, în înființat() funcția este în mare parte auto-explicativă, dar o vom acoperi pentru claritate.

lc.shutdown (0, false); lc.setIntensity (0, 8); lc.clearDisplay (0);

Driver-ul LED va fi într-o stare de oprire la prima pornire, așa că trebuie să-i spunem să se trezească, ceea ce face prima linie. Al doilea setează luminozitatea, deoarece folosim doar un singur afișaj, primul parametru, adresa matricei, este 0, iar intensitatea ar trebui să fie setată pentru dvs. orice preferați, valoarea maximă valabilă fiind 15. În cele din urmă, ștergem afișarea oricăror posibile valori anterioare. De obicei, aceasta nu este o problemă, dar dacă Arduino repornește din anumite motive, ar putea lăsa LED-urile nedorite aprinse.

Înainte de a intra în programare, este important să înțelegem ce este Conway's Game of Life și care sunt regulile. Jocul este un joc „zero player”. Tot ceea ce înseamnă este că jucătorul alege starea inițială, pe care o vom face la întâmplare, apoi urmează regulile. Jocul vieții este foarte simplu și are doar patru reguli:

  1. Orice celulă vie cu mai puțin de doi vecini vii moare, ca și cum ar fi cauzată de subpopulație.
  2. Orice celulă vie cu doi sau trei vecini vii trăiește pentru generația următoare.
  3. Orice celulă vie cu mai mult de trei vecini vii moare, ca și cum ar fi suprapopulată.
  4. Orice celulă moartă cu exact trei vecini vii devine o celulă vie, ca prin reproducere.

- Wikipedia

Obțineți-vă propria placă Arduino și începeți să vă pregătiți azi

Pentru a reprezenta grila folosim două tablouri bidimensionale. Deoarece lucrăm cu matrici 8 × 8, acestea sunt dimensiunile pe care le aplicăm matricilor noastre. În timp ce matricile de octeți ar fi mult mai eficiente în memorie (și sunt de fapt utilizate pentru a fi utilizate adesea în aplicații ca aceasta), booleenii sunt mult mai ușor de modificat într-o matrice decât biții dintr-un octet. Modificarea biților într-un octet ar necesita utilizarea lui în sensul bitului operații care ar complica destul de mult lucrurile în comparație cu tablourile booleene simple. A doua matrice se datorează faptului că trebuie să calculăm următoarea stare din starea curentă, dar dacă modificăm starea curentă, nu vom obține starea succesivă dorită.

Următoarele două pentru bucle sunt pentru inițializarea cgrid matrice cu valori aleatorii și ngrid matrice cu fals valori. Există o șansă una din patru ca celula să fie „în viață”, acest lucru se face prin generarea unui număr aleatoriu între 0 și 3, dacă numărul este mai mare de 2, atunci celula este în viață.

Restul codului este fie suficient de simplu pentru a nu mai avea nevoie de explicații suplimentare, fie are o explicație în cod. Cu exceptia displayGeneration () funcția este mai interesantă. Această funcție, cu puține modificări, este capabilă să ia matrice de octeți și să le împingă direct către matrice. lc.setColumn () Metoda de apel are de fapt un octet, deoarece este ultimul argument, primul fiind adresa și coloana care este setată. Utilizând acest lucru și configurând ca mai jos, puteți crea cu ușurință o funcție care va afișa o matrice de opt elemente, cum ar fi o literă sau o imagine, pe matrice.

void printByte (octet ba [8]) for (int i = 0; i < 8; i++) lc.setRow(0,0,ba[i]); 

Puteți vedea că metoda utilizată este setRow () metoda spre deosebire de setColumn () metodă. Ceea ce face acest lucru este pur și simplu să aplice octetul pe orizontală spre deosebire de verticală, o simplă rotație de 90 de grade. Acesta este un punct important, având în vedere că orientarea proiectului dvs. nu va fi neapărat aceeași cu a mea. În plus, puteți inversa ordinea în care sunt plasați octeții folosind (7 - i) ca al doilea argument, reflectând în mod eficient rezultatul. Acesta este un mod foarte ușor de a orienta corect ieșirea pentru proiectul dvs..

Dacă intenționați să afișați text pe matricea dvs., puteți găsi fonturi matrice 8 × 8 online. Cu toate acestea, este foarte important să rețineți cantitatea totală de RAM pe care o are microcontrolerul. Am folosit Uno pentru acest proiect și unul dintre fonturi a inclus definiții pentru configurațiile pe 128 de biți dincolo de standardul ASCII pe 7 biți. A fost prea mult pentru Uno (adică 8 octeți x 256 = 2048 octeți, întregul Uno capacitate) și aveam nevoie de jumătate din set la cele 128 de definiții ASCII originale pentru a face ca fontul să funcționeze. Deci, rețineți, kilometrajul dvs. poate varia în funcție de microcontroler.

După o perioadă scurtă de muncă, puteți să vă așezați și să urmăriți efectul fascinant al Game of Life pe propriul dvs. afișaj cu matrice LED.

Există și alte proiecte Arduino pe care doriți să le vedeți acoperite pe Fossbytes? Spuneți-ne în comentariile de mai jos.

Cum se instalează Filelinked pe Android TV Box sau Fire TV Stick
Pagina Cuprins Cum se instalează Filelinked pe un Android TV Box Cum se instalează Filelinked pe un stick TV Fire Filelinked este o aplicație popu...
Adăugați porturi la un smartphone Android cu un hub Type-C HDMI, Ethernet, USB, card SD
Noile smartphone-uri Android pot adăuga cu ușurință porturi precum ieșire HDMI, Ethernet, USB și sloturi pentru carduri SD. Aceasta înseamnă că se po...
Cum se instalează mouse-ul comută pe un stick TV Fire
Fire TV Stick este un dispozitiv excelent de redare a conținutului media, dar ocazional are probleme. O problemă este că telecomanda nu-i place să fun...