mbed Christmas tree using NeoPixel

Dependencies:   mbed

Fork of JBB_SerialLED_test by Junichi Katsu

Committer:
MACRUM
Date:
Sat Dec 05 15:04:36 2015 +0000
Revision:
4:4a02e637a43f
Parent:
3:98b6f181c935
Using array for LED value

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 4:4a02e637a43f 15 int led_val[NUM_LEDS];
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 2:435f94e9bb06 107 #define led_event(i) \
MACRUM 4:4a02e637a43f 108 tapeSet(START_ID + 0, led_val[i], led_val[i], led_val[i]); \
MACRUM 2:435f94e9bb06 109 wakeup = 1; \
MACRUM 4:4a02e637a43f 110 if (led_val[i] <= 0) \
MACRUM 4:4a02e637a43f 111 led_val[i] = MAX_LEVEL; \
MACRUM 2:435f94e9bb06 112 else \
MACRUM 4:4a02e637a43f 113 led_val[i] -= INTERVAL##i; \
MACRUM 4:4a02e637a43f 114 if (led_val[i] < 0) \
MACRUM 4:4a02e637a43f 115 led_val[i] = 0;
MACRUM 1:789215018659 116
MACRUM 1:789215018659 117
MACRUM 2:435f94e9bb06 118 void led0_event() {
MACRUM 2:435f94e9bb06 119 led_event(0);
MACRUM 1:789215018659 120 }
MACRUM 1:789215018659 121
MACRUM 2:435f94e9bb06 122 void led1_event() {
MACRUM 2:435f94e9bb06 123 led_event(1);
MACRUM 1:789215018659 124 }
MACRUM 1:789215018659 125
MACRUM 2:435f94e9bb06 126 void led2_event() {
MACRUM 2:435f94e9bb06 127 led_event(2);
MACRUM 1:789215018659 128 }
MACRUM 1:789215018659 129
MACRUM 2:435f94e9bb06 130 void led3_event() {
MACRUM 2:435f94e9bb06 131 led_event(3);
MACRUM 1:789215018659 132 }
MACRUM 1:789215018659 133
MACRUM 2:435f94e9bb06 134 void led4_event() {
MACRUM 2:435f94e9bb06 135 led_event(4);
MACRUM 2:435f94e9bb06 136 }
MACRUM 1:789215018659 137
MACRUM 2:435f94e9bb06 138 void led5_event() {
MACRUM 2:435f94e9bb06 139 led_event(5);
MACRUM 1:789215018659 140 }
MACRUM 1:789215018659 141
MACRUM 2:435f94e9bb06 142 void led6_event() {
MACRUM 2:435f94e9bb06 143 led_event(6);
MACRUM 1:789215018659 144 }
MACRUM 1:789215018659 145
MACRUM 2:435f94e9bb06 146 void led7_event() {
MACRUM 2:435f94e9bb06 147 led_event(7);
MACRUM 1:789215018659 148 }
MACRUM 1:789215018659 149
MACRUM 2:435f94e9bb06 150 void led8_event() {
MACRUM 2:435f94e9bb06 151 led_event(8);
MACRUM 1:789215018659 152 }
MACRUM 1:789215018659 153
MACRUM 2:435f94e9bb06 154 void led9_event() {
MACRUM 2:435f94e9bb06 155 led_event(9);
MACRUM 1:789215018659 156 }
MACRUM 1:789215018659 157
MACRUM 3:98b6f181c935 158 #define start_led(i) \
MACRUM 4:4a02e637a43f 159 led_val[i] = MAX_LEVEL; \
MACRUM 3:98b6f181c935 160 blinker##i.attach(&led##i##_event, WAIT_TIME##i);
MACRUM 3:98b6f181c935 161
MACRUM 3:98b6f181c935 162 #define stop_led(i) blinker##i.detach();
MACRUM 3:98b6f181c935 163
MACRUM 1:789215018659 164 void blink_4()
MACRUM 1:789215018659 165 {
MACRUM 3:98b6f181c935 166 start_led(0);
MACRUM 3:98b6f181c935 167 start_led(1);
MACRUM 3:98b6f181c935 168 start_led(2);
MACRUM 3:98b6f181c935 169 start_led(3);
MACRUM 3:98b6f181c935 170 start_led(4);
MACRUM 3:98b6f181c935 171 start_led(5);
MACRUM 3:98b6f181c935 172 start_led(6);
MACRUM 3:98b6f181c935 173 start_led(7);
MACRUM 3:98b6f181c935 174 start_led(8);
MACRUM 3:98b6f181c935 175 start_led(9);
MACRUM 1:789215018659 176
MACRUM 1:789215018659 177 wait(8);
MACRUM 1:789215018659 178
MACRUM 3:98b6f181c935 179 stop_led(0);
MACRUM 3:98b6f181c935 180 stop_led(1);
MACRUM 3:98b6f181c935 181 stop_led(2);
MACRUM 3:98b6f181c935 182 stop_led(3);
MACRUM 3:98b6f181c935 183 stop_led(4);
MACRUM 3:98b6f181c935 184 stop_led(5);
MACRUM 3:98b6f181c935 185 stop_led(6);
MACRUM 3:98b6f181c935 186 stop_led(7);
MACRUM 3:98b6f181c935 187 stop_led(8);
MACRUM 3:98b6f181c935 188 stop_led(9);
MACRUM 1:789215018659 189 }
MACRUM 1:789215018659 190
MACRUM 1:789215018659 191 int main()
MACRUM 1:789215018659 192 {
MACRUM 1:789215018659 193 const int loops = 3;
MACRUM 1:789215018659 194 tapeInit(0, START_ID + NUM_LEDS); // freq( 0:default ) , SerialLED num
MACRUM 1:789215018659 195
MACRUM 1:789215018659 196 int i = 0;
MACRUM 1:789215018659 197 while(1) {
MACRUM 1:789215018659 198 if ((i/loops) == 0) {
MACRUM 1:789215018659 199 blink_4();
MACRUM 1:789215018659 200 }
MACRUM 1:789215018659 201 if ((i/loops) == 1) {
MACRUM 1:789215018659 202 blink_2();
MACRUM 1:789215018659 203 }
MACRUM 1:789215018659 204 if ((i/loops) == 2) {
MACRUM 1:789215018659 205 blink_3();
MACRUM 1:789215018659 206 }
MACRUM 1:789215018659 207 if ((i/loops) == 3) {
MACRUM 1:789215018659 208 blink_1();
MACRUM 1:789215018659 209 }
MACRUM 1:789215018659 210
MACRUM 1:789215018659 211 i++;
MACRUM 1:789215018659 212 if (i >= (loops * 4)) {
MACRUM 1:789215018659 213 i = 0;
MACRUM 1:789215018659 214 }
MACRUM 1:789215018659 215 }
MACRUM 1:789215018659 216 }