[2560][BASCOM] Generowanie tęczy dla kilku LED RGB

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
siekierzyński
Użytkownik
Posty: 482
Rejestracja: 01 cze 2010, 23:12
Lokalizacja: Nareszcie Polska

[2560][BASCOM] Generowanie tęczy dla kilku LED RGB

Post autor: siekierzyński » 14 gru 2014, 23:57

Witam,

ostatnio się głowię nad tym, w jaki sposób wygenerować efekt tęczy dla linijki np. 7 diod RGB. Idea jest taka aby 'koniec tęczy' przechodził na początek i była by w tedy taka wstęga. Wiadomo mógłbym porobić gotowe tablice z ograniczonymi wartościami, ale mi chodzi o płynne przejścia. Zakres wartości dla danego koloru to 0-255 czyli 1 bajt. Dla jednej diody mamy 3 bajty, zaś co w przypadku gdy mam tych diod kilka i chcem uzleźnić kolor od koloru poprzedniej diody. Generowanie kolorów było by programowo.

Teraz w czasie pisania postu, przyszło mi do głowy, że można zrobić 1 diodę jako główną, a potem od niej odejmować, lub dodawać 'przesunięcie' wstęgi dla koleinej diody itd. Tglko teraz w jaki sposób zinterpretować 'całą wstęgę', po to aby obliczyć przesunięcie do kolejnej diody.

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 15 gru 2014, 12:09

Poczytaj o modelu kolorów HSL i HSV. Owszem przeliczenie tego na RGB trochę trwa, ale jak pisałeś można to wrzucić w tablicę - raz wyliczyć i tylko przesuwać.

Jeśli uważasz że to za trudne i zbyt skomplikowane, a całość można bardzo uprościć, zastosuj jeden z poniższych modeli:
0) dioda R świeci pełną mocą
1) przez max 255 kroków zwiększasz jasność LED G, na koniec teraz świeci RG
2) przez max 255 kroków zmniejszasz jasność LED R, na koniec świeci G
3) zwiększasz B, świeci GB
4) zmniejszasz G, świeci B
5) zwiększasz R, świeci RB
6) zmniejszasz G, świeci R, masz sytuację z kroku 0
- masz 6x 255 kroków = 1530 stanów. Dzielisz tą liczbę na N LEDów połączonych w tęczę i możesz wyliczyć stan każdej z nich, a ze stanu przejdziesz na konkretne wartości.

0) dioda R świeci pełną mocą
1) przez max 255 kroków zwiększasz jasność LED G, jednocześnie zmniejszasz jasność LED R, na koniec świeci G
2) zwiększasz B, zmniejszasz G, świeci B
3) zwiększasz R, zmniejszasz G, świeci R, masz sytuację z kroku 0
Analogicznie masz 765 kroków.

Do tego możesz dodać krzywą gamma - przelogarytmowanie każdej składowej RGB tak by odpowiadała charakterystyce ludzkiego oka, u konkurencji masz aż 3 poradniki jak to zrobić:
http://mikrokontrolery.blogspot.com/201 ... zewka.html

ODPOWIEDZ