ShiftBrite control class using SPI
Dependents: ShiftBrite_HelloWorld 4180Lab3_2 bluefruit_LED 4180Lab4_p1 ... more
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 }
Generated on Thu Jul 14 2022 08:24:49 by 1.7.2