![](/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:
- 2015-10-30
- Revision:
- 18:7c05ef6a639c
- Parent:
- 17:76c74851442f
- Child:
- 19:fabe9521b0a1
File content as of revision 18:7c05ef6a639c:
#include "mbed.h" #include "BLE.h" #include "UARTService.h" #include <string> #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__); } #define DEBUG(STR) { if (uartServicePtr) uartServicePtr->write(STR, strlen(STR)); } #else #define DEBUG(...) /* nothing */ #endif /* #if NEED_CONSOLE_OUTPUT */ //#define NRFDK #define MKIT #define calibrationTime 2 #define HPI 1.571 #define PI 3.1416 #define HYSTERESIS_QUANTITY PI/4 #define RWAIT 0 #define GWAIT 0 #define BWAIT 0 UARTService *uartServicePtr; unsigned long seed = 113; 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); InterruptIn motion(p1); #endif 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 identify(unsigned int m){ unsigned int hashable; float write_me; hashable = hash(m + seed); write_me = hashable/100.0; red.write(hashable >= 50); char* STR; sprintf(STR, "r, g, b: %f\t", write_me); DEBUG(STR); hashable = hash(m + seed); write_me = hashable/100.0; green.write(hashable >= 50); pc.printf("%f\t", write_me); hashable = hash(m + seed); write_me = hashable/100.0; blue.write(hashable >= 50); pc.printf("%f\n", write_me); } void calibrate(){ //give the sensor some time to calibrate pc.printf("calibrating sensor\n"); for(int i = 0; i < calibrationTime; i++){ pc.printf("."); identify(calibrationTime); wait(.5); } DEBUG(" done\n"); DEBUG("SENSOR ACTIVE\n"); wait(0.05); } void show(){ float in, rout, bout, gout; bool tit = true; unsigned int rgb = 0x0; pc.printf("showing...\n"); float hysteresis = 0; for (in = -HPI; in < hysteresis || rgb != 0x7; in = in + 0.00628) { #ifdef MKIT bool i = motion; #else bool i = !motion; #endif if (i){ hysteresis = in + HYSTERESIS_QUANTITY; pc.printf("hyst ||"); } tit = !tit; if (!(rgb & 0x1)) rout = sin(in + 2.88*(in + HPI)) + 1.0; else rout = 0.0f; if (!(rgb & 0x2)) gout = sin(in + 2.61*(in+HPI) ) + 1.0; else gout = 0.0f; if (!(rgb & 0x4)) bout = sin(in + 3.92*(in+HPI) ) + 1.0; else bout = 0.0f; pc.printf("%f\t%f\t%f\n",rout,gout, bout); red.write(rout/2.0); green.write(gout/2.0); blue.write(bout/2.0); if (in > hysteresis){ if (rout < 0.01) rgb |= 0x1; if (gout < 0.01) rgb |= 0x2; if (bout < 0.01) rgb |= 0x4; } wait(0.0001f); } pc.printf("\n%X\n", rgb); } void channel_check(){ red.write(1.0f); wait(.5); red.write(0.0f); green.write(1.0f); wait(.5); green.write(0.0f); blue.write(1.0f); wait(.5); blue.write(0.0f); } int main() { red.period(0.01f); green.period(0.01f); blue.period(0.01f); // // ble.init(); // ble.onDisconnection(disconnectionCallback); // // uartServicePtr = new UARTService(ble); // // /* setup advertising */ // ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); // ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, // (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1); // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, // (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); // // ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ // ble.startAdvertising(); // while(1){ #ifdef MKIT motion.rise(&show); #endif #ifdef NRFDK motion.fall(&show); #endif // red.write(0.0f); // green.write(0.0f); // blue.write(0.0f); ble.waitForEvent(); } }