Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
Dobrý den, dělám jen malý projekt střelnice a chtěl jsem jej oživit o zobrazení režimu střelnice a pak po startu o zobrazení skóre. K tomu jsem chtěl použít hotový modul 4 LED maticí s 64 diodami řízené MAX7219. Hledal jsem k tomu nějaké návody, ale zamotal jsem se do knihoven. Našel jsem, že k ovládání základnímu je knihovna ledcontrol.h, která umožňuje využít nějakých příkazů, ale obsluhuje jen přímo diody. Druhá knihovna LedControlMS.h už umí zobrazovat jednoduchým způsobem i znaky. Ale je zde problém se zobrazením, neboť jsou otočené o 90° a pak jsem našel knihovnu Parola, která umí již nějaké efekty jako je rolování textu a tak, ale je moc velká. V čem tedy mám problém:
1. tak nějak nemůžu k těm knihovnám sehnat manuál, kde by bylo napsáno, jaké příkazy a jaké parametry umožňují
2. knihovna paroly je hrozně velká a nevejde se mi do arduina mini – dá se nějak zmenšit? V samotném adresáři knihovny jsou i nějaké obrázky a podobně, ale ty se do Arduina při kompilaci asi nepřenáší
3. když používám knihovnu LedControlMS.h jsou jednotlivé displeje o 90° pootočené. Je to zřejmě tím, jak je modul hardwarově vyrobený, ale neumím to otočit. To by mohla udělat ta parola, ale to je zase obrovská knihovna, kterou zaberu celou paměť, což je zbytečné, abych zobrazil číslo od 1 do 999 a jeden nápis.
Můžete mi někdo poradit, jak na tomto modulu tedy zobrazit 3 cifernou hodnotu a libovolný nápis?
V nejhorším případě ty moduly rozříznu, pootočím o 90°a propojím zpět…
Děkuji
1. tak nějak nemůžu k těm knihovnám sehnat manuál, kde by bylo napsáno, jaké příkazy a jaké parametry umožňují
2. knihovna paroly je hrozně velká a nevejde se mi do arduina mini – dá se nějak zmenšit? V samotném adresáři knihovny jsou i nějaké obrázky a podobně, ale ty se do Arduina při kompilaci asi nepřenáší
3. když používám knihovnu LedControlMS.h jsou jednotlivé displeje o 90° pootočené. Je to zřejmě tím, jak je modul hardwarově vyrobený, ale neumím to otočit. To by mohla udělat ta parola, ale to je zase obrovská knihovna, kterou zaberu celou paměť, což je zbytečné, abych zobrazil číslo od 1 do 999 a jeden nápis.
Můžete mi někdo poradit, jak na tomto modulu tedy zobrazit 3 cifernou hodnotu a libovolný nápis?
V nejhorším případě ty moduly rozříznu, pootočím o 90°a propojím zpět…
Děkuji
Re: Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
Něco je tady ale nevím jestli se bude hodit !
https://www.instructables.com/id/Google ... D-Matrix-/
/www.instructables.com/id/View-SMS-on-a- ... x-Display/
https://www.instructables.com/id/Google ... D-Matrix-/
/www.instructables.com/id/View-SMS-on-a- ... x-Display/
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
Nevím jstli to pomůže, ale mezi hotovými projekty na tomto foru s tímto displejem jsou i hodiny - sám jsem s tímto displejem čerpat z tohoto projektu.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
- SkullKeep
- Příspěvky: 291
- Registrován: 23 srp 2017, 18:51
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
Nebo čerpat tady https://randomnerdtutorials.com/guide-f ... pong-game/. A u inicializace matice:
Kód: Vybrat vše
LedControl lc=LedControl(12,11,10,1); //12-DIN pin,11-CLK pin,10-CS pin.1-počet matic
P. Q. M.
Re: Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
Tady jsem dělal hodiny: https://arduino-forum.cz/viewtopic.php?f=38&t=883
Mrkni na to, na začátku programu je pole s jednotlivými znaky. Já tam mám jenom pár znaků a několik fontů čísel 0-9. Nutné je mít knihovnu LedControl. Ta se dá stáhnout (viz odkaz). Vykreslování je jednoduché. Je tam funkce DrawSymbol, které se zadá na jaký displej a jaký symbol se bude vykreslovat. Je tam pořešený i to otáčení fontu...
Vlastní znaky si můžeš vytvořit zde: https://xantorohara.github.io/led-matrix-editor/#
Mrkni na to, na začátku programu je pole s jednotlivými znaky. Já tam mám jenom pár znaků a několik fontů čísel 0-9. Nutné je mít knihovnu LedControl. Ta se dá stáhnout (viz odkaz). Vykreslování je jednoduché. Je tam funkce DrawSymbol, které se zadá na jaký displej a jaký symbol se bude vykreslovat. Je tam pořešený i to otáčení fontu...
Vlastní znaky si můžeš vytvořit zde: https://xantorohara.github.io/led-matrix-editor/#
Re: Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
Ahoj, děkuji všem. Zjistil jsem toto. Rozdíl mezi knihovnou LedControl.h a LedControlMS.h je v tom, že:
- knihovna LedControlMS.h má v sobě definovány znaky, které jsou k nalezení v souboru knihovny LedControlMS.h. Daný znak se vypíše funkcí lc.displayChar(cislodispleje,čísloznaku), kde parametrem znaku je číslo řádku v té tabulce
- a umí funkci lc.writeString(cislodispleje, "TESTOVACI TEXT"), která sice na daný jeden display (kostičku) vypíše postupně celý řetězec, ale než jej vypíše, tak se program zastaví.
Dále obě knihovny umí
lc.shutdown(i,false); /* porobudí display ´i´ ze spánku */
lc.setIntensity(i,1); /* nastaví jas displeje ´i´ */
lc.clearDisplay(i); /* vymaže displej´i´*/
lc.setRow(i,r,B10101010); /* rozsívítí na displeji ´i´ diody s jednčkou v řádku ´r´ */
lc.setColumn(i,s,B10101010); /* rozsívítí na displeji ´i´ diody s jednčkou v sloupci ´s´ */
lc.setLed(i,r,s,true); /* rozsívítí na displeji ´i´ diodu v řádku ´r´ a sloupci ´s´ */
Vzor použití je třeba tady https://www.instructables.com/id/Multip ... h-Arduino/ ale dají se takto využít jen ručně postavené displeje, protože ten hotový produkt, který jsem koupil, je má o 90°pootočené a vypadá to takto https://www.youtube.com/watch?v=pKtA1_RlL2g
Toto by měla umět ošetřit knihovna MD_MAX72xx.h ale tím jsem se zatím neprokousal, protože jsem našel jen nápovědy v angličtině a je to na mě moc technické
- knihovna LedControlMS.h má v sobě definovány znaky, které jsou k nalezení v souboru knihovny LedControlMS.h. Daný znak se vypíše funkcí lc.displayChar(cislodispleje,čísloznaku), kde parametrem znaku je číslo řádku v té tabulce
- a umí funkci lc.writeString(cislodispleje, "TESTOVACI TEXT"), která sice na daný jeden display (kostičku) vypíše postupně celý řetězec, ale než jej vypíše, tak se program zastaví.
Dále obě knihovny umí
lc.shutdown(i,false); /* porobudí display ´i´ ze spánku */
lc.setIntensity(i,1); /* nastaví jas displeje ´i´ */
lc.clearDisplay(i); /* vymaže displej´i´*/
lc.setRow(i,r,B10101010); /* rozsívítí na displeji ´i´ diody s jednčkou v řádku ´r´ */
lc.setColumn(i,s,B10101010); /* rozsívítí na displeji ´i´ diody s jednčkou v sloupci ´s´ */
lc.setLed(i,r,s,true); /* rozsívítí na displeji ´i´ diodu v řádku ´r´ a sloupci ´s´ */
Vzor použití je třeba tady https://www.instructables.com/id/Multip ... h-Arduino/ ale dají se takto využít jen ručně postavené displeje, protože ten hotový produkt, který jsem koupil, je má o 90°pootočené a vypadá to takto https://www.youtube.com/watch?v=pKtA1_RlL2g
Toto by měla umět ošetřit knihovna MD_MAX72xx.h ale tím jsem se zatím neprokousal, protože jsem našel jen nápovědy v angličtině a je to na mě moc technické
Re: Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
A co takhle otočit text softwarově? Koukni se na můj článek. Tam taky otáčím text, protože byl myslím zrcadlově... Kdo ví, jak je v té knihovně nadefinovaný font.takto využít jen ručně postavené displeje, protože ten hotový produkt, který jsem koupil, je má o 90°pootočené
Re: Zobrazení hodnot a textu na LED matici 4x64 s MAX7219
Díky všem, kteří mi poslali nápady kam se kouknout, a díky nimž jsem se proklikal a progooglil až k tomuto zjištění.
Pokud použijete knihovnu
#include <MD_MAX72xx.h>
tak displej funguje jako celek a dá se normálně použít bez otáčení. Systémem pokus omyl jsem zjišťoval v demo programech co to umí.
Co je potřeba upravit v záhlaví programů pro konkrétně ten to typ displeje:
Tuto část:
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 11
opravit takto :
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
a tuto část
// SPI hardware interface
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary pins
// MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
opravait takto (zakomentovat první řádek a odkomentovat ten druhý)
// SPI hardware interface
//MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary pins
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
Pro začátek práce je potřeba toto:
mx.begin(); // spusť mx
mx.control(MD_MAX72XX::INTENSITY, 1); nastav jas displeje – 1 je nejméně
Další příkazy
mx.clear(); // bez ničeho vymaže celý displej
mx.clear(2); // vymaž jen kostičku 2
Důležitá výhoda je, že se ohledně souřadnic používá displej jako celek, takže pravý horní roh je 0,0 a levý dolní roh je 7,31.
mx.setChar(12,'A'); // od sloupce 12 zobraz znak A – musí být v apostrofech
mx.setChar(7,41); // od sloupce 7 zobraz znak 41 - kod DECimaní třeba https://www.eso.org/~ndelmott/ascii.html tabulka
mx.setColumn(14,B10101010); // zobraz sloupec číslo 14 (1 zapnutá LED, 0 vypnutá LED)
mx.setRow(2,B10101010); //zobraz řádek 2 (1 zapnutá LED, 0 vypnutá LED), opakuje se na všech kostičkách
mx.setRow(3,2,B10101010); //zobraz řádek 2 (1 zapnutá LED, 0 vypnutá LED) jen na kostce 3
mx.setPoint(5,20,1); // rozsviť LED na řádku 5 a sloupci 20
Dále umí různé transformace a posuny
mx.transform(MD_MAX72XX::TRC); // pokud bez čísla, platí pro celý displej
mx.transform(1,MD_MAX72XX::TRC); // pokud napíšete číslo, tak platí pouze pro danou „kostičku“ (0-3) displeje
Jsou tyto varianty otočení
TSL - Transform Shift Left one pixel element. = Posune o 1 pixel doleva
TSR - Transform Shift Right one pixel element. = Posune o 1 pixel doprava
TSU - Transform Shift Up one pixel element. = Posune o 1 pixel nahoru
TSD - Transform Shift Down one pixel element. = Posune o 1 pixel dolů
TFLR - Transform Flip Left to Right. = převrátí zrcadlově zleva doprava, ale pozor nějak divně, alespoň u mě špatně prohazuje prostřední dvě kostičky
TFUD - Transform Flip Up to Down. = převrátí z hora dolů
TRC - Transform Rotate Clockwise 90 degrees. = pootočí doprava o 90°, ale pozor každou kostičku zvlášť
TINV - Transform INVert (pixels inverted) = invertuje displej (co svítí zhasne a co nesvítí rozsvítí)
V demo programech se dá využít část progamu pro rolování textu a další věci, ale já zatím potřebuji jen tyto základní věci. Děkuji všem za odkazy a inspiraci.
Pokud použijete knihovnu
#include <MD_MAX72xx.h>
tak displej funguje jako celek a dá se normálně použít bez otáčení. Systémem pokus omyl jsem zjišťoval v demo programech co to umí.
Co je potřeba upravit v záhlaví programů pro konkrétně ten to typ displeje:
Tuto část:
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 11
opravit takto :
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
a tuto část
// SPI hardware interface
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary pins
// MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
opravait takto (zakomentovat první řádek a odkomentovat ten druhý)
// SPI hardware interface
//MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// Arbitrary pins
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
Pro začátek práce je potřeba toto:
mx.begin(); // spusť mx
mx.control(MD_MAX72XX::INTENSITY, 1); nastav jas displeje – 1 je nejméně
Další příkazy
mx.clear(); // bez ničeho vymaže celý displej
mx.clear(2); // vymaž jen kostičku 2
Důležitá výhoda je, že se ohledně souřadnic používá displej jako celek, takže pravý horní roh je 0,0 a levý dolní roh je 7,31.
mx.setChar(12,'A'); // od sloupce 12 zobraz znak A – musí být v apostrofech
mx.setChar(7,41); // od sloupce 7 zobraz znak 41 - kod DECimaní třeba https://www.eso.org/~ndelmott/ascii.html tabulka
mx.setColumn(14,B10101010); // zobraz sloupec číslo 14 (1 zapnutá LED, 0 vypnutá LED)
mx.setRow(2,B10101010); //zobraz řádek 2 (1 zapnutá LED, 0 vypnutá LED), opakuje se na všech kostičkách
mx.setRow(3,2,B10101010); //zobraz řádek 2 (1 zapnutá LED, 0 vypnutá LED) jen na kostce 3
mx.setPoint(5,20,1); // rozsviť LED na řádku 5 a sloupci 20
Dále umí různé transformace a posuny
mx.transform(MD_MAX72XX::TRC); // pokud bez čísla, platí pro celý displej
mx.transform(1,MD_MAX72XX::TRC); // pokud napíšete číslo, tak platí pouze pro danou „kostičku“ (0-3) displeje
Jsou tyto varianty otočení
TSL - Transform Shift Left one pixel element. = Posune o 1 pixel doleva
TSR - Transform Shift Right one pixel element. = Posune o 1 pixel doprava
TSU - Transform Shift Up one pixel element. = Posune o 1 pixel nahoru
TSD - Transform Shift Down one pixel element. = Posune o 1 pixel dolů
TFLR - Transform Flip Left to Right. = převrátí zrcadlově zleva doprava, ale pozor nějak divně, alespoň u mě špatně prohazuje prostřední dvě kostičky
TFUD - Transform Flip Up to Down. = převrátí z hora dolů
TRC - Transform Rotate Clockwise 90 degrees. = pootočí doprava o 90°, ale pozor každou kostičku zvlášť
TINV - Transform INVert (pixels inverted) = invertuje displej (co svítí zhasne a co nesvítí rozsvítí)
V demo programech se dá využít část progamu pro rolování textu a další věci, ale já zatím potřebuji jen tyto základní věci. Děkuji všem za odkazy a inspiraci.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti