![](/media/cache/profiles/IMG_0710-2.jpg.50x50_q85.jpg)
Light Show library for organic, calm, light display.
Dependencies: BLE_API mbed nRF51822
Fork of mbed_blinky by
main.cpp
- Committer:
- nargetdev
- Date:
- 2016-01-29
- Revision:
- 23:4bb74b53e112
- Parent:
- 22:b618d55e9c9b
- Child:
- 24:52319c0a14b8
File content as of revision 23:4bb74b53e112:
#include "mbed.h" #include "BLE.h" #include "ButtonService.h" //#include "UARTService.h" #include <string> #include "rgb_led.h" #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. */ #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 */ //#define NRFDK #define MKIT #define CALIBRATION_TIME 3 //#define HPI 1.571 //#define PI 3.1416 //#define HYSTERESIS_QUANTITY PI/4 // //#define RWAIT 0 //#define GWAIT PI/8 //#define BWAIT PI/4 //UARTService *uartServicePtr; const static char DEVICE_NAME[] = "Bathroom"; static const uint16_t uuid16_list[] = {ButtonService::BUTTON_SERVICE_UUID}; uint8_t motionState = 0; ButtonService *buttonServicePtr; unsigned long seed = 151; typedef unsigned char byte; typedef unsigned int uint; #ifdef NRFDK InterruptIn motion(p20); PwmOut red(p21); PwmOut green(p22); PwmOut blue(p23); #endif #ifdef MKIT //PwmOut red(p18); //PwmOut green(p19); //PwmOut blue(p20); PwmOut red(p6); PwmOut green(p22); PwmOut blue(p30); InterruptIn motion(p1); #endif // get some randomness Timer t; Serial pc(USBTX, USBRX); // tx, rx 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 zero_out() { red.write(0); green.write(0); blue.write(0); printf("zero_out()\r\n"); } 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; red.write(r); hashable = hash(m + seed); write_me = hashable/100.0; g = hashable >= 50; green.write(g); hashable = hash(m + seed); write_me = hashable/100.0; b = hashable >= 50; blue.write(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(){ //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"); zero_out(); DEBUG("SENSOR ACTIVE\n\r"); wait(0.05); } void motionIRQ(){ motionState = 1; } int main() { DEBUG("Start Main.\r\n"); // Set RTC time to Wed, 28 Oct 2009 11:35:37 set_time(1256729737); t.start(); red.period(0.01f); green.period(0.01f); blue.period(0.01f); calibrate(); ble.init(); ble.gap().onDisconnection(disconnectionCallback); ButtonService buttonService(ble, false /* initial value for button pressed */); buttonServicePtr = &buttonService; /* setup advertising */ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.gap().setAdvertisingInterval(1000); /* 1000ms. */ ble.gap().startAdvertising(); DEBUG("Instantiate strip.\r\n"); Rgb strip; DEBUG("I have a strip.\r\n"); while(1){ #ifdef MKIT motion.rise(&motionIRQ); if (motionState){ pc.printf("Motion detected.\r\n"); buttonServicePtr->updateButtonState(motionState); strip.show(); motionState = 0; buttonServicePtr->updateButtonState(motionState); red.write(0.0f); green.write(0.0f); blue.write(0.0f); } #endif #ifdef NRFDK motion.fall(&strip.show()); #endif // red.write(0.0f); // green.write(0.0f); // blue.write(0.0f); ble.waitForEvent(); } }