Dependents: Mbed-Mensch-1 jakob_menschergeredichnicht4 Mbed-Mensch-8 jakob_15041 ... more
WS2812B.cpp@0:2981411e4f69, 2016-03-20 (annotated)
- Committer:
- ladner
- Date:
- Sun Mar 20 14:49:16 2016 +0000
- Revision:
- 0:2981411e4f69
- Child:
- 1:a2549b9f2785
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ladner | 0:2981411e4f69 | 1 | #include "WS2812B.h" |
ladner | 0:2981411e4f69 | 2 | |
ladner | 0:2981411e4f69 | 3 | RGBOut::RGBOut(PinName rPin,PinName gPin,PinName bPin) : Rout(rPin) , Gout(gPin) , Bout(bPin) |
ladner | 0:2981411e4f69 | 4 | { |
ladner | 0:2981411e4f69 | 5 | Rout=1; |
ladner | 0:2981411e4f69 | 6 | Gout=1; |
ladner | 0:2981411e4f69 | 7 | Bout=1; |
ladner | 0:2981411e4f69 | 8 | } |
ladner | 0:2981411e4f69 | 9 | void RGBOut::set_RGB(uint32_t leddata) |
ladner | 0:2981411e4f69 | 10 | { |
ladner | 0:2981411e4f69 | 11 | float r = ((leddata&0x00FF00)>>8); |
ladner | 0:2981411e4f69 | 12 | float b = ((leddata&0x0000FF)); |
ladner | 0:2981411e4f69 | 13 | float g = ((leddata&0xFF0000)>>16); |
ladner | 0:2981411e4f69 | 14 | r = r/0xFF; |
ladner | 0:2981411e4f69 | 15 | g = g/0xFF; |
ladner | 0:2981411e4f69 | 16 | b = b/0xFF; |
ladner | 0:2981411e4f69 | 17 | Rout=(1-r); |
ladner | 0:2981411e4f69 | 18 | Gout=(1-g); |
ladner | 0:2981411e4f69 | 19 | Bout=(1-b); |
ladner | 0:2981411e4f69 | 20 | } |
ladner | 0:2981411e4f69 | 21 | |
ladner | 0:2981411e4f69 | 22 | void RGBOut::set(float r,float g,float b) |
ladner | 0:2981411e4f69 | 23 | { |
ladner | 0:2981411e4f69 | 24 | Rout=(1-r); |
ladner | 0:2981411e4f69 | 25 | Gout=(1-g); |
ladner | 0:2981411e4f69 | 26 | Bout=(1-b); |
ladner | 0:2981411e4f69 | 27 | } |
ladner | 0:2981411e4f69 | 28 | void RGBOut::set_r(float r) |
ladner | 0:2981411e4f69 | 29 | { |
ladner | 0:2981411e4f69 | 30 | Rout=(1-r); |
ladner | 0:2981411e4f69 | 31 | } |
ladner | 0:2981411e4f69 | 32 | void RGBOut::set_g(float g) |
ladner | 0:2981411e4f69 | 33 | { |
ladner | 0:2981411e4f69 | 34 | Gout=(1-g); |
ladner | 0:2981411e4f69 | 35 | } |
ladner | 0:2981411e4f69 | 36 | void RGBOut::set_b(float b) |
ladner | 0:2981411e4f69 | 37 | { |
ladner | 0:2981411e4f69 | 38 | Bout=(1-b); |
ladner | 0:2981411e4f69 | 39 | } |
ladner | 0:2981411e4f69 | 40 | |
ladner | 0:2981411e4f69 | 41 | |
ladner | 0:2981411e4f69 | 42 | uint32_t Brightness(uint32_t leddata,char Brightness) |
ladner | 0:2981411e4f69 | 43 | { |
ladner | 0:2981411e4f69 | 44 | float r = ((leddata&0x00FF00)>>8); |
ladner | 0:2981411e4f69 | 45 | float b = ((leddata&0x0000FF)); |
ladner | 0:2981411e4f69 | 46 | float g = ((leddata&0xFF0000)>>16); |
ladner | 0:2981411e4f69 | 47 | r = r/0xFF; |
ladner | 0:2981411e4f69 | 48 | g = g/0xFF; |
ladner | 0:2981411e4f69 | 49 | b = b/0xFF; |
ladner | 0:2981411e4f69 | 50 | r = r*Brightness; |
ladner | 0:2981411e4f69 | 51 | g = g*Brightness; |
ladner | 0:2981411e4f69 | 52 | b = b*Brightness; |
ladner | 0:2981411e4f69 | 53 | char rNew = r; |
ladner | 0:2981411e4f69 | 54 | char gNew = g; |
ladner | 0:2981411e4f69 | 55 | char bNew = b; |
ladner | 0:2981411e4f69 | 56 | uint32_t out = ((gNew<<8)|rNew)<<8|bNew; |
ladner | 0:2981411e4f69 | 57 | return out; |
ladner | 0:2981411e4f69 | 58 | } |
ladner | 0:2981411e4f69 | 59 | |
ladner | 0:2981411e4f69 | 60 | LedOut::LedOut(PinName pin):Output(pin) |
ladner | 0:2981411e4f69 | 61 | { |
ladner | 0:2981411e4f69 | 62 | } |
ladner | 0:2981411e4f69 | 63 | |
ladner | 0:2981411e4f69 | 64 | void LedOut::WriteLed(uint32_t leddata) |
ladner | 0:2981411e4f69 | 65 | { |
ladner | 0:2981411e4f69 | 66 | int i; |
ladner | 0:2981411e4f69 | 67 | for(i=0;i<24;i++) |
ladner | 0:2981411e4f69 | 68 | { |
ladner | 0:2981411e4f69 | 69 | writeledbit((leddata&(1<<i))>0); |
ladner | 0:2981411e4f69 | 70 | } |
ladner | 0:2981411e4f69 | 71 | } |
ladner | 0:2981411e4f69 | 72 | |
ladner | 0:2981411e4f69 | 73 | void LedOut::writeledbit(char wert) // Funktion schreibe bit |
ladner | 0:2981411e4f69 | 74 | { |
ladner | 0:2981411e4f69 | 75 | int j; |
ladner | 0:2981411e4f69 | 76 | if(wert) |
ladner | 0:2981411e4f69 | 77 | { |
ladner | 0:2981411e4f69 | 78 | Output=1; // data 1 |
ladner | 0:2981411e4f69 | 79 | for(j=0;j<5;j++) |
ladner | 0:2981411e4f69 | 80 | { |
ladner | 0:2981411e4f69 | 81 | __nop(); |
ladner | 0:2981411e4f69 | 82 | } |
ladner | 0:2981411e4f69 | 83 | Output=0; |
ladner | 0:2981411e4f69 | 84 | for(j=0;j<1;j++) |
ladner | 0:2981411e4f69 | 85 | { |
ladner | 0:2981411e4f69 | 86 | __nop(); |
ladner | 0:2981411e4f69 | 87 | } |
ladner | 0:2981411e4f69 | 88 | } |
ladner | 0:2981411e4f69 | 89 | else |
ladner | 0:2981411e4f69 | 90 | { |
ladner | 0:2981411e4f69 | 91 | Output=1; // data 0 |
ladner | 0:2981411e4f69 | 92 | for(j=0;j<1;j++) |
ladner | 0:2981411e4f69 | 93 | { |
ladner | 0:2981411e4f69 | 94 | __nop(); |
ladner | 0:2981411e4f69 | 95 | } |
ladner | 0:2981411e4f69 | 96 | Output=0; |
ladner | 0:2981411e4f69 | 97 | for(j=0;j<5;j++) |
ladner | 0:2981411e4f69 | 98 | { |
ladner | 0:2981411e4f69 | 99 | __nop(); |
ladner | 0:2981411e4f69 | 100 | } |
ladner | 0:2981411e4f69 | 101 | } |
ladner | 0:2981411e4f69 | 102 | } |
ladner | 0:2981411e4f69 | 103 |