ShiftBrite control class using SPI
Dependents: ShiftBrite_HelloWorld 4180Lab3_2 bluefruit_LED 4180Lab4_p1 ... more
Diff: ShiftBrite.cpp
- Revision:
- 0:466ea48e852a
diff -r 000000000000 -r 466ea48e852a ShiftBrite.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ShiftBrite.cpp Mon Nov 03 05:21:08 2014 +0000
@@ -0,0 +1,64 @@
+#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;
+
+
+}
ShiftBrite