Lekcja 11: Shine on You Crazy Diamond - tęczowe rozbłyski.
            Każdy z nas zastanawiał się jak to jest, że ozdoby świąteczne w postaci diód świecą różnymi kolorami. Oczywiście jest
            na to proste wyjaśnienie: dioda LED RGB, czyli element, który potrafi świecić trzema podstawowymi barwami czerwoną (R - red),
            zieloną (G - green) i niebieską (B - blue). 
            Z teorii barw wiemy, że jest to jeden z modeli (oprócz CMYK), który wynika z możliwości ludzkiego oka. Każda barwa widziana przez człowieka może być 
            mieszanką trzech podstawowych barw, czyli właśnie RGB. 
          
        
 
        Wartości poszczególnych barw zmieniają się od 0 do 255 i aby otrzymać zadany kolor można skorzystać ze wzoru:
My wykorzystamy przyrząd, którego specyfikacja jest poniżej:
                Kolor czerwony:   
                   
  | 
                
                Kolor zielony:   
                   
  | 
            
                Kolor niebieski:   
                   
  | 
                 
                        
                 | 
            
 Dioda RGB (jak widać na zdjęciu) posiada cztery wyprowadzenia. Trzy z nich sterują trzema kolorami, zaś czwarte jest masą (najdłuższa nóżka). W celu 
            obniżenia napięcia podawanego na poszczególne nóżki zastosujemy oporniki 220 Ohm.
            Wykorzystamy diodę do generowania tęczowych rozbłysków przechodzących z jednego koloru w drugi. Będzie to bardzo efektowne
            i projekt można wykorzystać do dekoracji na najbliższe święta;)
        
 
        Kod:
             int Rpin = 9;
             int Gpin = 10;
             int Bpin = 11;
             void blysk(float r1, float g1, float b1, float r2, float g2, float b2, float t){
                      float grad_r, grad_g, grad_b;
                      float out_r, out_g, out_b;
                      grad_r = (r2-r1)/t;
                      grad_g = (g2-g1)/t;
                      grad_b = (b2-b1)/t;
            for ( float i=0; i<=t; i++ ){
                        out_r = r1 + grad_r*i;
                        out_g = g1 + grad_g*i;
                        out_b = b1 + grad_b*i;
                        out_r = map (out_r,0,255,255,0);
                        out_g = map (out_g,0,255,255,0);
                        out_b = map (out_b,0,255,255,0);
                        analogWrite(Rpin, (int)out_r);
                        analogWrite(Gpin, (int)out_g);
                        analogWrite(Bpin, (int)out_b);
                        delay(1);
                        }
                    }
            void setup(){
                }
            void loop(){
                blysk(255,0,0,0,255,0,500);
                blysk(0,255,0,0,0,255,500); 
                blysk(0,0,255,255,0,0,500); 
                }
       
       
           W liniach 1 - 3 deklarujemy piny odpowiadające za włączanie poszczególnych barw.
           W linii 4 zadeklarowana jest nowa funkcja o nazwie  blysk, której argumentami 
           są początkowe i końcowe wartości poszczególnych barw oraz czas trwania przejścia.
           Zmienne grad_r i pozostałe będą przechowywać wartość pośrednią koloru (r3-r1/t).
           W linii 10 zaczyna się pętla for, w której będą liczone poszczególne wartości wyjściowe kolorów out_r  
           przez dodanie do wartości początkowej koloru r1 iloczynu obliczonej wyżej wartości grad_r
           i zmiennej iteracyjnej i.
           W linii 14 wykorzystujemy funkcję mapowania map, której zadaniem jest ustalenie zakresu zmian danej wartości. Składnia tej funkcji
           to: map(value, fromLow, fromHigh, toLow, toHigh), co można przetłumaczyć: zmapuj wartość value w zakresie od fromLow do
           toLow i od fromHigh do toHigh. 
      Poszczególne parametry oznaczają odpowiednio: 
       
- value - wartość,
 - fromLow - najniższa granica obecnego zakresu,
 - fromHigh - najwyższa granica obecnego zakresu,
 - toLow - najniższa granica zakresu docelowego,
 - toHigh - najwyższa granica zakresu docelowego.
 
W linii 26 mamy wywołanie funkcji blysk dla danego przejścia kolorów (z zielonego do niebieskiego w pół sekundy).
Więcej informacji na temat funkcji map można znaleźć na stronie Arduino.
Powrót do spisu materiałów






