8×8 RGB matice – Colorduino

První projekt, který je nahraný snad v každém arduinu je rozblikání ledky připojené k pinu 13. Trochu pokročilejší je ukázkový sketch Fade, který ukazuje možnosti PWM (pulzně šířkové modulace), který supluje analogový výstup a umožňuje tak plynulou regulaci jasu ledky.

Protože – asi jako každý – mám rád když to bliká, vrtí se to – zkrátka, ukazuje to nějakou formu života, nemohla mě minout koupě čtvercové matice tvořené 64 RGB ledkami. Každou jednotlivou ledku můžeme rozsvítit do požadované barvy, a vytvářet tak různé obrazce.

Ukázka RGB matice

Ukázka RGB matice

Při koupi jsem se domníval, že si pořídím jen samotnou matici a ovládání jednotlivých LEDek dodělám sám. Tady jsem však narazil. Arduina s čipy Atmega328 mají pouze 6 PWM výstupů, na přímé ovládání matice jich je však potřeba 8. Abych se vyhnul shánění vícekanálového PWM řadiče, řešil multiplexery, nebo páchal ještě větší zvěrstva, kapituloval jsem a pořídil Colorduino, které je pro řízení této matice přímo dělané.

Pro jednodušší obsluhu jsem si našel knihovnu na GitHubu.

Pro práci s maticí je potřeba ji inicializovat a volitelně nastavit vyvážení bílé:


#include void setup(){
Colorduino.Init(); // inicializace
unsigned char whiteBalVal[3] = {36,63,63};
Colorduino.SetWhiteBal(whiteBalVal);
}

Funkce Colorduino.SetWhiteBal() nastaví vyvážení bílé po jednotlivých složkách v pořádí RGB. Čísla v tomto kousku kódu jsou převzata z knihovny a jsou pouze šestibitová a unsigned, proto je maximum 63.

Když je matice inicializovaná, je možné začít rozsvěcovat jednotlivé ledky:


SetPixel(unsigned char x, unsigned char y, unsigned char r, unsigned char g, unsigned char b);

První 2 parametry jsou souřadnice pixelu a další tři jsou požadovaná barva nastavitelná v úrovni [0;255]. Pixely se neobarví hned. Jejich změna je nejdříve ukládána do mezipaměti, aby nedocházelo k deformaci požadovaného obrázku při jeho generování.

Colorduino.FlipPage();

… se postará o vykreslení námi vygenerovaného obrázku.


 

Další odkazy:

http://blog.lincomatic.com/?p=148

Leave a Reply