Light Show library for organic, calm, light display.

Dependencies:   BLE_API mbed nRF51822

Fork of mbed_blinky by Mbed

Committer:
nargetdev
Date:
Fri Jan 29 20:22:02 2016 +0000
Revision:
23:4bb74b53e112
Parent:
22:b618d55e9c9b
Child:
24:52319c0a14b8
uggh

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nargetdev 18:7c05ef6a639c 1 #include "mbed.h"
nargetdev 18:7c05ef6a639c 2 #include "BLE.h"
nargetdev 19:fabe9521b0a1 3 #include "ButtonService.h"
nargetdev 19:fabe9521b0a1 4 //#include "UARTService.h"
nargetdev 18:7c05ef6a639c 5 #include <string>
nargetdev 18:7c05ef6a639c 6
nargetdev 23:4bb74b53e112 7
nargetdev 23:4bb74b53e112 8 #include "rgb_led.h"
nargetdev 23:4bb74b53e112 9
nargetdev 21:3960e3b8ca7b 10 #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
nargetdev 18:7c05ef6a639c 11 * it will have an impact on code-size and power consumption. */
nargetdev 11:2d3cc5459d5b 12
nargetdev 18:7c05ef6a639c 13 #if NEED_CONSOLE_OUTPUT
nargetdev 21:3960e3b8ca7b 14 #define DEBUG(...) { printf(__VA_ARGS__); }
nargetdev 18:7c05ef6a639c 15 #else
nargetdev 21:3960e3b8ca7b 16 #define DEBUG(STR) { if (uartServicePtr) uartServicePtr->write(STR, strlen(STR)); }
nargetdev 21:3960e3b8ca7b 17 //#else
nargetdev 21:3960e3b8ca7b 18 //#define DEBUG(...) /* nothing */
nargetdev 21:3960e3b8ca7b 19 #endif /* #if NEED_CONSOLE_OUxTPUT */
nargetdev 18:7c05ef6a639c 20
nargetdev 18:7c05ef6a639c 21 //#define NRFDK
nargetdev 18:7c05ef6a639c 22 #define MKIT
nargetdev 18:7c05ef6a639c 23
nargetdev 19:fabe9521b0a1 24 #define CALIBRATION_TIME 3
nargetdev 11:2d3cc5459d5b 25
nargetdev 19:fabe9521b0a1 26 //#define HPI 1.571
nargetdev 19:fabe9521b0a1 27 //#define PI 3.1416
nargetdev 19:fabe9521b0a1 28 //#define HYSTERESIS_QUANTITY PI/4
nargetdev 19:fabe9521b0a1 29 //
nargetdev 19:fabe9521b0a1 30 //#define RWAIT 0
nargetdev 19:fabe9521b0a1 31 //#define GWAIT PI/8
nargetdev 19:fabe9521b0a1 32 //#define BWAIT PI/4
nargetdev 11:2d3cc5459d5b 33
nargetdev 19:fabe9521b0a1 34
nargetdev 19:fabe9521b0a1 35 //UARTService *uartServicePtr;
nargetdev 19:fabe9521b0a1 36 const static char DEVICE_NAME[] = "Bathroom";
nargetdev 19:fabe9521b0a1 37 static const uint16_t uuid16_list[] = {ButtonService::BUTTON_SERVICE_UUID};
nargetdev 18:7c05ef6a639c 38
nargetdev 19:fabe9521b0a1 39 uint8_t motionState = 0;
nargetdev 19:fabe9521b0a1 40 ButtonService *buttonServicePtr;
nargetdev 18:7c05ef6a639c 41
nargetdev 19:fabe9521b0a1 42
nargetdev 21:3960e3b8ca7b 43 unsigned long seed = 151;
dan 0:7dec7e9ac085 44
nargetdev 9:1bd0f7a2ee71 45 typedef unsigned char byte;
nargetdev 9:1bd0f7a2ee71 46 typedef unsigned int uint;
nargetdev 9:1bd0f7a2ee71 47
nargetdev 18:7c05ef6a639c 48 #ifdef NRFDK
nargetdev 18:7c05ef6a639c 49 InterruptIn motion(p20);
nargetdev 18:7c05ef6a639c 50 PwmOut red(p21);
nargetdev 18:7c05ef6a639c 51 PwmOut green(p22);
nargetdev 18:7c05ef6a639c 52 PwmOut blue(p23);
nargetdev 18:7c05ef6a639c 53 #endif
nargetdev 18:7c05ef6a639c 54
nargetdev 18:7c05ef6a639c 55 #ifdef MKIT
nargetdev 22:b618d55e9c9b 56 //PwmOut red(p18);
nargetdev 22:b618d55e9c9b 57 //PwmOut green(p19);
nargetdev 22:b618d55e9c9b 58 //PwmOut blue(p20);
nargetdev 22:b618d55e9c9b 59 PwmOut red(p6);
nargetdev 22:b618d55e9c9b 60 PwmOut green(p22);
nargetdev 22:b618d55e9c9b 61 PwmOut blue(p30);
nargetdev 18:7c05ef6a639c 62 InterruptIn motion(p1);
nargetdev 18:7c05ef6a639c 63 #endif
nargetdev 18:7c05ef6a639c 64
nargetdev 19:fabe9521b0a1 65 // get some randomness
nargetdev 19:fabe9521b0a1 66 Timer t;
nargetdev 9:1bd0f7a2ee71 67
nargetdev 9:1bd0f7a2ee71 68 Serial pc(USBTX, USBRX); // tx, rx
nargetdev 9:1bd0f7a2ee71 69
nargetdev 18:7c05ef6a639c 70
nargetdev 18:7c05ef6a639c 71 BLEDevice ble;
nargetdev 18:7c05ef6a639c 72
nargetdev 18:7c05ef6a639c 73 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
nargetdev 18:7c05ef6a639c 74 {
nargetdev 18:7c05ef6a639c 75 DEBUG("Disconnected!\n\r");
nargetdev 18:7c05ef6a639c 76 DEBUG("Restarting the advertising process\n\r");
nargetdev 18:7c05ef6a639c 77 ble.startAdvertising();
nargetdev 18:7c05ef6a639c 78 }
nargetdev 18:7c05ef6a639c 79
nargetdev 18:7c05ef6a639c 80
nargetdev 18:7c05ef6a639c 81
nargetdev 9:1bd0f7a2ee71 82 unsigned int hash(unsigned int x) {
nargetdev 9:1bd0f7a2ee71 83 x = ((x >> 16) ^ x) * 0x45d9f3b;
nargetdev 9:1bd0f7a2ee71 84 x = ((x >> 16) ^ x) * 0x45d9f3b;
nargetdev 9:1bd0f7a2ee71 85 x = ((x >> 16) ^ x);
nargetdev 9:1bd0f7a2ee71 86 seed*=2;
nargetdev 9:1bd0f7a2ee71 87 seed+=17;
nargetdev 9:1bd0f7a2ee71 88 return x%100;
dan 0:7dec7e9ac085 89 }
nargetdev 8:5ed23e276c8a 90
nargetdev 21:3960e3b8ca7b 91 void zero_out() {
nargetdev 21:3960e3b8ca7b 92 red.write(0);
nargetdev 21:3960e3b8ca7b 93 green.write(0);
nargetdev 21:3960e3b8ca7b 94 blue.write(0);
nargetdev 21:3960e3b8ca7b 95 printf("zero_out()\r\n");
nargetdev 21:3960e3b8ca7b 96 }
nargetdev 21:3960e3b8ca7b 97
nargetdev 9:1bd0f7a2ee71 98 void identify(unsigned int m){
nargetdev 21:3960e3b8ca7b 99 DEBUG("IDENTIFYING as: ");
nargetdev 9:1bd0f7a2ee71 100 unsigned int hashable;
nargetdev 9:1bd0f7a2ee71 101 float write_me;
nargetdev 9:1bd0f7a2ee71 102
nargetdev 21:3960e3b8ca7b 103 int r, g, b;
nargetdev 21:3960e3b8ca7b 104
nargetdev 9:1bd0f7a2ee71 105 hashable = hash(m + seed);
nargetdev 9:1bd0f7a2ee71 106 write_me = hashable/100.0;
nargetdev 21:3960e3b8ca7b 107 r = hashable >= 50;
nargetdev 21:3960e3b8ca7b 108 red.write(r);
nargetdev 9:1bd0f7a2ee71 109
nargetdev 9:1bd0f7a2ee71 110 hashable = hash(m + seed);
nargetdev 9:1bd0f7a2ee71 111 write_me = hashable/100.0;
nargetdev 21:3960e3b8ca7b 112 g = hashable >= 50;
nargetdev 21:3960e3b8ca7b 113 green.write(g);
nargetdev 9:1bd0f7a2ee71 114
nargetdev 9:1bd0f7a2ee71 115 hashable = hash(m + seed);
nargetdev 9:1bd0f7a2ee71 116 write_me = hashable/100.0;
nargetdev 21:3960e3b8ca7b 117 b = hashable >= 50;
nargetdev 21:3960e3b8ca7b 118 blue.write(b);
nargetdev 21:3960e3b8ca7b 119
nargetdev 21:3960e3b8ca7b 120 char* STR;
nargetdev 21:3960e3b8ca7b 121 // sprintf(STR, "r, g, b: %f\t\r\n", write_me);
nargetdev 21:3960e3b8ca7b 122 // DEBUG(STR);
nargetdev 21:3960e3b8ca7b 123 DEBUG("%d%d%d\r\n",r,g,b);
nargetdev 8:5ed23e276c8a 124 }
nargetdev 8:5ed23e276c8a 125
nargetdev 9:1bd0f7a2ee71 126 void calibrate(){
nargetdev 9:1bd0f7a2ee71 127
nargetdev 9:1bd0f7a2ee71 128 //give the sensor some time to calibrate
nargetdev 21:3960e3b8ca7b 129 pc.printf("calibrating sensor\n\r");
nargetdev 19:fabe9521b0a1 130 for(int i = 0; i < CALIBRATION_TIME; i++){
nargetdev 9:1bd0f7a2ee71 131 pc.printf(".");
nargetdev 19:fabe9521b0a1 132 identify(CALIBRATION_TIME);
nargetdev 15:ee94af1f90a0 133 wait(.5);
nargetdev 9:1bd0f7a2ee71 134 }
nargetdev 21:3960e3b8ca7b 135 DEBUG(" done\n\r");
nargetdev 21:3960e3b8ca7b 136 zero_out();
nargetdev 21:3960e3b8ca7b 137
nargetdev 21:3960e3b8ca7b 138 DEBUG("SENSOR ACTIVE\n\r");
nargetdev 9:1bd0f7a2ee71 139 wait(0.05);
nargetdev 9:1bd0f7a2ee71 140 }
nargetdev 9:1bd0f7a2ee71 141
nargetdev 19:fabe9521b0a1 142 void motionIRQ(){
nargetdev 19:fabe9521b0a1 143 motionState = 1;
nargetdev 19:fabe9521b0a1 144 }
nargetdev 10:fc61583e9e8f 145
nargetdev 9:1bd0f7a2ee71 146
nargetdev 14:e8a1fe69b048 147
nargetdev 19:fabe9521b0a1 148
nargetdev 19:fabe9521b0a1 149
nargetdev 9:1bd0f7a2ee71 150 int main() {
nargetdev 21:3960e3b8ca7b 151 DEBUG("Start Main.\r\n");
nargetdev 21:3960e3b8ca7b 152
nargetdev 19:fabe9521b0a1 153 // Set RTC time to Wed, 28 Oct 2009 11:35:37
nargetdev 19:fabe9521b0a1 154 set_time(1256729737);
nargetdev 19:fabe9521b0a1 155 t.start();
nargetdev 18:7c05ef6a639c 156 red.period(0.01f);
nargetdev 18:7c05ef6a639c 157 green.period(0.01f);
nargetdev 18:7c05ef6a639c 158 blue.period(0.01f);
nargetdev 21:3960e3b8ca7b 159
nargetdev 21:3960e3b8ca7b 160
nargetdev 21:3960e3b8ca7b 161 calibrate();
nargetdev 19:fabe9521b0a1 162
nargetdev 19:fabe9521b0a1 163 ble.init();
nargetdev 19:fabe9521b0a1 164 ble.gap().onDisconnection(disconnectionCallback);
nargetdev 19:fabe9521b0a1 165
nargetdev 19:fabe9521b0a1 166 ButtonService buttonService(ble, false /* initial value for button pressed */);
nargetdev 19:fabe9521b0a1 167 buttonServicePtr = &buttonService;
nargetdev 19:fabe9521b0a1 168
nargetdev 19:fabe9521b0a1 169 /* setup advertising */
nargetdev 19:fabe9521b0a1 170 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
nargetdev 19:fabe9521b0a1 171 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
nargetdev 19:fabe9521b0a1 172 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
nargetdev 19:fabe9521b0a1 173 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
nargetdev 19:fabe9521b0a1 174 ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
nargetdev 19:fabe9521b0a1 175 ble.gap().startAdvertising();
nargetdev 14:e8a1fe69b048 176
nargetdev 21:3960e3b8ca7b 177 DEBUG("Instantiate strip.\r\n");
nargetdev 21:3960e3b8ca7b 178 Rgb strip;
nargetdev 21:3960e3b8ca7b 179 DEBUG("I have a strip.\r\n");
nargetdev 18:7c05ef6a639c 180
nargetdev 9:1bd0f7a2ee71 181 while(1){
nargetdev 18:7c05ef6a639c 182 #ifdef MKIT
nargetdev 19:fabe9521b0a1 183 motion.rise(&motionIRQ);
nargetdev 19:fabe9521b0a1 184 if (motionState){
nargetdev 21:3960e3b8ca7b 185 pc.printf("Motion detected.\r\n");
nargetdev 19:fabe9521b0a1 186 buttonServicePtr->updateButtonState(motionState);
nargetdev 19:fabe9521b0a1 187 strip.show();
nargetdev 19:fabe9521b0a1 188 motionState = 0;
nargetdev 19:fabe9521b0a1 189 buttonServicePtr->updateButtonState(motionState);
nargetdev 19:fabe9521b0a1 190 red.write(0.0f);
nargetdev 19:fabe9521b0a1 191 green.write(0.0f);
nargetdev 19:fabe9521b0a1 192 blue.write(0.0f);
nargetdev 19:fabe9521b0a1 193 }
nargetdev 18:7c05ef6a639c 194 #endif
nargetdev 18:7c05ef6a639c 195 #ifdef NRFDK
nargetdev 19:fabe9521b0a1 196 motion.fall(&strip.show());
nargetdev 18:7c05ef6a639c 197 #endif
nargetdev 18:7c05ef6a639c 198 // red.write(0.0f);
nargetdev 18:7c05ef6a639c 199 // green.write(0.0f);
nargetdev 18:7c05ef6a639c 200 // blue.write(0.0f);
nargetdev 18:7c05ef6a639c 201 ble.waitForEvent();
nargetdev 9:1bd0f7a2ee71 202 }
nargetdev 8:5ed23e276c8a 203 }