Light Show library for organic, calm, light display.

Dependencies:   BLE_API mbed nRF51822

Fork of mbed_blinky by Mbed

Revision:
25:d48f46d753fd
Parent:
24:52319c0a14b8
Child:
26:8bc9984c4600
--- a/main.cpp	Sat Jan 30 20:07:55 2016 +0000
+++ b/main.cpp	Mon Feb 01 01:02:46 2016 +0000
@@ -5,44 +5,20 @@
 #include <string>
 
 #include "rgb_led.h"
-
-#define MKIT
-
-#ifdef NRFDK
-#define MOTION_PIN p20
+#include "sinusoid.h"
+#include "light_show.h"
 
-#define RED_PIN p21
-#define GREEN_PIN p22
-#define BLUE_PIN p23
-#endif
-
-#ifdef MKIT
-#define MOTION_PIN p1
+#include "utility.h"
 
-#define RED_PIN p6
-#define GREEN_PIN p22
-#define BLUE_PIN p30
-#endif
-
-#define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
-* it will have an impact on code-size and power consumption. */
+#include "macros.h"
+#include "config.h"
+#include "typedef.h"
 
-#if NEED_CONSOLE_OUTPUT
-#define DEBUG(...) { printf(__VA_ARGS__); }
-#else
-#define DEBUG(STR) { if (uartServicePtr) uartServicePtr->write(STR, strlen(STR)); }
-//#else
-//#define DEBUG(...) /* nothing */
-#endif /* #if NEED_CONSOLE_OUxTPUT */
 
 Serial pc(USBTX, USBRX); // tx, rx
 
-#define CALIBRATION_TIME 3
-
-
 Rgb strip(RED_PIN, GREEN_PIN, BLUE_PIN, &pc);
 
-
 //UARTService *uartServicePtr;
 const static char     DEVICE_NAME[] = "Bathroom";
 static const uint16_t uuid16_list[] = {ButtonService::BUTTON_SERVICE_UUID};
@@ -51,141 +27,37 @@
 ButtonService *buttonServicePtr;
 
 
-unsigned long seed = 151;
-
-typedef unsigned char byte;
-typedef unsigned int uint;
-
-
-
-
 InterruptIn motion(MOTION_PIN);
 
-
-
-
 BLEDevice  ble;
 
-void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
-{
-    DEBUG("Disconnected!\n\r");
-    DEBUG("Restarting the advertising process\n\r");
-    ble.startAdvertising();
-}
-
-
-
-unsigned int hash(unsigned int x)
-{
-    x = ((x >> 16) ^ x) * 0x45d9f3b;
-    x = ((x >> 16) ^ x) * 0x45d9f3b;
-    x = ((x >> 16) ^ x);
-    seed*=2;
-    seed+=17;
-    return x%100;
-}
-
-
-
-void identify(unsigned int m)
-{
-    DEBUG("IDENTIFYING as: ");
-    unsigned int hashable;
-    float write_me;
-
-    int r, g, b;
-
-    hashable = hash(m + seed);
-    write_me = hashable/100.0;
-    r = hashable >= 50;
-    strip.write(RED, r);
-
-    hashable = hash(m + seed);
-    write_me = hashable/100.0;
-    g = hashable >= 50;
-    strip.write(GREEN, g);
-
-    hashable = hash(m + seed);
-    write_me = hashable/100.0;
-    b = hashable >= 50;
-    strip.write(BLUE, b);
-
-    char* STR;
-//    sprintf(STR, "r, g, b: %f\t\r\n", write_me);
-//    DEBUG(STR);
-    DEBUG("%d%d%d\r\n",r,g,b);
-}
-
-void calibrate()
-{
+/** Reconnect if bluetooth disconnects **/
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params);
 
-    //give the sensor some time to calibrate
-    pc.printf("calibrating sensor\n\r");
-    for(int i = 0; i < CALIBRATION_TIME; i++) {
-        pc.printf(".");
-        identify(CALIBRATION_TIME);
-        wait(.5);
-    }
-    DEBUG(" done\n\r");
-    strip.quiet();
-
-    DEBUG("SENSOR ACTIVE\n\r");
-    wait(0.05);
-}
-
-void motionIRQ()
-{
-    motionState = 1;
-}
-
-
+/** chill for 10 seconds for FIR sensor calibration **/
+void calibrate();
 
-void show()
-{
-    printf("show\r\n");
-    // randomize the delay and scale values
-    strip.randomize_params();
-    printf("params initialized:\n\r");
-    pc.printf("WAIT:\t%f\t%f\t%f\n\r", WAIT[0], WAIT[1], WAIT[2]);
-    pc.printf("SCALE:\t%f\t%f\t%f\n\r", SCALE[0], SCALE[1], SCALE[2]);
-    for (in = 0; in < hysteresis || rgb != 0x7; in = in + INCREMENT) {
-#ifdef MKIT
-        bool mov = motion;
-#else
-        bool mov = !motion;
-#endif
-        if (mov) {
-            strip.hysteresis = in + HYSTERESIS_QUANTITY;
-        }
-
-        // update rgb
-        strip.update_rgb_values();
-
-        // write values
-        strip.write_rgb();
-
-
-        if (in > hysteresis) {
-            if (rgb_c[0] < 0.01)
-                rgb |= 0x1;
-            if (rgb_c[1] < 0.01)
-                rgb |= 0x2;
-            if (rgb_c[2] < 0.01)
-                rgb |= 0x4;
-        }
-    }
-}
-
-
+/** Light weight interrupt handler **/
+void motionIRQ();
 
 
 int main()
 {
     DEBUG("Start Main.\r\n");
-
+    strip.init();
+    strip.channel_check();
+    strip.quiet();
+    
+//    Sinusoid s(0.0, 1.0);
+//    for (float ff;; ff+=0.00005)
+//        strip.write(RED, s.get_y(ff));
+        
+    LightShow show_obj(&strip);  /* object that runs the light show */
+ 
+#define BLE       
+#ifdef BLE
 
-
-    calibrate();
+    //calibrate();
 
     ble.init();
     ble.gap().onDisconnection(disconnectionCallback);
@@ -209,16 +81,49 @@
         if (motionState) {
             pc.printf("Motion detected.\r\n");
             buttonServicePtr->updateButtonState(motionState);
-            show();
+            show_obj.show();
             motionState = 0;
             buttonServicePtr->updateButtonState(motionState);
             strip.quiet();
         }
-#endif
-#ifdef NRFDK
+#elif defined NRFDK
         motion.fall(&strip.show());
 #endif
 
         ble.waitForEvent();
     }
-}
\ No newline at end of file
+#endif//BLE
+} // END main()
+
+
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
+{
+    DEBUG("Disconnected!\n\r");
+    DEBUG("Restarting the advertising process\n\r");
+    ble.startAdvertising();
+}
+
+void motionIRQ()
+{
+    motionState = 1;
+}
+
+void calibrate()
+{
+
+    //give the sensor some time to calibrate
+    pc.printf("calibrating sensor\n\r");
+    for(int i = 0; i < CALIBRATION_TIME; i++) {
+        pc.printf(".");
+        identify(CALIBRATION_TIME, strip);
+        wait(.5);
+    }
+    DEBUG(" done\n\r");
+    strip.quiet();
+
+    DEBUG("SENSOR ACTIVE\n\r");
+    wait(0.05);
+}
+
+
+