DIY

Hur man gör en Arduino-driven LED Matrix Conways spel av livet - DIY

Hur man gör en Arduino-driven LED Matrix Conways spel av livet - DIY

Korta byte: Varje hobby har sina egna milstolpe-projekt som Hello World-introduktionen i programmering. Arduino-communityn gillar att starta människor med den blinkande LED-lampan. Men vad skulle vi kunna göra med 64 LED-lampor i en matris? Vi kan visa alla möjliga saker som siffror, bokstäver och till och med enkla bilder. I den här artikeln går vi igenom hur man gör det såväl som Conways Game of Life.

Arduino har sett explosiv popularitet under det senaste decenniet. Det finns tusentals bibliotek tillgängliga för det. Det är en väldokumenterad plattform och fantastisk för att lära sig programmera och designa elektronik.

I den här artikeln kommer vi lätt att täcka användningen av MAX7219 och MAX7221 LED-drivrutiner med LedControl-biblioteket, som är tillgängligt för nedladdning och installation i Arduino IDE samt på Github, och vi kommer att implementera Conways Game of Life. De två viktiga delarna du behöver för detta är en av de ovan nämnda LED-drivrutinerna och en kompatibel LED-matris (förutom Arduino och vissa standardelektronikkomponenter, naturligtvis). Du kan hitta många till mycket billiga (mindre än $ 3USD) på olika onlinebutiker som eBay, Banggood och AliExpress. Det är dock mycket viktigt att läsa beskrivningen av vad du köper, för många av dessa kommer som kit som behöver monteras och lödas. Beroende på var du bor kan leveranstiden vara några veckor, så se till att dubbelkontrollera den beräknade ankomsttiden för ditt område.

Jag har gått vidare och delat källan till detta projekt på min (baron) Github-sida, så ladda ner den, ändra den, lägg upp den igen eller vad du vill. Det kommer att bli nödvändigt att följa med och det finns många kommentarer i koden på Github som inte ingår i den här artikeln bara för att det skulle vara en lång artikel och de är mycket effektivare i själva koden än att försöka pressa dem in i den här artikeln.

Efter rubrikfilen och stiftdefinitionerna hittar du en rad som kanske inte är vettig.

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

Detta skapar LedControl-objektet som används för att gränssnitt med vår LED-drivrutin genom att tillhandahålla digitala ingångs-, klock- och chipsignalstift, samt specificera antalet enheter (de kan kedjas ihop för en stor skärm). Kontrollprotokollet mellan LED-drivrutinen och Arduino är SPI (Seriellt perifert gränssnitt), men vi behöver inte komma in i det eftersom vi har ett objekt av LedControl-klassen att göra vårt bud för oss.

Nästa del, i uppstart() funktion, är mest självförklarande, men vi täcker den för tydlighetens skull.

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

LED-drivrutinen kommer att stängas av när den slås på först, så vi måste säga att den ska vakna, vilket är vad första raden gör. Den andra ställer in ljusstyrkan, eftersom vi bara använder en enda skärm är den första parametern, adressen till matrisen 0, och intensiteten bör ställas in till dig vad du än föredrar, det högsta giltiga värdet är 15. Slutligen rensar vi visningen av eventuella tidigare värden. Detta är vanligtvis inte ett problem, men om din Arduino startar om av någon anledning kan det eventuellt lämna oönskade lysdioder upplysta.

Innan vi går in i programmeringen är det viktigt att förstå vad Conways Game of Life är och vad reglerna är. Spelet är ett "zero player" -spel. Allt som betyder är att spelaren väljer det ursprungliga tillståndet, vilket vi gör slumpmässigt och sedan följer reglerna. Livets spel är väldigt enkelt och har bara fyra regler:

  1. Alla levande celler med färre än två levande grannar dör, som om de orsakas av underbefolkning.
  2. Varje levande cell med två eller tre levande grannar lever vidare till nästa generation.
  3. Varje levande cell med mer än tre levande grannar dör, som av överbefolkning.
  4. Varje död cell med exakt tre levande grannar blir en levande cell, som genom reproduktion.

- Wikipedia

Skaffa ditt eget Arduino-kort och börja göra DIY idag

För att representera rutnätet använder vi två tvådimensionella matriser. Eftersom vi arbetar med 8 × 8-matriser är de måtten vi använder för våra matriser. Medan byte-matriser skulle vara mycket effektivare i minnet (och faktiskt används för att användas ofta i applikationer som detta), är booleaner mycket lättare att modifiera i en array än bitar i en byte. Att modifiera bitar i en byte skulle kräva användning av bitvis operationer som skulle komplicera saker ganska mycket jämfört med de enkla booleska matriserna. Den andra matrisen beror på att vi måste beräkna nästa tillstånd från det aktuella tillståndet, men om vi ändrar det aktuella tillståndet får vi inte önskat successivt tillstånd.

De två nästa för slingor är för att initialisera cgrid array med slumpmässiga värden och ngrid array med falsk värden. Det finns en chans av fyra att cellen kommer att vara 'levande', detta görs genom att generera ett slumpmässigt tal mellan 0 och 3, om antalet är större än 2 så lever cellen.

Resten av koden är antingen enkel att inte behöva någon ytterligare förklaring eller har en förklaring i koden. Men displayGeneration () funktionen är mer intressant. Denna funktion, med liten modifiering, kan ta byte-matriser och skjuta dem direkt till matrisen. De lc.setColumn () metodanrop tar faktiskt en byte eftersom det är det sista argumentet, den första är adressen och kolumnen som ställs in. Genom att använda detta och ställa in enligt nedan kan du enkelt skapa en funktion som visar en åtta-element byte-array, såsom en bokstav eller bild, på matrisen.

ogiltig printByte (byte ba [8]) för (int i = 0; i < 8; i++) lc.setRow(0,0,ba[i]); 

Du kan se att metoden som används är setRow () metod i motsats till setColumn () metod. Vad detta gör är att helt enkelt tillämpa byten horisontellt i motsats till vertikalt, en enkel 90-graders rotation. Detta är en viktig punkt med tanke på att ditt projekts inriktning inte nödvändigtvis kommer att vara samma som min. Dessutom kan du ändra ordningen som byten placeras med (7 - i) som ditt andra argument, speglar effektivt utdata. Detta är ett mycket enkelt sätt att korrekt orientera utdata för ditt projekt.

Om du tänker visa text i din matris kan du hitta 8 × 8 matristeckensnitt online. Det är dock mycket viktigt att notera den totala mängden RAM som din mikrokontroller har. Jag använde Uno för detta projekt och en av teckensnitten inkluderade definitioner för 128-bitars konfigurationer utöver 7-bitars ASCII-standarden. Detta var för mycket för min Uno (det är 8 byte x 256 = 2048 byte, hela Uno kapacitet) och jag behövde halva uppsättningen till de ursprungliga 128 ASCII-definitionerna för att få det teckensnittet att fungera. Så kom ihåg att din körsträcka kan variera beroende på din mikrokontroller.

Efter en kort mängd arbete kan du luta dig tillbaka och titta på den fascinerande effekten av Game of Life på din egen lilla LED-matrisskärm.

Finns det några andra Arduino-projekt som du vill se täckt på Fossbytes? Låt oss veta i kommentarerna nedan.

Så här installerar du DejaVu Kodi Addon (kompatibel med Kodi 19 Matrix)
DejaVu är ett Kodi-videotillägg från DejaVu Repository som arbetar med Kodi 19 Matrix.Avsnitt inkluderar filmer, TV-program, Trakt, Sök, Sökhistorik, ...
Hur man installerar Shadow Kodi-tillägg (kompatibel med Kodi 19 Matrix)
Shadow är ett Kodi Real Debrid-videotillägg som har uppdaterats för att fungera med Kodi 19 Matrix.Huvudmenyn inkluderar Movie World, TV World, Trakt,...
Hur man installerar Xenon Kodi 19 Matrix Build
Xenon Matrix är en mycket bra Kodi 19 Build från Chef Wizard.Den innehåller många fungerande Kodi 19-tillägg som The Oath, Seren, Pluto, Sport HD och ...