Dependents: Mbed-Mensch-1 jakob_menschergeredichnicht4 Mbed-Mensch-8 jakob_15041 ... more
Diff: WS2812B.cpp
- Revision:
- 0:2981411e4f69
- Child:
- 1:a2549b9f2785
diff -r 000000000000 -r 2981411e4f69 WS2812B.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WS2812B.cpp Sun Mar 20 14:49:16 2016 +0000 @@ -0,0 +1,103 @@ +#include "WS2812B.h" + + RGBOut::RGBOut(PinName rPin,PinName gPin,PinName bPin) : Rout(rPin) , Gout(gPin) , Bout(bPin) + { + Rout=1; + Gout=1; + Bout=1; + } + void RGBOut::set_RGB(uint32_t leddata) + { + float r = ((leddata&0x00FF00)>>8); + float b = ((leddata&0x0000FF)); + float g = ((leddata&0xFF0000)>>16); + r = r/0xFF; + g = g/0xFF; + b = b/0xFF; + Rout=(1-r); + Gout=(1-g); + Bout=(1-b); + } + + void RGBOut::set(float r,float g,float b) + { + Rout=(1-r); + Gout=(1-g); + Bout=(1-b); + } + void RGBOut::set_r(float r) + { + Rout=(1-r); + } + void RGBOut::set_g(float g) + { + Gout=(1-g); + } + void RGBOut::set_b(float b) + { + Bout=(1-b); + } + + +uint32_t Brightness(uint32_t leddata,char Brightness) +{ + float r = ((leddata&0x00FF00)>>8); + float b = ((leddata&0x0000FF)); + float g = ((leddata&0xFF0000)>>16); + r = r/0xFF; + g = g/0xFF; + b = b/0xFF; + r = r*Brightness; + g = g*Brightness; + b = b*Brightness; + char rNew = r; + char gNew = g; + char bNew = b; + uint32_t out = ((gNew<<8)|rNew)<<8|bNew; + return out; +} + +LedOut::LedOut(PinName pin):Output(pin) +{ +} + +void LedOut::WriteLed(uint32_t leddata) +{ + int i; + for(i=0;i<24;i++) + { + writeledbit((leddata&(1<<i))>0); + } +} + +void LedOut::writeledbit(char wert) // Funktion schreibe bit +{ + int j; + if(wert) + { + Output=1; // data 1 + for(j=0;j<5;j++) + { + __nop(); + } + Output=0; + for(j=0;j<1;j++) + { + __nop(); + } + } + else + { + Output=1; // data 0 + for(j=0;j<1;j++) + { + __nop(); + } + Output=0; + for(j=0;j<5;j++) + { + __nop(); + } + } +} +