DIY

Jak si vyrobit Arduino LED Matrix Conway's Game of Life - DIY

Jak si vyrobit Arduino LED Matrix Conway's Game of Life - DIY

Krátké bajty: Každý koníček má své vlastní milníky, jako je úvod do programování Hello World. Komunita Arduino ráda naštartuje lidi blikající LED diodou. Ale co bychom mohli dělat se 64 LED světly v matici? Můžeme zobrazit nejrůznější věci, jako jsou čísla, písmena a dokonce i jednoduché obrázky. V tomto článku si ukážeme, jak to udělat, stejně jako Conwayova hra o život.

Arduino zaznamenalo za poslední desetiletí výbušnou popularitu. K dispozici jsou tisíce knihoven. Je to velmi dobře zdokumentovaná platforma a úžasná pro učení programování a navrhování elektroniky.

V tomto článku se zaměříme na použití ovladačů LED MAX7219 a MAX7221 s knihovnou LedControl, která je k dispozici ke stažení a instalaci v Arduino IDE i na Github, a implementujeme Conway's Game of Life. Dvě důležité části, které k tomu budete potřebovat, je jeden z výše zmíněných ovladačů LED a kompatibilní LED matice (samozřejmě kromě Arduina a některých standardních elektronických součástek). Mnohé najdete za velmi levné (méně než 3 USD) v různých online obchodech, jako jsou eBay, Banggood a AliExpress. Je však velmi důležité přečíst si popis toho, co kupujete, protože mnohé z nich přicházejí jako sady, které je třeba sestavit a připájet. V závislosti na tom, kde žijete, může být doba přepravy několik týdnů, proto si pečlivě zkontrolujte odhadovanou dobu příjezdu do vaší oblasti.

Pokračoval jsem a sdílel zdroj tohoto projektu na mém (baron) Stránka Github, takže si ji můžete stáhnout, upravit, znovu zveřejnit nebo cokoli chcete. Bude nutné následovat a v kódu na Githubu je spousta komentářů, které nejsou zahrnuty v tomto článku jednoduše proto, že by to byl zdlouhavý článek a ve skutečném kódu jsou mnohem efektivnější, než se je snažit zmáčknout do tohoto článku.

Po hlavičkovém souboru a definicích pinů najdete řádek, který nemusí mít smysl.

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

Tím se vytvoří objekt LedControl, který se používá k propojení s naším ovladačem LED, a to poskytnutím digitálních vstupních, hodinových a čipových signálních kolíků, jakož i zadáním počtu zařízení (pro velký displej mohou být vzájemně propojeny). Řídicí protokol mezi ovladačem LED a Arduino je SPI (Serial Peripheral Interface), ale nemusíme se do toho dostat, protože máme předmět třídy LedControl, abychom za nás udělali nabídky.

Další část v založit() funkce je většinou vysvětlující, ale pro lepší přehlednost ji pokryjeme.

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

Ovladač LED bude při prvním zapnutí ve stavu vypnutí, takže mu musíme říct, aby se probudil, což dělá první řádek. Druhá nastavuje jas, protože používáme pouze jeden displej, první parametr, adresa matice, je 0, a intenzita by vám měla být nastavena, co chcete, maximální platná hodnota je 15. Nakonec vymažeme zobrazení všech možných předchozích hodnot. To obvykle není problém, ale pokud se vaše Arduino z nějakého důvodu restartuje, mohlo by to potenciálně ponechat rozsvícené nežádoucí LED.

Než se pustíme do programování, je důležité pochopit, co je Conwayova hra o život a jaká jsou pravidla. Tato hra je „nulovým hráčem“. To znamená, že si hráč vybere počáteční stav, který provedeme náhodně, a poté se bude řídit pravidly. Hra o život je velmi jednoduchá a má pouze čtyři pravidla:

  1. Jakákoli živá buňka s méně než dvěma živými sousedy zemře, jako by to bylo způsobeno nedostatečným počtem obyvatel.
  2. Jakákoli živá buňka se dvěma nebo třemi živými sousedy žije další generací.
  3. Jakákoli živá buňka s více než třemi živými sousedy zemře, jako by byla přelidněna.
  4. Jakákoli mrtvá buňka s přesně třemi živými sousedy se stane živou buňkou, jako by to byla reprodukce.

- Wikipedia

Pořiďte si vlastní desku Arduino a začněte s kutilstvím ještě dnes

K reprezentaci mřížky používáme dvě dvourozměrná pole. Protože pracujeme s maticemi 8 × 8, jedná se o rozměry, které aplikujeme na naše pole. Zatímco bajtová pole by byla v paměti mnohem efektivnější (a ve skutečnosti se často používají v aplikacích, jako je tato), booleans je mnohem jednodušší upravit v poli než bity v bajtu. Úprava bitů v bajtu by vyžadovala použití bitový operace, které by to ve srovnání s jednoduchými logickými poli trochu komplikovaly. Druhé pole je proto, že musíme vypočítat další stav z aktuálního stavu, ale pokud změníme aktuální stav, nedostaneme požadovaný postupný stav.

Další dvě smyčky for jsou pro inicializaci cgrid pole s náhodnými hodnotami a ngrid pole s Nepravdivé hodnoty. Existuje jedna ze čtyř šancí, že buňka bude „naživu“, to se provádí generováním náhodného čísla mezi 0 a 3, pokud je počet větší než 2, pak je buňka naživu.

Zbytek kódu je buď dostatečně jednoduchý, aby nepotřeboval žádné další vysvětlení, nebo má vysvětlení v kódu. Ale displayGeneration () funkce je zajímavější. Tato funkce, s malou úpravou, je schopná přijímat bajtová pole a tlačit je přímo do matice. The lc.setColumn () volání metody ve skutečnosti trvá bajt, protože je to poslední argument, přičemž první je adresa a nastavený sloupec. Použitím tohoto a nastavením níže můžete snadno vytvořit funkci, která na matici zobrazí osmičlenné bajtové pole, například písmeno nebo obrázek..

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

Vidíte, že použitá metoda je setRow () metoda na rozdíl od setColumn () metoda. Co to dělá, je jednoduše použít bajt vodorovně, na rozdíl od svisle, jednoduché otočení o 90 stupňů. To je důležitý bod, protože orientace vašeho projektu nemusí být nutně stejná jako moje. Dále můžete změnit pořadí, v jakém jsou bajty umístěny, pomocí (7 - i) jako váš druhý argument účinně zrcadlí výstup. Jedná se o velmi snadný způsob, jak správně orientovat výstup pro váš projekt.

Pokud máte v úmyslu zobrazit text na své matici, najdete 8 × 8 maticových písem online. Je však velmi důležité zaznamenat celkovou velikost paměti RAM, kterou váš mikrokontrolér má. Pro tento projekt jsem použil Uno a jedno z písem obsahovalo definice pro 128bitové konfigurace nad rámec 7bitového standardu ASCII. To bylo příliš mnoho na mé Uno (to je 8 bytů x 256 = 2048 bytů, celé Uno kapacita) a potřeboval jsem polovinu sady na původní 128 definic ASCII, aby toto písmo fungovalo. Mějte tedy na paměti, že počet najetých kilometrů se může lišit v závislosti na vašem mikrokontroléru.

Po krátké práci se můžete pohodlně posadit a sledovat hypnotizující účinek Hry o život na svém vlastním malém LED maticovém displeji.

Existují nějaké další projekty Arduina, které byste rádi viděli na Fossbytes? Dejte nám vědět v komentářích níže.

Jak nainstalovat aplikaci Cinema HD (APK) pro zařízení Android a Fire TV Stick
Cinema HD je nejlepší APP (APK) pro zařízení Android, jako jsou TV boxy, smartphony a Fire TV Stick. Streamuje filmy a televizní pořady a v současné d...
Recenze tabletu Dragon Touch Notepad 102 (8jádrový procesor, 3 GB RAM, 32 GB úložiště, Android 10)
Dragon Touch Notepad 102 je tablet střední třídy s osmijádrovým procesorem, 3 GB RAM a 32 GB vnitřního úložného prostoru. Má také operační systém Andr...
Amazon Fire TV Stick (3. GEN) vs Fire TV Stick Lite (Jaký je rozdíl?)
Pokud si chcete koupit novou Fire TV Stick, možná jste si všimli, že nyní existují různé verze včetně standardní verze 3. generace, 4K a nyní verze Fi...