Toyomasa Watarai
/
mbed_Christmas_tree
mbed Christmas tree using NeoPixel
Fork of JBB_SerialLED_test by
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Fri Jul 15 2022 00:52:23 by 1.7.2