mbed Christmas tree using NeoPixel

Dependencies:   mbed

Fork of JBB_SerialLED_test by Junichi Katsu

Revision:
1:789215018659
Parent:
0:57df396a2de8
Child:
2:435f94e9bb06
--- a/main.cpp	Mon May 12 11:01:44 2014 +0000
+++ b/main.cpp	Fri Dec 04 14:08:03 2015 +0000
@@ -1,32 +1,310 @@
 /**
- * Jksoft Blue mbed Board
+ * X'mas tree LED blinky using NeoPixel
  *
- * Serial LED test program
- *
- * Copyright (C) 2014 Junichi Katsu (JKSOFT) 
+ * Copyright (C) 2015 Toyomasa Watarai (MACRUM)
  */
+
 #include "mbed.h"
 #include "LEDStrip.h"
 
+#define START_ID  2
+#define NUM_LEDS  10
+#define MAX_LEVEL 100
 
-int main() {
-	tapeInit(0, 2);	// freq( 0:default ) , SerialLED num
-	
-	while(1)
-	{
-		for( int i=0 ; i < 256 ; i++ )
-		{
-			tapeSet(0,i,0,0);	// LED No , Red , Green , Blue
-			tapeSet(1,0,i,0);	// LED No , Red , Green , Blue
-			tapeSend();			// Send to LED
-			wait_ms(20);
-		}
-		for( int i=255 ; i > 0 ; i-- )
-		{
-			tapeSet(0,i,0,0);	// LED No , Red , Green , Blue
-			tapeSet(1,0,i,0);	// LED No , Red , Green , Blue
-			tapeSend();			// Send to led
-			wait_ms(20);
-		}
-	}
-}
\ No newline at end of file
+Ticker blinker0, blinker1, blinker2, blinker3, blinker4, blinker5, blinker6, blinker7, blinker8, blinker9;
+int led0_val, led1_val, led2_val, led3_val, led4_val, led5_val, led6_val, led7_val, led8_val, led9_val;
+
+void blink_1()
+{
+    for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
+        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
+            tapeSet(j, i, i, i);	// LED No , Red , Green , Blue
+        }
+        tapeSend();
+        wait_ms(15);
+    }
+    for( int i=MAX_LEVEL ; i >= 0 ; i-- ) {
+        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
+            tapeSet(j, i, i, i);	// LED No , Red , Green , Blue
+        }
+        tapeSend();
+        wait_ms(15);
+    }
+}
+
+void blink_2()
+{
+    for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
+        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
+            tapeSet(j, i, 0, 0);	// LED No , Red , Green , Blue
+        }
+        tapeSend();
+        wait_ms(15);
+    }
+    for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
+        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
+            tapeSet(j, MAX_LEVEL, i, 0);	// LED No , Red , Green , Blue
+        }
+        tapeSend();
+        wait_ms(15);
+    }
+    for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
+        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
+            tapeSet(j, MAX_LEVEL, MAX_LEVEL, i);	// LED No , Red , Green , Blue
+        }
+        tapeSend();
+        wait_ms(15);
+    }
+    for( int i=MAX_LEVEL ; i >= 0 ; i-- ) {
+        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
+            tapeSet(j, i, i, i);	// LED No , Red , Green , Blue
+        }
+        tapeSend();
+        wait_ms(15);
+    }
+}
+
+void blink_3()
+{
+    for( int i = START_ID ; i <= (START_ID + NUM_LEDS); i++) {
+        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
+            if ( i == j) {
+                tapeSet(j, MAX_LEVEL, 0, 0);	// LED No , Red , Green , Blue
+            } else {
+                tapeSet(j, 0, 0, 0);	// LED No , Red , Green , Blue
+            }
+
+        }
+        tapeSend();
+        wait_ms(100);
+    }
+}
+
+#define WAIT_TIME0 0.19
+#define WAIT_TIME1 0.25
+#define WAIT_TIME2 0.3
+#define WAIT_TIME3 0.2
+#define WAIT_TIME4 0.22
+#define WAIT_TIME5 0.3
+#define WAIT_TIME6 0.17
+#define WAIT_TIME7 0.24
+#define WAIT_TIME8 0.18
+#define WAIT_TIME9 0.28
+
+#define INTERVAL0 9
+#define INTERVAL1 14
+#define INTERVAL2 20
+#define INTERVAL3 17
+#define INTERVAL4 30
+#define INTERVAL5 20
+#define INTERVAL6 25
+#define INTERVAL7 17
+#define INTERVAL8 22
+#define INTERVAL9 19
+
+extern int wakeup;
+
+void led0_event()
+{
+    tapeSet(START_ID + 0, led0_val, led0_val, led0_val);
+    wakeup = 1;
+
+    if (led0_val <= 0)
+        led0_val = MAX_LEVEL;
+    else
+        led0_val -= INTERVAL0;
+
+    if (led0_val < 0)
+        led0_val = 0;
+}
+
+void led1_event()
+{
+    tapeSet(START_ID + 1, led1_val, led1_val, led1_val);
+    wakeup = 1;
+
+    if (led1_val <= 0)
+        led1_val = MAX_LEVEL;
+    else
+        led1_val -= INTERVAL1;
+
+    if (led1_val < 0)
+        led1_val = 0;
+}
+
+void led2_event()
+{
+    tapeSet(START_ID + 2, led2_val, led2_val, led2_val);
+    wakeup = 1;
+
+    if (led2_val <= 0)
+        led2_val = MAX_LEVEL;
+    else
+        led2_val -= INTERVAL2;
+
+    if (led2_val < 0)
+        led2_val = 0;
+}
+
+void led3_event()
+{
+    tapeSet(START_ID + 3, led3_val, led3_val, led3_val);
+    wakeup = 1;
+
+    if (led3_val <= 0)
+        led3_val = MAX_LEVEL;
+    else
+        led3_val -= INTERVAL3;
+
+    if (led3_val < 0)
+        led3_val = 0;
+}
+
+void led4_event()
+{
+    tapeSet(START_ID + 4, led4_val, led4_val, led4_val);
+    wakeup = 1;
+
+    if (led4_val <= 0)
+        led4_val = MAX_LEVEL;
+    else
+        led4_val -= INTERVAL4;
+
+    if (led4_val < 0)
+        led4_val = 0;
+}
+
+void led5_event()
+{
+    tapeSet(START_ID + 5, led5_val, led5_val, led5_val);
+    wakeup = 1;
+
+    if (led5_val <= 0)
+        led5_val = MAX_LEVEL;
+    else
+        led5_val -= INTERVAL5;
+
+    if (led5_val < 0)
+        led5_val = 0;
+}
+
+void led6_event()
+{
+    tapeSet(START_ID + 6, led6_val, led6_val, led6_val);
+    wakeup = 1;
+
+    if (led6_val <= 0)
+        led6_val = MAX_LEVEL;
+    else
+        led6_val -= INTERVAL6;
+
+    if (led6_val < 0)
+        led6_val = 0;
+}
+
+void led7_event()
+{
+    tapeSet(START_ID + 7, led7_val, led7_val, led7_val);
+    wakeup = 1;
+
+    if (led7_val <= 0)
+        led7_val = MAX_LEVEL;
+    else
+        led7_val -= INTERVAL7;
+
+    if (led7_val < 0)
+        led7_val = 0;
+}
+
+void led8_event()
+{
+    tapeSet(START_ID + 8, led8_val, led8_val, led8_val);
+    wakeup = 1;
+
+    if (led8_val <= 0)
+        led8_val = MAX_LEVEL;
+    else
+        led8_val -= INTERVAL8;
+
+    if (led8_val < 0)
+        led8_val = 0;
+}
+
+void led9_event()
+{
+    tapeSet(START_ID + 9, led9_val, led9_val, led9_val);
+    wakeup = 1;
+
+    if (led9_val <= 0)
+        led9_val = MAX_LEVEL;
+    else
+        led9_val -= INTERVAL9;
+
+    if (led9_val < 0)
+        led9_val = 0;
+}
+
+void blink_4()
+{
+    led0_val = MAX_LEVEL;
+    led1_val = MAX_LEVEL;
+    led2_val = MAX_LEVEL;
+    led3_val = MAX_LEVEL;
+    led4_val = MAX_LEVEL;
+    led5_val = MAX_LEVEL;
+    led6_val = MAX_LEVEL;
+    led7_val = MAX_LEVEL;
+    led8_val = MAX_LEVEL;
+    led9_val = MAX_LEVEL;
+
+    blinker0.attach(&led0_event, WAIT_TIME0);
+    blinker1.attach(&led1_event, WAIT_TIME1);
+    blinker2.attach(&led2_event, WAIT_TIME2);
+    blinker3.attach(&led3_event, WAIT_TIME3);
+    blinker4.attach(&led4_event, WAIT_TIME4);
+    blinker5.attach(&led5_event, WAIT_TIME5);
+    blinker6.attach(&led6_event, WAIT_TIME6);
+    blinker7.attach(&led7_event, WAIT_TIME7);
+    blinker8.attach(&led8_event, WAIT_TIME8);
+    blinker9.attach(&led9_event, WAIT_TIME9);
+
+    wait(8);
+
+    blinker0.detach();
+    blinker1.detach();
+    blinker2.detach();
+    blinker3.detach();
+    blinker4.detach();
+    blinker5.detach();
+    blinker6.detach();
+    blinker7.detach();
+    blinker8.detach();
+    blinker9.detach();
+}
+
+int main()
+{
+    const int loops = 3;
+    tapeInit(0, START_ID + NUM_LEDS);	// freq( 0:default ) , SerialLED num
+
+    int i = 0;
+    while(1) {
+        if ((i/loops) == 0) {
+            blink_4();
+        }
+        if ((i/loops) == 1) {
+            blink_2();
+        }
+        if ((i/loops) == 2) {
+            blink_3();
+        }
+        if ((i/loops) == 3) {
+            blink_1();
+        }
+
+        i++;
+        if (i >= (loops * 4)) {
+            i = 0;
+        }
+    }
+}