Strona 1 z 1

LED Equalizer na WS2812B

: środa 28 paź 2015, 23:48
autor: RafPe
Hey ,

W nawiazaniu do mojego projektu http://microgeek.eu/viewtopic.php?f=22&t=99 przymierzam sie aby uzyc popularnego LM3916 i wykorzystac go aby sterowac WS2812b.

Wpadlem na pomysl , ze najfajniej by bylo gdyby osobny uC analizowal stan pinow LM3916 a w odpowiedzi sterowal ledami. No i tutaj chcialem zweryfikowac tok myslenia w zakresie pisania oprogramowania.

Zakladam , ze uC bedzie mogl odczytac stan od 0-10 gdzie 0 to jest totalna cisza a 10 bedzie oznaczalo , ze jest naprawde duza impreza na maxa i sasiedzi sa wniebowzieci :)

Aby umilic te efekty dla oka mysle ze fajnie by bylo wykorzystac gradienty. I tutaj pojawil mi sie pomysl - stworzylbym strukture opisujaca od jakiego koloru zaczac a na jakim zakonczyc oraz jakie sa indexy startowe i koncowe ledow. Utworzylbym tablice 10 takich obiektow i umiescil je w tablicy.

Kod: Zaznacz cały


typedef struct
{
    uint color_start;
    uint color_stop;
    uint index_start;
    uint index_stop;
} TAUDIOCOLOR;

// ...
// ... Nastepnie utworzenie 10 obiektow
// ...

TAUDICOLOR tablica_danych[10];  // Kod jest tylko pogladowy i pisany w przegladarce :)





Majac cos takiego gotowego dobrze by bylo miec funkcje do obslugi gradientow - mysle ze cos w rodzaju ponizszej funkcji powinno sie sprawdzic ( *jak poprzednio kod na razie jest tylko pogladowy :) - bardziej do oceny podejscia )

Kod: Zaznacz cały


function ustaw_gradient( *wskaznik_na_taudiokolor, *wskaznik_na_tablice_z_ws2812)
{
     // tutaj kod odpowiednio ustawiajacy gradient dla naszego paska
}




No i chyba ostatnie to po odczytaniu wartosci 0-10 wykonalbym operacje iteracji po kazdym elemencie tablicy moich struktur az do wartosci rownej wartosci odczytanej - i dla kazdej z opcji ustawil odpowiednio ledy przy wykorzystaniu w/w funkcji

Kod: Zaznacz cały


for (uint var=0; var < odczytana_wartosc ; var++)
{
      ustaw_gradient( tablica_danych[ var ] , *wskaznik_na_tablice_z_ws2812);
}



I kiedy to sie zakonczy po prostu wyslij_na_pasek();


Ciekawy jestem co myslicie i czy wg was cos warto byloby zrobic inaczej i bardziej optymalnie :)

Re: LED Equalizer na WS2812B

: czwartek 29 paź 2015, 00:31
autor: Antystatyczny
Pisząc o gradientach masz na myśli wskaźniki (1 wskaźnik?) wysterowania, który będzie zaczynał świecić przykładowo na czerwono, a w miarę przyrostu poziomu sygnału kolejne diody bedą się świeciły coraz bardziej na żółto, by w końcu przejść np. w kolor zielony? Nie bardzo to czuję... Nakreśl odrobinkę precyzyjniej stronę sprzętową, by pobudzić mą wyobraźnię :)

Re: LED Equalizer na WS2812B

: czwartek 29 paź 2015, 07:39
autor: RafPe
Hey @Anty :) A wiec zeby pobudzic Twoja wyobraznie planuje miec po 1 wiezy (czyli po 1 buforze na ledy ) na kazdy kanal co mniej wiecej mialoby wygladac tak jak na zalaczniku ( z uwzglednieniem gradientow )