Light Show library for organic, calm, light display.

Dependencies:   BLE_API mbed nRF51822

Fork of mbed_blinky by Mbed

Committer:
nargetdev
Date:
Sun Oct 11 03:12:07 2015 +0000
Revision:
10:fc61583e9e8f
Parent:
9:1bd0f7a2ee71
Child:
11:2d3cc5459d5b
Fade out smooth -- KG

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dan 0:7dec7e9ac085 1 #include "mbed.h"
nargetdev 8:5ed23e276c8a 2
nargetdev 10:fc61583e9e8f 3
nargetdev 10:fc61583e9e8f 4 #define HYSTERESIS_QUANTITY 1.57079632679
nargetdev 9:1bd0f7a2ee71 5 #define calibrationTime 10
nargetdev 9:1bd0f7a2ee71 6 unsigned long seed = 47;
dan 0:7dec7e9ac085 7
nargetdev 9:1bd0f7a2ee71 8 typedef unsigned char byte;
nargetdev 9:1bd0f7a2ee71 9 typedef unsigned int uint;
nargetdev 9:1bd0f7a2ee71 10
nargetdev 9:1bd0f7a2ee71 11 PwmOut red(p18);
nargetdev 9:1bd0f7a2ee71 12 PwmOut green(p19);
nargetdev 9:1bd0f7a2ee71 13 PwmOut blue(p20);
nargetdev 9:1bd0f7a2ee71 14 DigitalIn motion(p1);
nargetdev 9:1bd0f7a2ee71 15
nargetdev 9:1bd0f7a2ee71 16 Serial pc(USBTX, USBRX); // tx, rx
nargetdev 9:1bd0f7a2ee71 17
nargetdev 9:1bd0f7a2ee71 18 unsigned int hash(unsigned int x) {
nargetdev 9:1bd0f7a2ee71 19 x = ((x >> 16) ^ x) * 0x45d9f3b;
nargetdev 9:1bd0f7a2ee71 20 x = ((x >> 16) ^ x) * 0x45d9f3b;
nargetdev 9:1bd0f7a2ee71 21 x = ((x >> 16) ^ x);
nargetdev 9:1bd0f7a2ee71 22 seed*=2;
nargetdev 9:1bd0f7a2ee71 23 seed+=17;
nargetdev 9:1bd0f7a2ee71 24 return x%100;
dan 0:7dec7e9ac085 25 }
nargetdev 8:5ed23e276c8a 26
nargetdev 9:1bd0f7a2ee71 27 void identify(unsigned int m){
nargetdev 9:1bd0f7a2ee71 28 unsigned int hashable;
nargetdev 9:1bd0f7a2ee71 29 float write_me;
nargetdev 9:1bd0f7a2ee71 30
nargetdev 9:1bd0f7a2ee71 31 hashable = hash(m + seed);
nargetdev 9:1bd0f7a2ee71 32 write_me = hashable/100.0;
nargetdev 9:1bd0f7a2ee71 33 red.write(write_me);
nargetdev 9:1bd0f7a2ee71 34 pc.printf("r, g, b: %f\t", write_me);
nargetdev 9:1bd0f7a2ee71 35
nargetdev 9:1bd0f7a2ee71 36 hashable = hash(m + seed);
nargetdev 9:1bd0f7a2ee71 37 write_me = hashable/100.0;
nargetdev 9:1bd0f7a2ee71 38 green.write(write_me);
nargetdev 9:1bd0f7a2ee71 39 pc.printf("%f\t", write_me);
nargetdev 9:1bd0f7a2ee71 40
nargetdev 9:1bd0f7a2ee71 41 hashable = hash(m + seed);
nargetdev 9:1bd0f7a2ee71 42 write_me = hashable/100.0;
nargetdev 9:1bd0f7a2ee71 43 blue.write(write_me);
nargetdev 9:1bd0f7a2ee71 44 pc.printf("%f\n", write_me);
nargetdev 8:5ed23e276c8a 45 }
nargetdev 8:5ed23e276c8a 46
nargetdev 9:1bd0f7a2ee71 47 void calibrate(){
nargetdev 9:1bd0f7a2ee71 48
nargetdev 9:1bd0f7a2ee71 49 //give the sensor some time to calibrate
nargetdev 9:1bd0f7a2ee71 50 pc.printf("calibrating sensor\n");
nargetdev 9:1bd0f7a2ee71 51 for(int i = 0; i < calibrationTime; i++){
nargetdev 9:1bd0f7a2ee71 52 pc.printf(".");
nargetdev 9:1bd0f7a2ee71 53 identify(calibrationTime);
nargetdev 9:1bd0f7a2ee71 54 wait(.25);
nargetdev 9:1bd0f7a2ee71 55 }
nargetdev 9:1bd0f7a2ee71 56 pc.printf(" done\n");
nargetdev 9:1bd0f7a2ee71 57 pc.printf("SENSOR ACTIVE\n");
nargetdev 9:1bd0f7a2ee71 58 wait(0.05);
nargetdev 9:1bd0f7a2ee71 59 }
nargetdev 9:1bd0f7a2ee71 60
nargetdev 9:1bd0f7a2ee71 61 void show(){
nargetdev 9:1bd0f7a2ee71 62 float in, rout, bout, gout;
nargetdev 9:1bd0f7a2ee71 63 bool tit = true;
nargetdev 10:fc61583e9e8f 64
nargetdev 10:fc61583e9e8f 65 unsigned int rgb = 0x0;
nargetdev 9:1bd0f7a2ee71 66 pc.printf("showing...\n");
nargetdev 8:5ed23e276c8a 67
nargetdev 9:1bd0f7a2ee71 68 float hysteresis = 0;
nargetdev 9:1bd0f7a2ee71 69
nargetdev 10:fc61583e9e8f 70 for (in = -1.571; in < hysteresis || (rgb ^ 0x7); in = in + 0.00628)
nargetdev 9:1bd0f7a2ee71 71 {
nargetdev 9:1bd0f7a2ee71 72 unsigned int i = motion;
nargetdev 9:1bd0f7a2ee71 73 if (motion){
nargetdev 10:fc61583e9e8f 74 hysteresis = in + HYSTERESIS_QUANTITY;
nargetdev 9:1bd0f7a2ee71 75 pc.printf("\n-----\nextra_hysteresis\n-----\n");
nargetdev 8:5ed23e276c8a 76 }
nargetdev 9:1bd0f7a2ee71 77 tit = !tit;
nargetdev 10:fc61583e9e8f 78 if (!(rgb & 0x1))
nargetdev 10:fc61583e9e8f 79 rout = sin(in) + 1.0;
nargetdev 10:fc61583e9e8f 80 else
nargetdev 10:fc61583e9e8f 81 rout = 0.0f;
nargetdev 10:fc61583e9e8f 82 if (!(rgb & 0x2))
nargetdev 10:fc61583e9e8f 83 bout = sin(in + 1.3*(in+1.571) ) + 1.0;
nargetdev 10:fc61583e9e8f 84 else
nargetdev 10:fc61583e9e8f 85 bout = 0.0f;
nargetdev 10:fc61583e9e8f 86 if (!(rgb & 0x4))
nargetdev 10:fc61583e9e8f 87 gout = sin(in + 4.2*(in+1.571) ) + 1.0;
nargetdev 10:fc61583e9e8f 88 else
nargetdev 10:fc61583e9e8f 89 gout = 0.0f;
nargetdev 10:fc61583e9e8f 90
nargetdev 9:1bd0f7a2ee71 91 if (tit)
nargetdev 9:1bd0f7a2ee71 92 pc.printf("%f\t%f\t%f\n",rout,bout,gout);
nargetdev 9:1bd0f7a2ee71 93
nargetdev 10:fc61583e9e8f 94 red.write(rout/2.0);
nargetdev 10:fc61583e9e8f 95 green.write(gout/2.0);
nargetdev 10:fc61583e9e8f 96 blue.write(bout/2.0);
nargetdev 10:fc61583e9e8f 97
nargetdev 10:fc61583e9e8f 98 if (in > hysteresis){
nargetdev 10:fc61583e9e8f 99 if (rout < 0.01)
nargetdev 10:fc61583e9e8f 100 rgb |= 0x1;
nargetdev 10:fc61583e9e8f 101 if (gout < 0.01)
nargetdev 10:fc61583e9e8f 102 rgb |= 0x2;
nargetdev 10:fc61583e9e8f 103 if (bout < 0.01)
nargetdev 10:fc61583e9e8f 104 rgb |= 0x4;
nargetdev 10:fc61583e9e8f 105 }
nargetdev 9:1bd0f7a2ee71 106 wait(.005);
nargetdev 9:1bd0f7a2ee71 107 }
nargetdev 8:5ed23e276c8a 108 }
nargetdev 9:1bd0f7a2ee71 109
nargetdev 9:1bd0f7a2ee71 110 int main() {
nargetdev 9:1bd0f7a2ee71 111 red.period(0.001f);
nargetdev 9:1bd0f7a2ee71 112 green.period(0.001f);
nargetdev 9:1bd0f7a2ee71 113 blue.period(0.001f);
nargetdev 9:1bd0f7a2ee71 114
nargetdev 9:1bd0f7a2ee71 115 pc.printf("Hello World!\n");
nargetdev 9:1bd0f7a2ee71 116 // Calibrate FIR and identify.
nargetdev 9:1bd0f7a2ee71 117 calibrate();
nargetdev 9:1bd0f7a2ee71 118
nargetdev 9:1bd0f7a2ee71 119 // Clear the lights. Wait for victim.
nargetdev 9:1bd0f7a2ee71 120 red.write(0.00f);
nargetdev 9:1bd0f7a2ee71 121 green.write(0.00f);
nargetdev 9:1bd0f7a2ee71 122 blue.write(0.00f);
nargetdev 9:1bd0f7a2ee71 123
nargetdev 9:1bd0f7a2ee71 124 while(1){
nargetdev 9:1bd0f7a2ee71 125 unsigned int i = motion;
nargetdev 9:1bd0f7a2ee71 126 if (i){
nargetdev 9:1bd0f7a2ee71 127 pc.printf("Motion detected.\n");
nargetdev 9:1bd0f7a2ee71 128 show();
nargetdev 9:1bd0f7a2ee71 129 pc.printf("End show.\n");
nargetdev 9:1bd0f7a2ee71 130 }
nargetdev 9:1bd0f7a2ee71 131 else
nargetdev 9:1bd0f7a2ee71 132 red.write(0.0f);
nargetdev 9:1bd0f7a2ee71 133 green.write(0.0f);
nargetdev 9:1bd0f7a2ee71 134 blue.write(0.0f);
nargetdev 9:1bd0f7a2ee71 135 }
nargetdev 8:5ed23e276c8a 136 }