Simple App for driving WS2812B RGB LED's. Slow color fading for my garden decoration.

Dependencies:   mbed wsDrive

Committer:
JojoS
Date:
Sun Oct 09 16:56:25 2016 +0000
Revision:
1:a893d385c324
Parent:
0:ccb5eb39a47d
Simple App for driving WS2812B RGB LED's. Slow color fading for my garden decoration.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JojoS 0:ccb5eb39a47d 1 #include "mbed.h"
JojoS 0:ccb5eb39a47d 2 #include "wsDrive.h"
JojoS 0:ccb5eb39a47d 3
JojoS 0:ccb5eb39a47d 4 // time period between each movement
JojoS 0:ccb5eb39a47d 5 #define updatePeriodMS 200
JojoS 0:ccb5eb39a47d 6
JojoS 0:ccb5eb39a47d 7 // number of LEDs in chain
JojoS 0:ccb5eb39a47d 8 #define chainLen 3
JojoS 0:ccb5eb39a47d 9
JojoS 0:ccb5eb39a47d 10 // set the pulldown and then create the driver
JojoS 0:ccb5eb39a47d 11 //DigitalIn dummy(P0_15, PullDown);
JojoS 0:ccb5eb39a47d 12 //wsDrive ledDriver(P0_15, P0_7, P0_14); // LPC812
JojoS 0:ccb5eb39a47d 13 //wsDrive ledDriver(P1_22, P0_22, P1_15); // LPC1347
JojoS 0:ccb5eb39a47d 14 wsDrive ledDriver(P0_28, P0_12, P0_16); // LPC1549
JojoS 0:ccb5eb39a47d 15 //wsDrive ledDriver(PB_5, PB_4, PB_3); // STM32F03 - fails, wrong SPI clock
JojoS 0:ccb5eb39a47d 16
JojoS 0:ccb5eb39a47d 17 // mbuino stnadard definitions
JojoS 0:ccb5eb39a47d 18 //DigitalIn progMode(P0_3,PullDown); // fix the power wasted if we ever sleep.
JojoS 0:ccb5eb39a47d 19 //BusOut LEDs(LED1, LED2, LED3, LED4, LED5, LED6, LED7); // control the LEDs
JojoS 0:ccb5eb39a47d 20
JojoS 0:ccb5eb39a47d 21 //Timer updateRateTimer;
JojoS 0:ccb5eb39a47d 22
JojoS 0:ccb5eb39a47d 23 // pixel storage buffer
JojoS 0:ccb5eb39a47d 24 pixelInfo16 pixelData[chainLen];
JojoS 0:ccb5eb39a47d 25
JojoS 0:ccb5eb39a47d 26
JojoS 0:ccb5eb39a47d 27 void blankBuffer(pixelInfo *Ptr)
JojoS 0:ccb5eb39a47d 28 {
JojoS 0:ccb5eb39a47d 29 memset( (void *)Ptr, 0, chainLen*sizeof(pixelInfo) );
JojoS 0:ccb5eb39a47d 30 }
JojoS 0:ccb5eb39a47d 31
JojoS 0:ccb5eb39a47d 32 void setPixel(unsigned int index, pixelInfo *colourToUse)
JojoS 0:ccb5eb39a47d 33 {
JojoS 0:ccb5eb39a47d 34 if (index < chainLen) {
JojoS 0:ccb5eb39a47d 35 pixelData[index].R = colourToUse->R;
JojoS 0:ccb5eb39a47d 36 pixelData[index].G = colourToUse->G;
JojoS 0:ccb5eb39a47d 37 pixelData[index].B = colourToUse->B;
JojoS 0:ccb5eb39a47d 38 }
JojoS 0:ccb5eb39a47d 39 }
JojoS 0:ccb5eb39a47d 40
JojoS 0:ccb5eb39a47d 41 void setPixel(unsigned int index, int r, int g, int b)
JojoS 0:ccb5eb39a47d 42 {
JojoS 0:ccb5eb39a47d 43 if (index < chainLen) {
JojoS 0:ccb5eb39a47d 44 pixelData[index].R = r;
JojoS 0:ccb5eb39a47d 45 pixelData[index].G = g;
JojoS 0:ccb5eb39a47d 46 pixelData[index].B = b;
JojoS 0:ccb5eb39a47d 47 }
JojoS 0:ccb5eb39a47d 48 }
JojoS 0:ccb5eb39a47d 49
JojoS 0:ccb5eb39a47d 50 void clearPixel(unsigned int index)
JojoS 0:ccb5eb39a47d 51 {
JojoS 0:ccb5eb39a47d 52 if (index < chainLen) {
JojoS 0:ccb5eb39a47d 53 pixelData[index].R = 0;
JojoS 0:ccb5eb39a47d 54 pixelData[index].G = 0;
JojoS 0:ccb5eb39a47d 55 pixelData[index].B = 0;
JojoS 0:ccb5eb39a47d 56 }
JojoS 0:ccb5eb39a47d 57 }
JojoS 0:ccb5eb39a47d 58
JojoS 0:ccb5eb39a47d 59 int main ()
JojoS 0:ccb5eb39a47d 60 {
JojoS 0:ccb5eb39a47d 61 int intensityR = 0;
JojoS 0:ccb5eb39a47d 62 int intensityG = 85;
JojoS 0:ccb5eb39a47d 63 int intensityB = 170;
JojoS 0:ccb5eb39a47d 64 int dirR = 1;
JojoS 0:ccb5eb39a47d 65 int dirG = 1;
JojoS 0:ccb5eb39a47d 66 int dirB = 1;
JojoS 0:ccb5eb39a47d 67
JojoS 0:ccb5eb39a47d 68 // Tell the driver where the data is stored
JojoS 0:ccb5eb39a47d 69 ledDriver.setData(pixelData, chainLen);
JojoS 0:ccb5eb39a47d 70
JojoS 0:ccb5eb39a47d 71 //updateRateTimer.start();
JojoS 0:ccb5eb39a47d 72 while (true) {
JojoS 0:ccb5eb39a47d 73
JojoS 0:ccb5eb39a47d 74 if (((dirR > 0) && (intensityR >= 255)) ||
JojoS 0:ccb5eb39a47d 75 ((dirR < 0) && (intensityR <= 0)))
JojoS 0:ccb5eb39a47d 76 dirR *= -1;
JojoS 0:ccb5eb39a47d 77 else
JojoS 0:ccb5eb39a47d 78 intensityR += dirR;
JojoS 0:ccb5eb39a47d 79
JojoS 0:ccb5eb39a47d 80 if (((dirG > 0) && (intensityG >= 255)) ||
JojoS 0:ccb5eb39a47d 81 ((dirG < 0) && (intensityG <= 0)))
JojoS 0:ccb5eb39a47d 82 dirG *= -1;
JojoS 0:ccb5eb39a47d 83 else
JojoS 0:ccb5eb39a47d 84 intensityG += dirG;
JojoS 0:ccb5eb39a47d 85
JojoS 0:ccb5eb39a47d 86 if (((dirB > 0) && (intensityB >= 255)) ||
JojoS 0:ccb5eb39a47d 87 ((dirB < 0) && (intensityB <= 0)))
JojoS 0:ccb5eb39a47d 88 dirB *= -1;
JojoS 0:ccb5eb39a47d 89 else
JojoS 0:ccb5eb39a47d 90 intensityB += dirB;
JojoS 0:ccb5eb39a47d 91
JojoS 0:ccb5eb39a47d 92
JojoS 0:ccb5eb39a47d 93 // modify the buffer ready for the next update
JojoS 0:ccb5eb39a47d 94 setPixel(0, intensityR, intensityG, 0);
JojoS 0:ccb5eb39a47d 95 setPixel(1, intensityR, 0, intensityB);
JojoS 0:ccb5eb39a47d 96 setPixel(2, 0, intensityG, intensityB);
JojoS 0:ccb5eb39a47d 97
JojoS 0:ccb5eb39a47d 98 ledDriver.sendData(); // send the LED data
JojoS 0:ccb5eb39a47d 99
JojoS 0:ccb5eb39a47d 100 // wait until the correct time since the last update...
JojoS 0:ccb5eb39a47d 101 //while (updateRateTimer.read_ms() < updatePeriodMS) {
JojoS 0:ccb5eb39a47d 102 //
JojoS 0:ccb5eb39a47d 103 wait_ms(200);
JojoS 0:ccb5eb39a47d 104 //updateRateTimer.reset();
JojoS 0:ccb5eb39a47d 105 }
JojoS 0:ccb5eb39a47d 106 }