RGB led driver

vogeer97
Příspěvky: 13
Registrován: 19 lis 2020, 20:56
Reputation: 0

RGB led driver

Příspěvek od vogeer97 » 17 úno 2021, 18:46

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

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: RGB led driver

Příspěvek od ondraN » 17 úno 2021, 18:52

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.

vogeer97
Příspěvky: 13
Registrován: 19 lis 2020, 20:56
Reputation: 0

RGB led driver

Příspěvek od vogeer97 » 17 úno 2021, 19:38

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.
Přílohy
test 2.PNG
test 2.PNG (8.53 KiB) Zobrazeno 3755 x
test 1.PNG

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: RGB led driver

Příspěvek od AstroMiK » 17 úno 2021, 20:21

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šší.

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


      }
   

  }




vogeer97
Příspěvky: 13
Registrován: 19 lis 2020, 20:56
Reputation: 0

RGB led driver

Příspěvek od vogeer97 » 17 úno 2021, 21:02

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

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: RGB led driver

Příspěvek od AstroMiK » 17 úno 2021, 22:03

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/

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: RGB led driver

Příspěvek od kiRRow » 18 úno 2021, 16:44

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 :D

vogeer97
Příspěvky: 13
Registrován: 19 lis 2020, 20:56
Reputation: 0

RGB led driver

Příspěvek od vogeer97 » 18 úno 2021, 17:13

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ů

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: RGB led driver

Příspěvek od gilhad » 18 úno 2021, 21:59

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ě

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: RGB led driver

Příspěvek od pavel1tu » 19 úno 2021, 14:20

vogeer97 píše:
18 úno 2021, 17:13
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ů
Já bych šel cestou NEOPIXEL, pokud chceš něco takového
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"

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů