Fai da te

Come realizzare Game Of Life di Conway con matrice LED alimentata da Arduino - Fai da te

Come realizzare Game Of Life di Conway con matrice LED alimentata da Arduino - Fai da te

Byte brevi: Ogni hobby ha i suoi progetti fondamentali come l'introduzione di Hello World nella programmazione. Alla comunità di Arduino piace iniziare le persone con la luce LED lampeggiante. Ma cosa potremmo fare con 64 luci LED in una matrice? Possiamo visualizzare tutti i tipi di cose come numeri, lettere e anche semplici immagini. In questo articolo, vedremo come farlo oltre a Conway's Game of Life.

L'Arduino ha visto una popolarità esplosiva negli ultimi dieci anni. Ci sono migliaia di librerie disponibili per questo. È una piattaforma molto ben documentata e sorprendente per imparare a programmare e progettare l'elettronica.

In questo articolo, tratteremo leggermente l'uso dei driver LED MAX7219 e MAX7221 con la libreria LedControl, che è disponibile per il download e l'installazione nell'IDE di Arduino e su Github, e implementeremo Game of Life di Conway. Le due parti importanti di cui avrai bisogno per questo sono uno dei driver LED sopra menzionati e una matrice LED compatibile (oltre ad Arduino e ad alcuni componenti elettronici standard, ovviamente). Puoi trovarne molti a prezzi molto economici (meno di $ 3 USD) su diversi negozi online come eBay, Banggood e AliExpress. È molto importante leggere la descrizione di ciò che stai acquistando, perché molti di questi vengono forniti come kit che devono essere assemblati e saldati. A seconda di dove vivi, il tempo di spedizione potrebbe essere di alcune settimane, quindi assicurati di ricontrollare l'orario di arrivo stimato per la tua zona.

Sono andato avanti e ho condiviso la fonte per questo progetto sul mio (barone) Pagina Github, quindi sentiti libero di scaricarlo, modificarlo, ripubblicarlo o qualsiasi altra cosa tu voglia. Sarà necessario seguire e ci sono molti commenti nel codice su Github che non sono inclusi in questo articolo semplicemente perché sarebbe un articolo lungo e sono molto più efficaci nel codice effettivo che provare a comprimerli in questo articolo.

Dopo il file di intestazione e le definizioni dei pin, troverai una riga che potrebbe non avere senso.

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

Questo crea l'oggetto LedControl che viene utilizzato per interfacciarsi con il nostro driver LED fornendo i pin di ingresso digitale, clock e segnale del chip, oltre a specificare il numero di dispositivi (possono essere collegati a margherita insieme per un grande display). Il protocollo di controllo tra il driver LED e Arduino è SPI (Serial Peripheral Interface), ma non dobbiamo entrare in questo perché abbiamo un oggetto della classe LedControl per fare le nostre offerte per noi.

La parte successiva, in impostare() funzione, è per lo più autoesplicativo, ma lo copriremo per chiarezza.

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

Il driver LED sarà in uno stato di spegnimento quando viene acceso per la prima volta, quindi dobbiamo dirgli di riattivarsi, che è ciò che fa la prima riga. Il secondo imposta la luminosità, poiché stiamo utilizzando un solo display il primo parametro, l'indirizzo della matrice, è 0, e l'intensità dovrebbe essere impostata come preferisci, il valore massimo valido è 15. Infine, cancelliamo dalla visualizzazione tutti i possibili valori precedenti. Questo in genere non è un problema, ma se il tuo Arduino si riavvia per qualche motivo, potrebbe potenzialmente lasciare illuminati LED indesiderati.

Prima di entrare nella programmazione è importante capire cos'è Game of Life di Conway e quali sono le regole. Il gioco è un gioco "zero player". Tutto ciò significa che il giocatore sceglie lo stato iniziale, che faremo a caso, e quindi segue le regole. Il gioco della vita è molto semplice e ha solo quattro regole:

  1. Qualsiasi cellula viva con meno di due vicini vivi muore, come se fosse causata dalla sottopopolazione.
  2. Qualsiasi cellula viva con due o tre vicini vivi sopravvive alla generazione successiva.
  3. Qualsiasi cellula viva con più di tre vicini vivi muore, come per sovrappopolazione.
  4. Qualsiasi cellula morta con esattamente tre vicini vivi diventa una cellula viva, come per riproduzione.

- Wikipedia

Ottieni la tua scheda Arduino e inizia a fare il fai da te oggi

Per rappresentare la griglia usiamo due array bidimensionali. Dato che stiamo lavorando con matrici 8 × 8, queste sono le dimensioni che applichiamo ai nostri array. Mentre gli array di byte sarebbero molto più efficienti in memoria (e in effetti sono usati spesso in applicazioni come questa), i booleani sono molto più facili da modificare in un array rispetto ai bit in un byte. La modifica dei bit all'interno di un byte richiederebbe l'uso di bit per bit operazioni che complicherebbero un po 'le cose rispetto ai semplici array booleani. Il secondo array è perché dobbiamo calcolare lo stato successivo dallo stato corrente, ma se alteriamo lo stato corrente, non otterremo lo stato successivo desiderato.

I prossimi due cicli for servono per inizializzare il file cgrid matrice con valori casuali e l'estensione ngrid matrice con falso valori. C'è una possibilità su quattro che la cella sia 'viva', questo viene fatto generando un numero casuale compreso tra 0 e 3, se il numero è maggiore di 2 allora la cella è viva.

Il resto del codice è abbastanza semplice da non richiedere ulteriori spiegazioni o contiene una spiegazione nel codice. Ma il displayGeneration () la funzione è più interessante. Questa funzione, con poche modifiche, è in grado di prendere matrici di byte e di inviarle direttamente alla matrice. Il lc.setColumn () la chiamata al metodo richiede effettivamente un byte poiché è l'ultimo argomento, il primo è l'indirizzo e la colonna che viene impostata. Usando questo e impostando come di seguito è possibile creare facilmente una funzione che visualizzerà un array di byte di otto elementi, come una lettera o un'immagine, sulla matrice.

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

Puoi vedere che il metodo utilizzato è il setRow () metodo in contrasto con il setColumn () metodo. Ciò che fa è semplicemente applicare il byte orizzontalmente anziché verticalmente, una semplice rotazione di 90 gradi. Questo è un punto importante dato che l'orientamento del tuo progetto non sarà necessariamente lo stesso del mio. Inoltre, è possibile invertire l'ordine in cui vengono inseriti i byte utilizzando (7 - i) come secondo argomento, rispecchiando efficacemente l'output. Questo è un modo molto semplice per orientare correttamente l'output per il tuo progetto.

Se hai intenzione di visualizzare del testo sulla tua matrice, puoi trovare i caratteri della matrice 8 × 8 online. Tuttavia, è molto importante annotare la quantità totale di RAM di cui dispone il microcontrollore. Ho usato Uno per questo progetto e uno dei caratteri includeva definizioni per le configurazioni a 128 bit oltre lo standard ASCII a 7 bit. Questo era troppo per il mio Uno (questo è 8 byte x 256 = 2048 byte, l'intero Uno capacità) e avevo bisogno di metà del set con le 128 definizioni ASCII originali per far funzionare quel carattere. Quindi, tieni presente che il tuo chilometraggio può variare a seconda del tuo microcontrollore.

Dopo un breve periodo di lavoro, puoi sederti e guardare l'effetto ipnotizzante del gioco della vita sul tuo piccolo display a matrice di LED.

Ci sono altri progetti Arduino che vorresti vedere coperti su Fossbytes? Fateci sapere nei commenti qui sotto.

Come installare l'app Stremio (APK) per dispositivi Android e Fire TV Stick
Stremio è una delle migliori app video (APK) per dispositivi Android come TV box, smartphone e Fire TV Stick. Trasmette film e programmi TV in un form...
Come installare i dispositivi Android Film Plus App (APK) e Fire TV Stick
Film Plus è una delle migliori app video (APK) per dispositivi Android come TV box, smartphone e Fire TV Stick. Trasmette film e programmi TV e attual...
Come installare i dispositivi Android Morpheus TV App (APK) e Fire TV Stick
Morpheus TV è un'app per film e programmi TV (APK) che può essere installata su dispositivi Android come TV box, smartphone e Amazon Fire TV Stick. M...