Controls a single ShiftBrite LED
ShiftBrite.cpp@0:5948048ae480, 2014-01-28 (annotated)
- Committer:
- aswild
- Date:
- Tue Jan 28 16:49:57 2014 +0000
- Revision:
- 0:5948048ae480
- Child:
- 1:11ebaa7aaae9
testing 123
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aswild | 0:5948048ae480 | 1 | #include "ShiftBrite.h" |
aswild | 0:5948048ae480 | 2 | |
aswild | 0:5948048ae480 | 3 | //DigitalOut latch(p19); |
aswild | 0:5948048ae480 | 4 | //SPI spi(p11, p12, p13); |
aswild | 0:5948048ae480 | 5 | |
aswild | 0:5948048ae480 | 6 | ShiftBrite::ShiftBrite(PinName spi1, PinName spi2, PinName spi3, PinName latch_) : spi(spi1, spi2, spi3), latch(latch_) |
aswild | 0:5948048ae480 | 7 | { |
aswild | 0:5948048ae480 | 8 | spi.format(16, 0); |
aswild | 0:5948048ae480 | 9 | spi.frequency(500000); |
aswild | 0:5948048ae480 | 10 | latch = 0; |
aswild | 0:5948048ae480 | 11 | } |
aswild | 0:5948048ae480 | 12 | |
aswild | 0:5948048ae480 | 13 | void ShiftBrite::writeCommand(int command) |
aswild | 0:5948048ae480 | 14 | { |
aswild | 0:5948048ae480 | 15 | spi.write(command >> 16); |
aswild | 0:5948048ae480 | 16 | spi.write(command & 0x0000ffff); |
aswild | 0:5948048ae480 | 17 | latch = 1; |
aswild | 0:5948048ae480 | 18 | wait(0.00001); |
aswild | 0:5948048ae480 | 19 | latch = 0; |
aswild | 0:5948048ae480 | 20 | } |
aswild | 0:5948048ae480 | 21 | |
aswild | 0:5948048ae480 | 22 | void ShiftBrite::writeInit(int red_level, int green_level, int blue_level) |
aswild | 0:5948048ae480 | 23 | { |
aswild | 0:5948048ae480 | 24 | unsigned int Init_Command = 0x40000000; |
aswild | 0:5948048ae480 | 25 | Init_Command = 0x40000000|(blue_level<<20)|(red_level<<10)|green_level; |
aswild | 0:5948048ae480 | 26 | spi.write(Init_Command >> 16 & 0xFFFF); |
aswild | 0:5948048ae480 | 27 | spi.write(Init_Command & 0xFFFF); |
aswild | 0:5948048ae480 | 28 | wait(.000015); |
aswild | 0:5948048ae480 | 29 | latch=1; |
aswild | 0:5948048ae480 | 30 | wait(.000015); |
aswild | 0:5948048ae480 | 31 | latch=0; |
aswild | 0:5948048ae480 | 32 | } |
aswild | 0:5948048ae480 | 33 | |
aswild | 0:5948048ae480 | 34 | void ShiftBrite::setColorRGB(int red, int green, int blue) |
aswild | 0:5948048ae480 | 35 | { |
aswild | 0:5948048ae480 | 36 | int command = (blue << 20) | (red << 10) | green; |
aswild | 0:5948048ae480 | 37 | writeCommand(command); |
aswild | 0:5948048ae480 | 38 | } |
aswild | 0:5948048ae480 | 39 | |
aswild | 0:5948048ae480 | 40 | void ShiftBrite::setColor(int color) |
aswild | 0:5948048ae480 | 41 | { |
aswild | 0:5948048ae480 | 42 | setColorRGB(RED(color), GREEN(color), BLUE(color)); |
aswild | 0:5948048ae480 | 43 | } |
aswild | 0:5948048ae480 | 44 | |
aswild | 0:5948048ae480 | 45 | void ShiftBrite::fadeColor(int color1, int color2, float time) |
aswild | 0:5948048ae480 | 46 | { |
aswild | 0:5948048ae480 | 47 | int red1 = RED(color1); |
aswild | 0:5948048ae480 | 48 | int green1 = GREEN(color1); |
aswild | 0:5948048ae480 | 49 | int blue1 = BLUE(color1); |
aswild | 0:5948048ae480 | 50 | int red2 = RED(color2); |
aswild | 0:5948048ae480 | 51 | int green2 = GREEN(color2); |
aswild | 0:5948048ae480 | 52 | int blue2 = BLUE(color2); |
aswild | 0:5948048ae480 | 53 | |
aswild | 0:5948048ae480 | 54 | float rstep = (red2 - red1) / 256.0; |
aswild | 0:5948048ae480 | 55 | float gstep = (green2 - green1) / 256.0; |
aswild | 0:5948048ae480 | 56 | float bstep = (blue2 - blue1) / 256.0; |
aswild | 0:5948048ae480 | 57 | float steptime = time / 256.0; |
aswild | 0:5948048ae480 | 58 | |
aswild | 0:5948048ae480 | 59 | for (int i = 0; i < 256; i++) |
aswild | 0:5948048ae480 | 60 | { |
aswild | 0:5948048ae480 | 61 | setColorRGB(red1 + (int)(rstep * i), green1 + (int)(gstep * i), blue1 + (int)(bstep * i)); |
aswild | 0:5948048ae480 | 62 | wait(steptime); |
aswild | 0:5948048ae480 | 63 | } |
aswild | 0:5948048ae480 | 64 | setColorRGB(red2, green2, blue2); |
aswild | 0:5948048ae480 | 65 | } |