Out of specification timing but it works
Dependencies: WS2812 PixelArray
main.cpp@4:f2052e2e8cb2, 2020-03-20 (annotated)
- Committer:
- kenjiArai
- Date:
- Fri Mar 20 09:30:50 2020 +0000
- Revision:
- 4:f2052e2e8cb2
- Parent:
- 3:92170e533378
deleted unused buffer ram
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 3:92170e533378 | 1 | /* |
kenjiArai | 3:92170e533378 | 2 | Modified by Kenji Arai / JH1PJL |
kenjiArai | 3:92170e533378 | 3 | March 20th, 2020 |
kenjiArai | 3:92170e533378 | 4 | |
kenjiArai | 3:92170e533378 | 5 | Original & Refrence |
kenjiArai | 3:92170e533378 | 6 | https://os.mbed.com/users/chris/code/ChrisRGB-Ring/ |
kenjiArai | 3:92170e533378 | 7 | https://os.mbed.com/users/chris/code/WS2812/ |
kenjiArai | 3:92170e533378 | 8 | https://os.mbed.com/users/chris/code/PixelArray/ |
kenjiArai | 3:92170e533378 | 9 | |
kenjiArai | 3:92170e533378 | 10 | https://os.mbed.com/users/bridadan/code/WS2812_Example/ |
kenjiArai | 3:92170e533378 | 11 | https://os.mbed.com/users/bridadan/code/WS2812/ |
kenjiArai | 3:92170e533378 | 12 | https://os.mbed.com/users/chris/code/PixelArray/ |
kenjiArai | 3:92170e533378 | 13 | |
kenjiArai | 3:92170e533378 | 14 | */ |
kenjiArai | 3:92170e533378 | 15 | |
chris | 0:6b847e039b3b | 16 | #include "mbed.h" |
chris | 0:6b847e039b3b | 17 | #include "WS2812.h" |
chris | 0:6b847e039b3b | 18 | #include "PixelArray.h" |
chris | 0:6b847e039b3b | 19 | |
kenjiArai | 3:92170e533378 | 20 | #if (MBED_MAJOR_VERSION == 5) |
kenjiArai | 3:92170e533378 | 21 | #define WAIT_MS(x) ThisThread::sleep_for(x) |
kenjiArai | 3:92170e533378 | 22 | #else |
kenjiArai | 3:92170e533378 | 23 | #define WAIT_MS(x) wait_ms(x) |
kenjiArai | 3:92170e533378 | 24 | #endif |
kenjiArai | 3:92170e533378 | 25 | |
kenjiArai | 3:92170e533378 | 26 | // NeoPixel Board |
kenjiArai | 3:92170e533378 | 27 | #define WS2812_BUF 64 |
kenjiArai | 3:92170e533378 | 28 | #define NUM_LEDS_PER_COLOR 8 |
kenjiArai | 3:92170e533378 | 29 | // Preparation color number |
kenjiArai | 3:92170e533378 | 30 | #define NUM_COLORS 8 |
kenjiArai | 3:92170e533378 | 31 | // Intensity base |
kenjiArai | 3:92170e533378 | 32 | #define BRIGHT 0xf // Max = 0xf |
chris | 0:6b847e039b3b | 33 | |
kenjiArai | 3:92170e533378 | 34 | // Only OS2 ->F334RG, L053, L073&L476(can compile on os5 but not work) |
kenjiArai | 3:92170e533378 | 35 | #if \ |
kenjiArai | 3:92170e533378 | 36 | defined(TARGET_NUCLEO_F334R8)\ |
kenjiArai | 3:92170e533378 | 37 | || defined(TARGET_NUCLEO_F401RE)\ |
kenjiArai | 3:92170e533378 | 38 | || defined(TARGET_NUCLEO_F411RE)\ |
kenjiArai | 3:92170e533378 | 39 | || defined(TARGET_NUCLEO_F446RE)\ |
kenjiArai | 3:92170e533378 | 40 | || defined(TARGET_NUCLEO_L053R8)\ |
kenjiArai | 3:92170e533378 | 41 | || defined(TARGET_NUCLEO_L073RZ)\ |
kenjiArai | 3:92170e533378 | 42 | || defined(TARGET_NUCLEO_L152RE)\ |
kenjiArai | 3:92170e533378 | 43 | || defined(TARGET_NUCLEO_L476RG) |
kenjiArai | 3:92170e533378 | 44 | WS2812 ws(D11, D12, D13, WS2812_BUF); |
kenjiArai | 3:92170e533378 | 45 | //WS2812 ws(D11, NC, NC, WS2812_BUF); // STM does NOT support NC definition! |
kenjiArai | 3:92170e533378 | 46 | #elif \ |
kenjiArai | 3:92170e533378 | 47 | defined(TARGET_RZ_A1H)\ |
kenjiArai | 3:92170e533378 | 48 | || defined(TARGET_GR_LYCHEE)\ |
kenjiArai | 3:92170e533378 | 49 | //WS2812 ws(D11, D12, D13, WS2812_BUF); |
kenjiArai | 3:92170e533378 | 50 | WS2812 ws(D11, NC, NC, WS2812_BUF); |
kenjiArai | 3:92170e533378 | 51 | #elif defined(TARGET_GR_MANGO) |
kenjiArai | 3:92170e533378 | 52 | //WS2812 ws(P8_6, P8_5, P8_7, WS2812_BUF); |
kenjiArai | 3:92170e533378 | 53 | WS2812 ws(P8_6, NC, NC, WS2812_BUF); |
kenjiArai | 3:92170e533378 | 54 | #else |
kenjiArai | 3:92170e533378 | 55 | # error Not supprt the Board! |
kenjiArai | 3:92170e533378 | 56 | #endif |
chris | 0:6b847e039b3b | 57 | PixelArray px(WS2812_BUF); |
chris | 1:bf4d674d3692 | 58 | |
chris | 0:6b847e039b3b | 59 | int main() |
chris | 0:6b847e039b3b | 60 | { |
kenjiArai | 3:92170e533378 | 61 | ws.set_brightness_mode(WS2812::PER_PIXEL); // use per-pixel brightness mode |
chris | 0:6b847e039b3b | 62 | // set up the colours we want to draw with |
kenjiArai | 3:92170e533378 | 63 | int colorbuf[NUM_COLORS] = { |
kenjiArai | 3:92170e533378 | 64 | 0x2f0000,0x2f2f00,0x002f00,0x002f2f, |
kenjiArai | 3:92170e533378 | 65 | 0x00002f,0x2f002f, 0x2f2f2f, 0 |
kenjiArai | 3:92170e533378 | 66 | }; |
chris | 1:bf4d674d3692 | 67 | // for each of the colours (j) write out 10 of them |
chris | 2:57db905622ca | 68 | // the pixels are written at the colour*10, plus the colour position |
chris | 1:bf4d674d3692 | 69 | // all modulus 60 so it wraps around |
kenjiArai | 3:92170e533378 | 70 | for (int i = 0; i < WS2812_BUF; i++) { |
kenjiArai | 3:92170e533378 | 71 | px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]); |
kenjiArai | 3:92170e533378 | 72 | } |
kenjiArai | 3:92170e533378 | 73 | // now all the colors are computed, add a fade effect using brightness data |
kenjiArai | 3:92170e533378 | 74 | // compute and write the value for each pixel |
kenjiArai | 3:92170e533378 | 75 | for (int j=0; j<WS2812_BUF; j++) { |
kenjiArai | 3:92170e533378 | 76 | px.SetI(j%WS2812_BUF, 0xf+(BRIGHT*(j%NUM_LEDS_PER_COLOR))); |
kenjiArai | 3:92170e533378 | 77 | } |
kenjiArai | 3:92170e533378 | 78 | // Now the buffer is written, rotate it |
kenjiArai | 3:92170e533378 | 79 | // by writing it out with an increasing offset |
kenjiArai | 3:92170e533378 | 80 | while (true) { |
kenjiArai | 3:92170e533378 | 81 | for (int z=WS2812_BUF; z >= 0 ; z--) { |
kenjiArai | 3:92170e533378 | 82 | ws.write_offsets(px.getBuf(),z,z,z); |
kenjiArai | 3:92170e533378 | 83 | WAIT_MS(100); |
kenjiArai | 3:92170e533378 | 84 | } |
kenjiArai | 3:92170e533378 | 85 | WAIT_MS(1000); |
kenjiArai | 3:92170e533378 | 86 | ws.set_brightness(0x20); |
kenjiArai | 3:92170e533378 | 87 | for (int i = 0; i < NUM_COLORS; i++) { |
kenjiArai | 3:92170e533378 | 88 | ws.setAll(colorbuf[i]); |
kenjiArai | 3:92170e533378 | 89 | WAIT_MS(1000); |
chris | 0:6b847e039b3b | 90 | } |
chris | 0:6b847e039b3b | 91 | } |
chris | 0:6b847e039b3b | 92 | } |