mbed Christmas tree using NeoPixel

Dependencies:   mbed

Fork of JBB_SerialLED_test by Junichi Katsu

Committer:
MACRUM
Date:
Fri Dec 04 14:08:03 2015 +0000
Revision:
1:789215018659
Parent:
0:57df396a2de8
Child:
2:435f94e9bb06
Use 10 LEDs externally, add more blink patterns.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:57df396a2de8 1 /**
MACRUM 1:789215018659 2 * X'mas tree LED blinky using NeoPixel
jksoft 0:57df396a2de8 3 *
MACRUM 1:789215018659 4 * Copyright (C) 2015 Toyomasa Watarai (MACRUM)
jksoft 0:57df396a2de8 5 */
MACRUM 1:789215018659 6
jksoft 0:57df396a2de8 7 #include "mbed.h"
jksoft 0:57df396a2de8 8 #include "LEDStrip.h"
jksoft 0:57df396a2de8 9
MACRUM 1:789215018659 10 #define START_ID 2
MACRUM 1:789215018659 11 #define NUM_LEDS 10
MACRUM 1:789215018659 12 #define MAX_LEVEL 100
jksoft 0:57df396a2de8 13
MACRUM 1:789215018659 14 Ticker blinker0, blinker1, blinker2, blinker3, blinker4, blinker5, blinker6, blinker7, blinker8, blinker9;
MACRUM 1:789215018659 15 int led0_val, led1_val, led2_val, led3_val, led4_val, led5_val, led6_val, led7_val, led8_val, led9_val;
MACRUM 1:789215018659 16
MACRUM 1:789215018659 17 void blink_1()
MACRUM 1:789215018659 18 {
MACRUM 1:789215018659 19 for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
MACRUM 1:789215018659 20 for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
MACRUM 1:789215018659 21 tapeSet(j, i, i, i); // LED No , Red , Green , Blue
MACRUM 1:789215018659 22 }
MACRUM 1:789215018659 23 tapeSend();
MACRUM 1:789215018659 24 wait_ms(15);
MACRUM 1:789215018659 25 }
MACRUM 1:789215018659 26 for( int i=MAX_LEVEL ; i >= 0 ; i-- ) {
MACRUM 1:789215018659 27 for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
MACRUM 1:789215018659 28 tapeSet(j, i, i, i); // LED No , Red , Green , Blue
MACRUM 1:789215018659 29 }
MACRUM 1:789215018659 30 tapeSend();
MACRUM 1:789215018659 31 wait_ms(15);
MACRUM 1:789215018659 32 }
MACRUM 1:789215018659 33 }
MACRUM 1:789215018659 34
MACRUM 1:789215018659 35 void blink_2()
MACRUM 1:789215018659 36 {
MACRUM 1:789215018659 37 for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
MACRUM 1:789215018659 38 for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
MACRUM 1:789215018659 39 tapeSet(j, i, 0, 0); // LED No , Red , Green , Blue
MACRUM 1:789215018659 40 }
MACRUM 1:789215018659 41 tapeSend();
MACRUM 1:789215018659 42 wait_ms(15);
MACRUM 1:789215018659 43 }
MACRUM 1:789215018659 44 for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
MACRUM 1:789215018659 45 for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
MACRUM 1:789215018659 46 tapeSet(j, MAX_LEVEL, i, 0); // LED No , Red , Green , Blue
MACRUM 1:789215018659 47 }
MACRUM 1:789215018659 48 tapeSend();
MACRUM 1:789215018659 49 wait_ms(15);
MACRUM 1:789215018659 50 }
MACRUM 1:789215018659 51 for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
MACRUM 1:789215018659 52 for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
MACRUM 1:789215018659 53 tapeSet(j, MAX_LEVEL, MAX_LEVEL, i); // LED No , Red , Green , Blue
MACRUM 1:789215018659 54 }
MACRUM 1:789215018659 55 tapeSend();
MACRUM 1:789215018659 56 wait_ms(15);
MACRUM 1:789215018659 57 }
MACRUM 1:789215018659 58 for( int i=MAX_LEVEL ; i >= 0 ; i-- ) {
MACRUM 1:789215018659 59 for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
MACRUM 1:789215018659 60 tapeSet(j, i, i, i); // LED No , Red , Green , Blue
MACRUM 1:789215018659 61 }
MACRUM 1:789215018659 62 tapeSend();
MACRUM 1:789215018659 63 wait_ms(15);
MACRUM 1:789215018659 64 }
MACRUM 1:789215018659 65 }
MACRUM 1:789215018659 66
MACRUM 1:789215018659 67 void blink_3()
MACRUM 1:789215018659 68 {
MACRUM 1:789215018659 69 for( int i = START_ID ; i <= (START_ID + NUM_LEDS); i++) {
MACRUM 1:789215018659 70 for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
MACRUM 1:789215018659 71 if ( i == j) {
MACRUM 1:789215018659 72 tapeSet(j, MAX_LEVEL, 0, 0); // LED No , Red , Green , Blue
MACRUM 1:789215018659 73 } else {
MACRUM 1:789215018659 74 tapeSet(j, 0, 0, 0); // LED No , Red , Green , Blue
MACRUM 1:789215018659 75 }
MACRUM 1:789215018659 76
MACRUM 1:789215018659 77 }
MACRUM 1:789215018659 78 tapeSend();
MACRUM 1:789215018659 79 wait_ms(100);
MACRUM 1:789215018659 80 }
MACRUM 1:789215018659 81 }
MACRUM 1:789215018659 82
MACRUM 1:789215018659 83 #define WAIT_TIME0 0.19
MACRUM 1:789215018659 84 #define WAIT_TIME1 0.25
MACRUM 1:789215018659 85 #define WAIT_TIME2 0.3
MACRUM 1:789215018659 86 #define WAIT_TIME3 0.2
MACRUM 1:789215018659 87 #define WAIT_TIME4 0.22
MACRUM 1:789215018659 88 #define WAIT_TIME5 0.3
MACRUM 1:789215018659 89 #define WAIT_TIME6 0.17
MACRUM 1:789215018659 90 #define WAIT_TIME7 0.24
MACRUM 1:789215018659 91 #define WAIT_TIME8 0.18
MACRUM 1:789215018659 92 #define WAIT_TIME9 0.28
MACRUM 1:789215018659 93
MACRUM 1:789215018659 94 #define INTERVAL0 9
MACRUM 1:789215018659 95 #define INTERVAL1 14
MACRUM 1:789215018659 96 #define INTERVAL2 20
MACRUM 1:789215018659 97 #define INTERVAL3 17
MACRUM 1:789215018659 98 #define INTERVAL4 30
MACRUM 1:789215018659 99 #define INTERVAL5 20
MACRUM 1:789215018659 100 #define INTERVAL6 25
MACRUM 1:789215018659 101 #define INTERVAL7 17
MACRUM 1:789215018659 102 #define INTERVAL8 22
MACRUM 1:789215018659 103 #define INTERVAL9 19
MACRUM 1:789215018659 104
MACRUM 1:789215018659 105 extern int wakeup;
MACRUM 1:789215018659 106
MACRUM 1:789215018659 107 void led0_event()
MACRUM 1:789215018659 108 {
MACRUM 1:789215018659 109 tapeSet(START_ID + 0, led0_val, led0_val, led0_val);
MACRUM 1:789215018659 110 wakeup = 1;
MACRUM 1:789215018659 111
MACRUM 1:789215018659 112 if (led0_val <= 0)
MACRUM 1:789215018659 113 led0_val = MAX_LEVEL;
MACRUM 1:789215018659 114 else
MACRUM 1:789215018659 115 led0_val -= INTERVAL0;
MACRUM 1:789215018659 116
MACRUM 1:789215018659 117 if (led0_val < 0)
MACRUM 1:789215018659 118 led0_val = 0;
MACRUM 1:789215018659 119 }
MACRUM 1:789215018659 120
MACRUM 1:789215018659 121 void led1_event()
MACRUM 1:789215018659 122 {
MACRUM 1:789215018659 123 tapeSet(START_ID + 1, led1_val, led1_val, led1_val);
MACRUM 1:789215018659 124 wakeup = 1;
MACRUM 1:789215018659 125
MACRUM 1:789215018659 126 if (led1_val <= 0)
MACRUM 1:789215018659 127 led1_val = MAX_LEVEL;
MACRUM 1:789215018659 128 else
MACRUM 1:789215018659 129 led1_val -= INTERVAL1;
MACRUM 1:789215018659 130
MACRUM 1:789215018659 131 if (led1_val < 0)
MACRUM 1:789215018659 132 led1_val = 0;
MACRUM 1:789215018659 133 }
MACRUM 1:789215018659 134
MACRUM 1:789215018659 135 void led2_event()
MACRUM 1:789215018659 136 {
MACRUM 1:789215018659 137 tapeSet(START_ID + 2, led2_val, led2_val, led2_val);
MACRUM 1:789215018659 138 wakeup = 1;
MACRUM 1:789215018659 139
MACRUM 1:789215018659 140 if (led2_val <= 0)
MACRUM 1:789215018659 141 led2_val = MAX_LEVEL;
MACRUM 1:789215018659 142 else
MACRUM 1:789215018659 143 led2_val -= INTERVAL2;
MACRUM 1:789215018659 144
MACRUM 1:789215018659 145 if (led2_val < 0)
MACRUM 1:789215018659 146 led2_val = 0;
MACRUM 1:789215018659 147 }
MACRUM 1:789215018659 148
MACRUM 1:789215018659 149 void led3_event()
MACRUM 1:789215018659 150 {
MACRUM 1:789215018659 151 tapeSet(START_ID + 3, led3_val, led3_val, led3_val);
MACRUM 1:789215018659 152 wakeup = 1;
MACRUM 1:789215018659 153
MACRUM 1:789215018659 154 if (led3_val <= 0)
MACRUM 1:789215018659 155 led3_val = MAX_LEVEL;
MACRUM 1:789215018659 156 else
MACRUM 1:789215018659 157 led3_val -= INTERVAL3;
MACRUM 1:789215018659 158
MACRUM 1:789215018659 159 if (led3_val < 0)
MACRUM 1:789215018659 160 led3_val = 0;
MACRUM 1:789215018659 161 }
MACRUM 1:789215018659 162
MACRUM 1:789215018659 163 void led4_event()
MACRUM 1:789215018659 164 {
MACRUM 1:789215018659 165 tapeSet(START_ID + 4, led4_val, led4_val, led4_val);
MACRUM 1:789215018659 166 wakeup = 1;
MACRUM 1:789215018659 167
MACRUM 1:789215018659 168 if (led4_val <= 0)
MACRUM 1:789215018659 169 led4_val = MAX_LEVEL;
MACRUM 1:789215018659 170 else
MACRUM 1:789215018659 171 led4_val -= INTERVAL4;
MACRUM 1:789215018659 172
MACRUM 1:789215018659 173 if (led4_val < 0)
MACRUM 1:789215018659 174 led4_val = 0;
MACRUM 1:789215018659 175 }
MACRUM 1:789215018659 176
MACRUM 1:789215018659 177 void led5_event()
MACRUM 1:789215018659 178 {
MACRUM 1:789215018659 179 tapeSet(START_ID + 5, led5_val, led5_val, led5_val);
MACRUM 1:789215018659 180 wakeup = 1;
MACRUM 1:789215018659 181
MACRUM 1:789215018659 182 if (led5_val <= 0)
MACRUM 1:789215018659 183 led5_val = MAX_LEVEL;
MACRUM 1:789215018659 184 else
MACRUM 1:789215018659 185 led5_val -= INTERVAL5;
MACRUM 1:789215018659 186
MACRUM 1:789215018659 187 if (led5_val < 0)
MACRUM 1:789215018659 188 led5_val = 0;
MACRUM 1:789215018659 189 }
MACRUM 1:789215018659 190
MACRUM 1:789215018659 191 void led6_event()
MACRUM 1:789215018659 192 {
MACRUM 1:789215018659 193 tapeSet(START_ID + 6, led6_val, led6_val, led6_val);
MACRUM 1:789215018659 194 wakeup = 1;
MACRUM 1:789215018659 195
MACRUM 1:789215018659 196 if (led6_val <= 0)
MACRUM 1:789215018659 197 led6_val = MAX_LEVEL;
MACRUM 1:789215018659 198 else
MACRUM 1:789215018659 199 led6_val -= INTERVAL6;
MACRUM 1:789215018659 200
MACRUM 1:789215018659 201 if (led6_val < 0)
MACRUM 1:789215018659 202 led6_val = 0;
MACRUM 1:789215018659 203 }
MACRUM 1:789215018659 204
MACRUM 1:789215018659 205 void led7_event()
MACRUM 1:789215018659 206 {
MACRUM 1:789215018659 207 tapeSet(START_ID + 7, led7_val, led7_val, led7_val);
MACRUM 1:789215018659 208 wakeup = 1;
MACRUM 1:789215018659 209
MACRUM 1:789215018659 210 if (led7_val <= 0)
MACRUM 1:789215018659 211 led7_val = MAX_LEVEL;
MACRUM 1:789215018659 212 else
MACRUM 1:789215018659 213 led7_val -= INTERVAL7;
MACRUM 1:789215018659 214
MACRUM 1:789215018659 215 if (led7_val < 0)
MACRUM 1:789215018659 216 led7_val = 0;
MACRUM 1:789215018659 217 }
MACRUM 1:789215018659 218
MACRUM 1:789215018659 219 void led8_event()
MACRUM 1:789215018659 220 {
MACRUM 1:789215018659 221 tapeSet(START_ID + 8, led8_val, led8_val, led8_val);
MACRUM 1:789215018659 222 wakeup = 1;
MACRUM 1:789215018659 223
MACRUM 1:789215018659 224 if (led8_val <= 0)
MACRUM 1:789215018659 225 led8_val = MAX_LEVEL;
MACRUM 1:789215018659 226 else
MACRUM 1:789215018659 227 led8_val -= INTERVAL8;
MACRUM 1:789215018659 228
MACRUM 1:789215018659 229 if (led8_val < 0)
MACRUM 1:789215018659 230 led8_val = 0;
MACRUM 1:789215018659 231 }
MACRUM 1:789215018659 232
MACRUM 1:789215018659 233 void led9_event()
MACRUM 1:789215018659 234 {
MACRUM 1:789215018659 235 tapeSet(START_ID + 9, led9_val, led9_val, led9_val);
MACRUM 1:789215018659 236 wakeup = 1;
MACRUM 1:789215018659 237
MACRUM 1:789215018659 238 if (led9_val <= 0)
MACRUM 1:789215018659 239 led9_val = MAX_LEVEL;
MACRUM 1:789215018659 240 else
MACRUM 1:789215018659 241 led9_val -= INTERVAL9;
MACRUM 1:789215018659 242
MACRUM 1:789215018659 243 if (led9_val < 0)
MACRUM 1:789215018659 244 led9_val = 0;
MACRUM 1:789215018659 245 }
MACRUM 1:789215018659 246
MACRUM 1:789215018659 247 void blink_4()
MACRUM 1:789215018659 248 {
MACRUM 1:789215018659 249 led0_val = MAX_LEVEL;
MACRUM 1:789215018659 250 led1_val = MAX_LEVEL;
MACRUM 1:789215018659 251 led2_val = MAX_LEVEL;
MACRUM 1:789215018659 252 led3_val = MAX_LEVEL;
MACRUM 1:789215018659 253 led4_val = MAX_LEVEL;
MACRUM 1:789215018659 254 led5_val = MAX_LEVEL;
MACRUM 1:789215018659 255 led6_val = MAX_LEVEL;
MACRUM 1:789215018659 256 led7_val = MAX_LEVEL;
MACRUM 1:789215018659 257 led8_val = MAX_LEVEL;
MACRUM 1:789215018659 258 led9_val = MAX_LEVEL;
MACRUM 1:789215018659 259
MACRUM 1:789215018659 260 blinker0.attach(&led0_event, WAIT_TIME0);
MACRUM 1:789215018659 261 blinker1.attach(&led1_event, WAIT_TIME1);
MACRUM 1:789215018659 262 blinker2.attach(&led2_event, WAIT_TIME2);
MACRUM 1:789215018659 263 blinker3.attach(&led3_event, WAIT_TIME3);
MACRUM 1:789215018659 264 blinker4.attach(&led4_event, WAIT_TIME4);
MACRUM 1:789215018659 265 blinker5.attach(&led5_event, WAIT_TIME5);
MACRUM 1:789215018659 266 blinker6.attach(&led6_event, WAIT_TIME6);
MACRUM 1:789215018659 267 blinker7.attach(&led7_event, WAIT_TIME7);
MACRUM 1:789215018659 268 blinker8.attach(&led8_event, WAIT_TIME8);
MACRUM 1:789215018659 269 blinker9.attach(&led9_event, WAIT_TIME9);
MACRUM 1:789215018659 270
MACRUM 1:789215018659 271 wait(8);
MACRUM 1:789215018659 272
MACRUM 1:789215018659 273 blinker0.detach();
MACRUM 1:789215018659 274 blinker1.detach();
MACRUM 1:789215018659 275 blinker2.detach();
MACRUM 1:789215018659 276 blinker3.detach();
MACRUM 1:789215018659 277 blinker4.detach();
MACRUM 1:789215018659 278 blinker5.detach();
MACRUM 1:789215018659 279 blinker6.detach();
MACRUM 1:789215018659 280 blinker7.detach();
MACRUM 1:789215018659 281 blinker8.detach();
MACRUM 1:789215018659 282 blinker9.detach();
MACRUM 1:789215018659 283 }
MACRUM 1:789215018659 284
MACRUM 1:789215018659 285 int main()
MACRUM 1:789215018659 286 {
MACRUM 1:789215018659 287 const int loops = 3;
MACRUM 1:789215018659 288 tapeInit(0, START_ID + NUM_LEDS); // freq( 0:default ) , SerialLED num
MACRUM 1:789215018659 289
MACRUM 1:789215018659 290 int i = 0;
MACRUM 1:789215018659 291 while(1) {
MACRUM 1:789215018659 292 if ((i/loops) == 0) {
MACRUM 1:789215018659 293 blink_4();
MACRUM 1:789215018659 294 }
MACRUM 1:789215018659 295 if ((i/loops) == 1) {
MACRUM 1:789215018659 296 blink_2();
MACRUM 1:789215018659 297 }
MACRUM 1:789215018659 298 if ((i/loops) == 2) {
MACRUM 1:789215018659 299 blink_3();
MACRUM 1:789215018659 300 }
MACRUM 1:789215018659 301 if ((i/loops) == 3) {
MACRUM 1:789215018659 302 blink_1();
MACRUM 1:789215018659 303 }
MACRUM 1:789215018659 304
MACRUM 1:789215018659 305 i++;
MACRUM 1:789215018659 306 if (i >= (loops * 4)) {
MACRUM 1:789215018659 307 i = 0;
MACRUM 1:789215018659 308 }
MACRUM 1:789215018659 309 }
MACRUM 1:789215018659 310 }