Tento článek je pokračováním v seriálu o LED Matrixu a arduinu. Předchozí díl naleznete zde. V tomto dílu si řekneme, jak můžeme připojit více LED matrixů za sebou a zvětšit tak rozměry pole (pozor je to o hodně náročnější na programování a při větších rozměrech multipole i na koordinaci a odběr el. proudu). Řekneme si jak také můžeme vylepšit program, kterým LED matrix a arduino ovládáme použitím cyklů a pole.
Multimatrix
Název „Multimatrix“ jsem si tak trošku vymyslel :-), ale celkem sedí k faktu, že jednotlivé pole matrixů můžeme určitým, poměrně jednoduchým způsobem, propojovat do větších polí – multimatrixů. Toto nám umožňuje způsob komunikace po rozhraní SPI, kterým moduly LED matrixů disponují. Poměrně komplexně jsem tuto problematiku nalezl popsanou zde. Díky tomuto způsobu komunikace a použité knihovně (LedControl, Maxmatrix) může arduino komunikovat až se 64 jednotlivými moduly LED matrix. Ty pak stačí pouze propojit a vhodně uspořádat do požadovaného multibloku a přizpůsobit také tomuto uspořádání i program nahraný do arduina.
Systém propojení naleznete na následujícím obrázku. V podstatě se jedná o zapojení jednotlivých modulů LED matrix za sebou na sběrnici, přičemž je zapotřebí vždy v programu zohlednit, kterého matrixu se příkaz k aktivaci týká. Pro naší demonstraci jsem zvolil nejmenší možnou kombinaci více LED matrixů – dvou modulů.
Modul LED matrix má pět vstupů/výstupů. Dva z nich jsou napájení (VCC a GND) a tři slouží pro komunikaci na SPI rozhraní. Tři vstupy/výstupy sloužící pro SPI jsou piny pojmenované DIN, CS a CLK. Do multibloku je možné je zapojit prostě tak, že zapojíme LED matrix jako „průchozí“ (viz obrázek zapojení). Přesná identifikace jednotlivých matrixů je pak řízena programem (arduino „rozezná “ pořadí matrixu na sběrnici SPI, příkazy knihovny pak mohou jednoznačným identifikátorem směrovat své příkazy na konkrétní desku modul matrixu).
Program „Duomatrix“
Pro tento program použijte zapojení zmíněné v předchozí kapitole. Program je určen pro dvě desky matrixu, ale jistě by nedalo moc práce jej rozšířit na větší počet modulů.
V úvodu programu načítáme přes příkaz include knihovnu LedControl.h (již součástí arduina IDE). Tato knihovna nám umožňuje ovládat modul LED matrix a používat všechny ostatní příkazy pro ovládání matrixu v programu použité. Pokud tento příkaz v programu vynecháte, nebude program fungovat.
Na devátém řádku deklarujeme objekt lc a zároveň inicializujeme modul – říkáme arduinu na kterých pinech bude komunikovat s moduly LED matrixu (proto je LED matrix připojen na piny 10,11 a 12). Poslední parametr v závorce (číslo 2) říká kolik budeme používat matrixů v celé sestavě „multimatrixu“. Pokud si hrajete pouze s jedním – je přednastaveno nativně číslo 1.
Po inicializaci modulu následuje deklarace proměnné delaytime. Tato proměnná v milisekundách určuje interval mezi přepínáním jednotlivých sekvenci animace symbolu.
Ve voidu setup pak dokončíme inicializaci modulu. Zapneme modul 0 a 1, nastavíme jim intenzitu osvitu a displeje vymažeme – matrixy jsou připraveny k použití. Za povšimnutí stojí použití objektu lc – vždy před skutečným příkazem k provedení činnosti. Arduino tak ví jaké části hardware se příkaz přesně týká.
V prostřední části programu nadefinujeme pomocí pole symbol – tuto proměnnou si můžeme představit jako jakousi tabulku s buňkami, které mají určitý obsah. Proměnnou, která je pole poznáte podle hranaté závorky ve které může být (a nemusí) definovaný počet buněk, které pole bude obsahovat. Počet buněk je dobré předem definovat, protože tím říkáme programu kolik paměti má pro proměnnou vyhradit. Obsah buněk vkládáme do složených závorek a oddělujeme čárkou. Do jednotlivých buněk vkládáme sekvenci B+osm nul či jedniček. Tím později řekneme arduinu a modulu LED matrix, které diody v matrixu si přejeme rozsvítit a které ne. V programu Duomatrix, aby to bylo úplně jasné, jsme oddělil jednotlivé bloky po osmi buňkách mezerou (která tak ovšem nemusí vůbec být). Jednotlivé oddělené bloky jsou jednotlivé sekvence animace, které v závěrečné fázi programu budeme rozsvěcovat.
V poslední závěrečné části programu se modulu LED matrix dávají příkazy pro rozsvěcování. Začneme deklarováním dvou proměnných – i a x. Proměnná i (iterátor smyčky) je proměnná pomocí které smyčka může kontrolovat v kolikátém cyklu je. Proměnná i může nabýt hodnot 0 – 3. Pokud nabude hodnoty 3 je smyčka ukončena. Při každém cyklu se hodnota proměnné i zvyšuje o +1 (viz. hlavička smyčky i++). Smyčka je nastavena na tři průběhy – 3 fáze animovaného symbolu.
Proměnná x se vztahuje k adresám buněk v poli symbol. Může nabýt tyto hodnoty 0 – 8 – 16. Tyto hodnoty jsou zároveň prvními hodnotami buněk v poli vztahujícím se k další fázi animovaného symbolu pro matrix (fáze 1 – hodnoty 0-7, fáze 2 hodnoty 8-15, fáze 3 hodnoty 16-23). Každý průběh je pozdržen o interval daný proměnnou delaytime, pak jsou oba displeje smazány a připraveny pro zobrazení následující fáze animace. Jako poslední činnost každého cyklu je úprava proměnné x = x + 8, která umožňuje přechod do zobrazení následující sekvence animace symbolu.
Úkol:
Zkuste také rozanimovat nějaký symbol na více Led matrixech.