RGB led driver
RGB led driver
No vím jak rozblikat jednotlivé barvy ledek postupně po sobě atd ale nevím jak mám dosáhnout toho že to budu přepínat přes přepínače postupně tak jak chci já. Docela by se hodil nejaký návrh kodu který bych si upravil podle sebe
Re: RGB led driver
Podívej se třeba na příkaz switch
V něm můžeš podle toho co je stisknuté (načteš do řídící proměnné příkazu switch) provést jednotlivé efekty.
V něm můžeš podle toho co je stisknuté (načteš do řídící proměnné příkazu switch) provést jednotlivé efekty.
RGB led driver
Tak zatím se mi povedlo vykoumat tohle ale nějak jsem se zasekl na tom že nevím jak udělat aby se příkazy po stisku tlačítka opakovali pořád do kola. Teď jsem dosáhl pouze toho že zmáčknu tlačítko to provede akci jednou ale neopakuje ji.
Re: RGB led driver
Ty dlouhý pauzy jsou v tomhle případě nesmysl.
Pro změnu funkce bys musel držet tlačítko tak dlouho, než by došlo k ukončení jednoho blikacího cyklu.
Program se dá napsat tisícem způsobů.
Já bych na to šel asi nějak takhle (neodzkoušeno - je to jen princip):
V hlavní smyčce by se co nejrychleji testoval stav tlačítek.
Každý stisk by nastavil do proměnné požadovanou funkci.
Hned potom by se podle té proměnné funkce vykonala.
V případě nějaké blikací funkce bych zavedl počítadlo cyklů a při dosažení požadovaného čísla cyklu by se vykonala další fáze blikání.
Dá se to dělat i pomocí funkce millis(), ale mně se to takhle zdá jednodušší.
Pro změnu funkce bys musel držet tlačítko tak dlouho, než by došlo k ukončení jednoho blikacího cyklu.
Program se dá napsat tisícem způsobů.
Já bych na to šel asi nějak takhle (neodzkoušeno - je to jen princip):
V hlavní smyčce by se co nejrychleji testoval stav tlačítek.
Každý stisk by nastavil do proměnné požadovanou funkci.
Hned potom by se podle té proměnné funkce vykonala.
V případě nějaké blikací funkce bych zavedl počítadlo cyklů a při dosažení požadovaného čísla cyklu by se vykonala další fáze blikání.
Dá se to dělat i pomocí funkce millis(), ale mně se to takhle zdá jednodušší.
Kód: Vybrat vše
void loop(void)
{
if (digitalRead(tlacitko1) == HIGH) funkce = 1; // rozsvit jen cervenou
if (digitalRead(tlacitko2) == HIGH) funkce = 2; // rozsvit jen zelenou
if (digitalRead(tlacitko3) == HIGH) funkce = 3; // rozsvit jen modrou
if (digitalRead(tlacitko4) == HIGH) funkce = 4; // vsechno zhasni
if (digitalRead(tlacitko5) == HIGH) // nejaka blikaci funkce
{
funkce = 5;
casovani = 0;
}
/// tady by byly dalsi testy tlacitek nebo jejich kombinace
// a hned potom vykonani zvolene funkce:
switch (funkce)
{
case 1:
rozsvit_jen_cervenou();
break;
case 2:
rozsvit_jen_zelenou();
break;
case 3:
rozsvit_jen_modrou();
break;
case 4:
vsechno_zhasni();
break;
case 5: // tahle funkce bude mit periodu 1800ms
if (casovani == 0) rozsvit_jen_cervenou(); // hned na zacatku cyklu se rozsviti cervena
if (casovani == 60) rozsvit_jen_zelenou(); // po 0,6 sekunde se rozsviti zelena
if (casovani == 120) rozsvit_jen_modrou(); // po dalsi 0,6 sekunde se rozsviti modra
casovani ++;
if (casovani == 180) casovani = 0; // po dalsi 0,6 sekunde se casovani vynuluje a blikaci cyklus zacne od zacatku
delay(10); // jedna smycka v teto funkci bude trvat 10ms
break; // to je jeste dostatecne rychle pro bezproblemove cteni tlacitek
// .... dalsi funkce
}
}
RGB led driver
Jo a taky mi došlo že používat digitální piny asi není uplně ideální hlavně když bych chtěl udělat fade effect
Re: RGB led driver
Jas se dá regulovat přes PWM a na to jsou vyhrazené jen některé piny na Arduinu (v závislosti na typu):
https://www.arduino.cc/reference/en/lan ... alogwrite/
https://www.arduino.cc/reference/en/lan ... alogwrite/
Re: RGB led driver
To bude na hudbu ? Já začal tím, že jsem si jako první stvořil "generátor kroků", ten podle BPM dané písničky generoval kdy má dojít ke změně světel. Ovládal se několika tlačítky BPM+ BPM- a pak měl ještě tlačítka co fungovaly jen když byly drženy ... HOLD a jako děliče 2 a 4, nebo násobiče 2, 4, 8 , 16 a 32. Potenciometr, kterým se zkracovala doba svitu jednoho kroku.
Efekty jsem rozhodně neprogramoval na tvrdo, ale měl jsem uloženo v jakém kroku efektu má co jak jasně svítit. Přednastavené efekty byly v EEPROMce, ládovalo se to tam do ní přes seriovou linku a ten řetězec mi vytvořil napsaný program v C++. On to tam i poslal.
Ovládáno bylo 2x5 RGB diod (3PWM výstupy + 5 select digidálních pinů + 1 digitální pin co přes NOT hradlo přepínal mezi jednou pěticí a druhou pěticí)
Nedostatek pinů řešilo připojení vícero tlačítek na analogové vstupy.
Bohužel už je to 10let zpátky a sketch je na 8let nefunkčním notebooku, součástky vytahány z nepájivého pole a zabaleny do sáčku a zahozeny do šuplíku
Efekty jsem rozhodně neprogramoval na tvrdo, ale měl jsem uloženo v jakém kroku efektu má co jak jasně svítit. Přednastavené efekty byly v EEPROMce, ládovalo se to tam do ní přes seriovou linku a ten řetězec mi vytvořil napsaný program v C++. On to tam i poslal.
Ovládáno bylo 2x5 RGB diod (3PWM výstupy + 5 select digidálních pinů + 1 digitální pin co přes NOT hradlo přepínal mezi jednou pěticí a druhou pěticí)
Nedostatek pinů řešilo připojení vícero tlačítek na analogové vstupy.
Bohužel už je to 10let zpátky a sketch je na 8let nefunkčním notebooku, součástky vytahány z nepájivého pole a zabaleny do sáčku a zahozeny do šuplíku
RGB led driver
Prostě bych chtěl něco ve stylu dmx mixu, takže že bych měl 7 tlačítek na různé barvy ale zároveň nezávislé na tom abych mohl měnit efekty. Takže aby volba barev a efektu bylo nezávislé na sobě. Co jsem zatím zkoušel tak vždy jsem dosáhl toho že při změně barvy se vypl i daný efekt a naopak. Co se týká zapojení tak s tím není problém 3 mosfety na míchaní rgb barev a další 3 nebo více na spínaní efektů
Re: RGB led driver
Hele, já si udělal něco na mačkání kláves a klikání myší do jedne gamesy, ale obecně by se ti to mohlo hodit jako inspirace
http://micro-corner.gilhad.cz/blog/Ardu ... ouse3.html
jde o jednoduché stavové automaty (což zní učeně, ale prostě si pamatuju, kde jsem a kdy mám udělat něco dalšího a procházím tím různé cykly a podmínky - s tím, že mi pro každý krok stačí pár instrukcí a znova se to volá teprve až nastane "správný čas", takže loop() většinu času cykluje naprázdno a jen čeká na správné millis. A je tudíž schopen jet i řadu "efektů" naráz nezávisle.
běží tam 2 nezávislé smyčky přez sebe - jedna čte tlačítka a plánuje co dál, druhá provádí "efekty", s tím, že daný "efekt" při změně vždy doběhne do "stabilního stavu" a pak se teprve spustí další naplánovaný.
Čtení tlačítek (s debouncingem) by šlo přepsat i líp a jde celkem snadno rozšířit - já používám 3 - A a B spouští příslušný "efekt", C ho zastaví (pokud "efekt" běží), nebo přepne (cyklicky) na další sadu "efektů" pokud žádný efekt neběží
Zkopírováním (a přejmenováním proměnných) bloku "next state" můžeš snadno získat víc paralelně běžících "efektů" (co já vím pomalu se měnící modrou, rychle se měnící červenou a občasné bliknutí všeho)
Pokud jedeš jen 3 barvy (a třeba intenzity) tak to můžeš mít jako nějakou globální/sdílenou proměnnou a nějaký efekt bude třeba blikat (zapínat/vypínat proměnnou OnOff ) a jiný měnit barevné složky (měnit intenzity barev v těch globálech) (a další klidně může dělat PWM tak, že si bude dokola načítat proměnnou a když bude její hodnota menší než intenzita a zároveň bude zapnuté OnOff, tak sepne mosfet, jinak ho rozepne)
Když si to ovládání takhle rozdělíš (nezávisle nastavovat intenzitu jednotlivých barev, přepínat pořadí barev v tabulce, zapínat/vypínat, ovládat mosfet ...), tak můžeš každou složku měnit zvlášť a plynule číst tlačítka a navíc vybrané efekty nechat doběhnout do nějakého rozumněho stavu než se přepnou, zatímco jiné měnit třeba okamžitě
http://micro-corner.gilhad.cz/blog/Ardu ... ouse3.html
jde o jednoduché stavové automaty (což zní učeně, ale prostě si pamatuju, kde jsem a kdy mám udělat něco dalšího a procházím tím různé cykly a podmínky - s tím, že mi pro každý krok stačí pár instrukcí a znova se to volá teprve až nastane "správný čas", takže loop() většinu času cykluje naprázdno a jen čeká na správné millis. A je tudíž schopen jet i řadu "efektů" naráz nezávisle.
běží tam 2 nezávislé smyčky přez sebe - jedna čte tlačítka a plánuje co dál, druhá provádí "efekty", s tím, že daný "efekt" při změně vždy doběhne do "stabilního stavu" a pak se teprve spustí další naplánovaný.
Čtení tlačítek (s debouncingem) by šlo přepsat i líp a jde celkem snadno rozšířit - já používám 3 - A a B spouští příslušný "efekt", C ho zastaví (pokud "efekt" běží), nebo přepne (cyklicky) na další sadu "efektů" pokud žádný efekt neběží
Zkopírováním (a přejmenováním proměnných) bloku "next state" můžeš snadno získat víc paralelně běžících "efektů" (co já vím pomalu se měnící modrou, rychle se měnící červenou a občasné bliknutí všeho)
Pokud jedeš jen 3 barvy (a třeba intenzity) tak to můžeš mít jako nějakou globální/sdílenou proměnnou a nějaký efekt bude třeba blikat (zapínat/vypínat proměnnou OnOff ) a jiný měnit barevné složky (měnit intenzity barev v těch globálech) (a další klidně může dělat PWM tak, že si bude dokola načítat proměnnou a když bude její hodnota menší než intenzita a zároveň bude zapnuté OnOff, tak sepne mosfet, jinak ho rozepne)
Když si to ovládání takhle rozdělíš (nezávisle nastavovat intenzitu jednotlivých barev, přepínat pořadí barev v tabulce, zapínat/vypínat, ovládat mosfet ...), tak můžeš každou složku měnit zvlášť a plynule číst tlačítka a navíc vybrané efekty nechat doběhnout do nějakého rozumněho stavu než se přepnou, zatímco jiné měnit třeba okamžitě
Re: RGB led driver
Já bych šel cestou NEOPIXEL, pokud chceš něco takovéhovogeer97 píše: ↑18 úno 2021, 17:13Prostě bych chtěl něco ve stylu dmx mixu, takže že bych měl 7 tlačítek na různé barvy ale zároveň nezávislé na tom abych mohl měnit efekty. Takže aby volba barev a efektu bylo nezávislé na sobě. Co jsem zatím zkoušel tak vždy jsem dosáhl toho že při změně barvy se vypl i daný efekt a naopak. Co se týká zapojení tak s tím není problém 3 mosfety na míchaní rgb barev a další 3 nebo více na spínaní efektů
https://www.youtube.com/watch?v=RZ_UWYBOj8M
Nebo myslíš něco jako světlo ?
https://www.youtube.com/watch?v=pdFtoTRiQ-M
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"
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů