Out of specification timing but it works

Dependencies:   WS2812 PixelArray

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?

UserRevisionLine numberNew 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 }