Johannes Stratmann
/
RGB-balls
Simple App for driving WS2812B RGB LED's. Slow color fading for my garden decoration.
main.cpp@1:a893d385c324, 2016-10-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |