Controls a single ShiftBrite LED

Dependents:   4180_L1

Committer:
aswild
Date:
Thu Jan 30 20:11:53 2014 +0000
Revision:
1:11ebaa7aaae9
Parent:
0:5948048ae480
made it 0.5% prettier

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aswild 0:5948048ae480 1 #include "ShiftBrite.h"
aswild 0:5948048ae480 2
aswild 0:5948048ae480 3 ShiftBrite::ShiftBrite(PinName spi1, PinName spi2, PinName spi3, PinName latch_) : spi(spi1, spi2, spi3), latch(latch_)
aswild 0:5948048ae480 4 {
aswild 0:5948048ae480 5 spi.format(16, 0);
aswild 0:5948048ae480 6 spi.frequency(500000);
aswild 0:5948048ae480 7 latch = 0;
aswild 0:5948048ae480 8 }
aswild 0:5948048ae480 9
aswild 0:5948048ae480 10 void ShiftBrite::writeCommand(int command)
aswild 0:5948048ae480 11 {
aswild 0:5948048ae480 12 spi.write(command >> 16);
aswild 0:5948048ae480 13 spi.write(command & 0x0000ffff);
aswild 0:5948048ae480 14 latch = 1;
aswild 0:5948048ae480 15 wait(0.00001);
aswild 0:5948048ae480 16 latch = 0;
aswild 0:5948048ae480 17 }
aswild 0:5948048ae480 18
aswild 0:5948048ae480 19 void ShiftBrite::writeInit(int red_level, int green_level, int blue_level)
aswild 0:5948048ae480 20 {
aswild 0:5948048ae480 21 unsigned int Init_Command = 0x40000000;
aswild 0:5948048ae480 22 Init_Command = 0x40000000|(blue_level<<20)|(red_level<<10)|green_level;
aswild 0:5948048ae480 23 spi.write(Init_Command >> 16 & 0xFFFF);
aswild 0:5948048ae480 24 spi.write(Init_Command & 0xFFFF);
aswild 0:5948048ae480 25 wait(.000015);
aswild 0:5948048ae480 26 latch=1;
aswild 0:5948048ae480 27 wait(.000015);
aswild 0:5948048ae480 28 latch=0;
aswild 0:5948048ae480 29 }
aswild 0:5948048ae480 30
aswild 0:5948048ae480 31 void ShiftBrite::setColorRGB(int red, int green, int blue)
aswild 0:5948048ae480 32 {
aswild 0:5948048ae480 33 int command = (blue << 20) | (red << 10) | green;
aswild 0:5948048ae480 34 writeCommand(command);
aswild 0:5948048ae480 35 }
aswild 0:5948048ae480 36
aswild 0:5948048ae480 37 void ShiftBrite::setColor(int color)
aswild 0:5948048ae480 38 {
aswild 0:5948048ae480 39 setColorRGB(RED(color), GREEN(color), BLUE(color));
aswild 0:5948048ae480 40 }
aswild 0:5948048ae480 41
aswild 0:5948048ae480 42 void ShiftBrite::fadeColor(int color1, int color2, float time)
aswild 0:5948048ae480 43 {
aswild 0:5948048ae480 44 int red1 = RED(color1);
aswild 0:5948048ae480 45 int green1 = GREEN(color1);
aswild 0:5948048ae480 46 int blue1 = BLUE(color1);
aswild 0:5948048ae480 47 int red2 = RED(color2);
aswild 0:5948048ae480 48 int green2 = GREEN(color2);
aswild 0:5948048ae480 49 int blue2 = BLUE(color2);
aswild 0:5948048ae480 50
aswild 0:5948048ae480 51 float rstep = (red2 - red1) / 256.0;
aswild 0:5948048ae480 52 float gstep = (green2 - green1) / 256.0;
aswild 0:5948048ae480 53 float bstep = (blue2 - blue1) / 256.0;
aswild 0:5948048ae480 54 float steptime = time / 256.0;
aswild 0:5948048ae480 55
aswild 0:5948048ae480 56 for (int i = 0; i < 256; i++)
aswild 0:5948048ae480 57 {
aswild 0:5948048ae480 58 setColorRGB(red1 + (int)(rstep * i), green1 + (int)(gstep * i), blue1 + (int)(bstep * i));
aswild 0:5948048ae480 59 wait(steptime);
aswild 0:5948048ae480 60 }
aswild 0:5948048ae480 61 setColorRGB(red2, green2, blue2);
aswild 0:5948048ae480 62 }