Out of specification timing but it works

Dependencies:   WS2812 PixelArray

Committer:
kenjiArai
Date:
Fri Mar 20 06:50:22 2020 +0000
Revision:
3:92170e533378
Parent:
2:57db905622ca
Child:
4:f2052e2e8cb2
!!Out of specification timing!! Reconsidered input pin and NC pin for SPI. Modified several functions interface and its contents.

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);
kenjiArai 3:92170e533378 58 int all_buf(WS2812_BUF);
chris 1:bf4d674d3692 59
chris 0:6b847e039b3b 60 int main()
chris 0:6b847e039b3b 61 {
kenjiArai 3:92170e533378 62 ws.set_brightness_mode(WS2812::PER_PIXEL); // use per-pixel brightness mode
chris 0:6b847e039b3b 63 // set up the colours we want to draw with
kenjiArai 3:92170e533378 64 int colorbuf[NUM_COLORS] = {
kenjiArai 3:92170e533378 65 0x2f0000,0x2f2f00,0x002f00,0x002f2f,
kenjiArai 3:92170e533378 66 0x00002f,0x2f002f, 0x2f2f2f, 0
kenjiArai 3:92170e533378 67 };
chris 1:bf4d674d3692 68 // for each of the colours (j) write out 10 of them
chris 2:57db905622ca 69 // the pixels are written at the colour*10, plus the colour position
chris 1:bf4d674d3692 70 // all modulus 60 so it wraps around
kenjiArai 3:92170e533378 71 for (int i = 0; i < WS2812_BUF; i++) {
kenjiArai 3:92170e533378 72 px.Set(i, colorbuf[(i / NUM_LEDS_PER_COLOR) % NUM_COLORS]);
kenjiArai 3:92170e533378 73 }
kenjiArai 3:92170e533378 74 // now all the colors are computed, add a fade effect using brightness data
kenjiArai 3:92170e533378 75 // compute and write the value for each pixel
kenjiArai 3:92170e533378 76 for (int j=0; j<WS2812_BUF; j++) {
kenjiArai 3:92170e533378 77 px.SetI(j%WS2812_BUF, 0xf+(BRIGHT*(j%NUM_LEDS_PER_COLOR)));
kenjiArai 3:92170e533378 78 }
kenjiArai 3:92170e533378 79 // Now the buffer is written, rotate it
kenjiArai 3:92170e533378 80 // by writing it out with an increasing offset
kenjiArai 3:92170e533378 81 while (true) {
kenjiArai 3:92170e533378 82 for (int z=WS2812_BUF; z >= 0 ; z--) {
kenjiArai 3:92170e533378 83 ws.write_offsets(px.getBuf(),z,z,z);
kenjiArai 3:92170e533378 84 WAIT_MS(100);
kenjiArai 3:92170e533378 85 }
kenjiArai 3:92170e533378 86 WAIT_MS(1000);
kenjiArai 3:92170e533378 87 ws.set_brightness(0x20);
kenjiArai 3:92170e533378 88 for (int i = 0; i < NUM_COLORS; i++) {
kenjiArai 3:92170e533378 89 ws.setAll(colorbuf[i]);
kenjiArai 3:92170e533378 90 WAIT_MS(1000);
chris 0:6b847e039b3b 91 }
chris 0:6b847e039b3b 92 }
chris 0:6b847e039b3b 93 }