ShiftBrite control class using SPI

Dependents:   ShiftBrite_HelloWorld 4180Lab3_2 bluefruit_LED 4180Lab4_p1 ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ShiftBrite.cpp Source File

ShiftBrite.cpp

00001 #include "mbed.h"
00002 #include "ShiftBrite.h"
00003 
00004 
00005 ShiftBrite::ShiftBrite(PinName latch, PinName enable,SPI& spi) : _spi(spi), _latch(latch), _enable(enable) {
00006     //Recomended Calabration levels for Brightness
00007     blue_level = green_level = 100;
00008     red_level = 120;    //red has a larger range of brightness than the others
00009     init();
00010 }
00011 
00012 void ShiftBrite::init(void) {
00013     
00014     Brightness(red_level,green_level,blue_level);
00015     
00016     _spi.format(16,0);
00017     _spi.frequency(500000);
00018     _red = 255;        //White
00019     _green = 255;
00020     _blue = 255;
00021 }
00022 
00023 void ShiftBrite::Write(int red,int green,int blue) {  //can hold up to 10 bits for each color
00024     _red = red;
00025     _green = green;
00026     _blue = blue;
00027     
00028     unsigned int low_color=0;
00029     unsigned int high_color=0;
00030     
00031     high_color=((_blue&0x3FF)<<4)|((_red&0x3C0)>>6);  //00bb bbbb bbbb rrrr
00032     low_color=(((_red&0x3F)<<10)|_green);     //rrrr rrgg gggg gggg
00033     
00034     
00035     _spi.write(high_color);
00036     _spi.write(low_color);
00037     
00038     _enable=1; //resync PWM counters - might flash without this with fast color updates
00039     _latch=1;
00040     wait(.000015);
00041     _latch=0;
00042     _enable=0;
00043     wait(.005);
00044     
00045 }
00046 
00047 //Change Brightness scaling levels
00048 void ShiftBrite::Brightness(int redLevel,int greenLevel,int blueLevel) { // Levels can be 50..1023
00049     //Command for Brightness
00050     unsigned int Init_Command = 0x40000000;
00051     
00052     Init_Command = Init_Command|(blueLevel<<20)|(redLevel<<10)|greenLevel;
00053     _spi.write(Init_Command >> 16&0xFFFF);
00054     _spi.write(Init_Command &0xFFFF);
00055     
00056     wait(.000015);
00057     _latch=1;
00058     _enable =1;
00059     wait(.000015);
00060     _latch=0;
00061     _enable=0;
00062     
00063 
00064 }