mbed Christmas tree using NeoPixel

Dependencies:   mbed

Fork of JBB_SerialLED_test by Junichi Katsu

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /**
00002  * X'mas tree LED blinky using NeoPixel
00003  *
00004  * Copyright (C) 2015 Toyomasa Watarai (MACRUM)
00005  */
00006 
00007 #include "mbed.h"
00008 #include "LEDStrip.h"
00009 
00010 #define START_ID  2
00011 #define NUM_LEDS  10
00012 #define MAX_LEVEL 100
00013 
00014 Ticker blinker0, blinker1, blinker2, blinker3, blinker4, blinker5, blinker6, blinker7, blinker8, blinker9;
00015 int led_val[NUM_LEDS];
00016 
00017 void blink_1()
00018 {
00019     for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
00020         for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
00021             tapeSet(j, i, i, i);    // LED No , Red , Green , Blue
00022         }
00023         tapeSend();
00024         wait_ms(15);
00025     }
00026     for( int i=MAX_LEVEL ; i >= 0 ; i-- ) {
00027         for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
00028             tapeSet(j, i, i, i);    // LED No , Red , Green , Blue
00029         }
00030         tapeSend();
00031         wait_ms(15);
00032     }
00033 }
00034 
00035 void blink_2()
00036 {
00037     for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
00038         for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
00039             tapeSet(j, i, 0, 0);    // LED No , Red , Green , Blue
00040         }
00041         tapeSend();
00042         wait_ms(15);
00043     }
00044     for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
00045         for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
00046             tapeSet(j, MAX_LEVEL, i, 0);    // LED No , Red , Green , Blue
00047         }
00048         tapeSend();
00049         wait_ms(15);
00050     }
00051     for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
00052         for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
00053             tapeSet(j, MAX_LEVEL, MAX_LEVEL, i);    // LED No , Red , Green , Blue
00054         }
00055         tapeSend();
00056         wait_ms(15);
00057     }
00058     for( int i=MAX_LEVEL ; i >= 0 ; i-- ) {
00059         for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
00060             tapeSet(j, i, i, i);    // LED No , Red , Green , Blue
00061         }
00062         tapeSend();
00063         wait_ms(15);
00064     }
00065 }
00066 
00067 void blink_3()
00068 {
00069     for( int i = START_ID ; i <= (START_ID + NUM_LEDS); i++) {
00070         for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
00071             if ( i == j) {
00072                 tapeSet(j, MAX_LEVEL, 0, 0);    // LED No , Red , Green , Blue
00073             } else {
00074                 tapeSet(j, 0, 0, 0);    // LED No , Red , Green , Blue
00075             }
00076 
00077         }
00078         tapeSend();
00079         wait_ms(100);
00080     }
00081 }
00082 
00083 #define WAIT_TIME0 0.19
00084 #define WAIT_TIME1 0.25
00085 #define WAIT_TIME2 0.3
00086 #define WAIT_TIME3 0.2
00087 #define WAIT_TIME4 0.22
00088 #define WAIT_TIME5 0.3
00089 #define WAIT_TIME6 0.17
00090 #define WAIT_TIME7 0.24
00091 #define WAIT_TIME8 0.18
00092 #define WAIT_TIME9 0.28
00093 
00094 #define INTERVAL0 9
00095 #define INTERVAL1 14
00096 #define INTERVAL2 20
00097 #define INTERVAL3 17
00098 #define INTERVAL4 30
00099 #define INTERVAL5 20
00100 #define INTERVAL6 25
00101 #define INTERVAL7 17
00102 #define INTERVAL8 22
00103 #define INTERVAL9 19
00104 
00105 extern int wakeup;
00106 
00107 #define led_event(i) \
00108     tapeSet(START_ID + 0, led_val[i], led_val[i], led_val[i]); \
00109     wakeup = 1; \
00110     if (led_val[i] <= 0) \
00111         led_val[i] = MAX_LEVEL; \
00112     else \
00113         led_val[i] -= INTERVAL##i; \
00114     if (led_val[i] < 0) \
00115         led_val[i] = 0;
00116 
00117 
00118 void led0_event() {
00119     led_event(0);
00120 }
00121 
00122 void led1_event() {
00123     led_event(1);
00124 }
00125 
00126 void led2_event() {
00127     led_event(2);
00128 }
00129 
00130 void led3_event() {
00131     led_event(3);
00132 }
00133 
00134 void led4_event() {
00135     led_event(4);
00136 }
00137 
00138 void led5_event() {
00139     led_event(5);
00140 }
00141 
00142 void led6_event() {
00143     led_event(6);
00144 }
00145 
00146 void led7_event() {
00147     led_event(7);
00148 }
00149 
00150 void led8_event() {
00151     led_event(8);
00152 }
00153 
00154 void led9_event() {
00155     led_event(9);
00156 }
00157 
00158 #define start_led(i) \
00159     led_val[i] = MAX_LEVEL; \
00160     blinker##i.attach(&led##i##_event, WAIT_TIME##i);
00161 
00162 #define stop_led(i) blinker##i.detach();
00163 
00164 void blink_4()
00165 {
00166     start_led(0);
00167     start_led(1);
00168     start_led(2);
00169     start_led(3);
00170     start_led(4);
00171     start_led(5);
00172     start_led(6);
00173     start_led(7);
00174     start_led(8);
00175     start_led(9);
00176 
00177     wait(8);
00178 
00179     stop_led(0);
00180     stop_led(1);
00181     stop_led(2);
00182     stop_led(3);
00183     stop_led(4);
00184     stop_led(5);
00185     stop_led(6);
00186     stop_led(7);
00187     stop_led(8);
00188     stop_led(9);
00189 }
00190 
00191 int main()
00192 {
00193     const int loops = 3;
00194     tapeInit(0, START_ID + NUM_LEDS);   // freq( 0:default ) , SerialLED num
00195 
00196     int i = 0;
00197     while(1) {
00198         if ((i/loops) == 0) {
00199             blink_4();
00200         }
00201         if ((i/loops) == 1) {
00202             blink_2();
00203         }
00204         if ((i/loops) == 2) {
00205             blink_3();
00206         }
00207         if ((i/loops) == 3) {
00208             blink_1();
00209         }
00210 
00211         i++;
00212         if (i >= (loops * 4)) {
00213             i = 0;
00214         }
00215     }
00216 }