Xmas tree serial LED blinking example code

Dependencies:   mbed

Fork of JBB_SerialLED_test by Junichi Katsu

Revision:
1:832ea8c566a8
Parent:
0:57df396a2de8
Child:
2:20fc73d3b706
--- a/main.cpp	Mon May 12 11:01:44 2014 +0000
+++ b/main.cpp	Mon Dec 12 05:55:57 2016 +0000
@@ -1,32 +1,116 @@
 /**
- * Jksoft Blue mbed Board
+ * X'mas tree LED blinky using NeoPixel
  *
- * Serial LED test program
- *
- * Copyright (C) 2014 Junichi Katsu (JKSOFT) 
+ * Copyright (C) 2016 Toyomasa Watarai (MACRUM)
  */
+
 #include "mbed.h"
 #include "LEDStrip.h"
 
+#define START_ID  2
+#define NUM_LEDS  40
+#define MAX_LEVEL 255
 
-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
+DigitalIn rip(p17);
+DigitalOut myled(LED1);
+
+void blink_1(int);
+void blink_2(int);
+void blink_3(int);
+
+void blink_1(int loops)
+{
+    while(loops--) {
+        for (int idx = 0; idx < 8; idx++) {
+            for (int j = START_ID; j <= (START_ID + NUM_LEDS); j += 7) {
+                tapeSet(j+((idx+0)%7), 0, 0, 0);
+                tapeSet(j+((idx+1)%7), 0, 0, MAX_LEVEL);
+                tapeSet(j+((idx+2)%7), 0, MAX_LEVEL, 0);
+                tapeSet(j+((idx+3)%7), 0, MAX_LEVEL, MAX_LEVEL);
+                tapeSet(j+((idx+4)%7), MAX_LEVEL, 0, 0);
+                tapeSet(j+((idx+5)%7), MAX_LEVEL, 0, MAX_LEVEL);
+                tapeSet(j+((idx+6)%7), MAX_LEVEL, MAX_LEVEL, 0);
+                tapeSet(j+((idx+7)%7), MAX_LEVEL, MAX_LEVEL, MAX_LEVEL);
+            }
+            tapeSend();
+            wait_ms(300);
+        }
+    }
+}
+
+
+void blink_2(int loops)
+{
+    while(loops--) {
+        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(10);
+        }
+        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(10);
+        }
+        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(10);
+        }
+        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(10);
+        }
+    }
+}
+
+void blink_3(int loops)
+{
+    while(loops--) {
+        for( int i = START_ID ; i <= (START_ID + NUM_LEDS); i++) {
+            for (int j = (START_ID + NUM_LEDS); j >= START_ID; j--) {
+                tapeSet(j, MAX_LEVEL / ((( j - i ) - 1) * 5), 0, 0);	// LED No , Red , Green , Blue
+            }
+            tapeSend();
+            wait_ms(50);
+        }
+    }
+}
+
+void clear(void)
+{
+    for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
+        tapeSet(j, 0, 0, 0);	// LED No , Red , Green , Blue
+    }
+    tapeSend();
+}
+
+int main()
+{
+    tapeInit(0, START_ID + NUM_LEDS);	// freq( 0:default ) , SerialLED num
+    rip.mode(PullDown);
+
+    int sensor = rip.read();
+    while(1) {
+        if (sensor == 1) {
+            myled = 1;
+            blink_1(6);
+            blink_2(1);
+            blink_3(5);
+            clear();
+        }
+        myled = 0;
+        wait(0.5);
+        sensor = rip.read();
+
+    }
+}