ShiftBrite control class using SPI
Dependents: ShiftBrite_HelloWorld 4180Lab3_2 bluefruit_LED 4180Lab4_p1 ... more
ShiftBrite.cpp
- Committer:
- jwaters9
- Date:
- 2014-11-03
- Revision:
- 0:466ea48e852a
File content as of revision 0:466ea48e852a:
#include "mbed.h" #include "ShiftBrite.h" ShiftBrite::ShiftBrite(PinName latch, PinName enable,SPI& spi) : _spi(spi), _latch(latch), _enable(enable) { //Recomended Calabration levels for Brightness blue_level = green_level = 100; red_level = 120; //red has a larger range of brightness than the others init(); } void ShiftBrite::init(void) { Brightness(red_level,green_level,blue_level); _spi.format(16,0); _spi.frequency(500000); _red = 255; //White _green = 255; _blue = 255; } void ShiftBrite::Write(int red,int green,int blue) { //can hold up to 10 bits for each color _red = red; _green = green; _blue = blue; unsigned int low_color=0; unsigned int high_color=0; high_color=((_blue&0x3FF)<<4)|((_red&0x3C0)>>6); //00bb bbbb bbbb rrrr low_color=(((_red&0x3F)<<10)|_green); //rrrr rrgg gggg gggg _spi.write(high_color); _spi.write(low_color); _enable=1; //resync PWM counters - might flash without this with fast color updates _latch=1; wait(.000015); _latch=0; _enable=0; wait(.005); } //Change Brightness scaling levels void ShiftBrite::Brightness(int redLevel,int greenLevel,int blueLevel) { // Levels can be 50..1023 //Command for Brightness unsigned int Init_Command = 0x40000000; Init_Command = Init_Command|(blueLevel<<20)|(redLevel<<10)|greenLevel; _spi.write(Init_Command >> 16&0xFFFF); _spi.write(Init_Command &0xFFFF); wait(.000015); _latch=1; _enable =1; wait(.000015); _latch=0; _enable=0; }