Light Show library for organic, calm, light display.

Dependencies:   BLE_API mbed nRF51822

Fork of mbed_blinky by Mbed

Committer:
nargetdev
Date:
Mon Feb 01 02:45:51 2016 +0000
Revision:
27:a55dde8334f3
Parent:
26:8bc9984c4600
light_show library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nargetdev 24:52319c0a14b8 1 #include "light_show.h"
nargetdev 24:52319c0a14b8 2
nargetdev 25:d48f46d753fd 3
nargetdev 25:d48f46d753fd 4 extern InterruptIn motion;
nargetdev 25:d48f46d753fd 5
nargetdev 25:d48f46d753fd 6 LightShow::LightShow (Rgb* strip):
nargetdev 25:d48f46d753fd 7 strip(strip), hysteresis(HYSTERESIS_QUANTITY) {
nargetdev 25:d48f46d753fd 8 // Set RTC time to Wed, 28 Oct 2009 11:35:37
nargetdev 25:d48f46d753fd 9 set_time(1256729737);
nargetdev 25:d48f46d753fd 10 t.start();
nargetdev 24:52319c0a14b8 11 }
nargetdev 24:52319c0a14b8 12
nargetdev 25:d48f46d753fd 13 void LightShow::show()
nargetdev 25:d48f46d753fd 14 {
nargetdev 25:d48f46d753fd 15 printf("show\r\n");
nargetdev 25:d48f46d753fd 16 // randomize the delay and scale values
nargetdev 25:d48f46d753fd 17 randomize_params();
nargetdev 25:d48f46d753fd 18 printf("params initialized:\n\r");
nargetdev 25:d48f46d753fd 19
nargetdev 25:d48f46d753fd 20 for (time = 0; time < hysteresis || finished != 0x7; time = time + INCREMENT) {
nargetdev 25:d48f46d753fd 21 #ifdef MKIT
nargetdev 25:d48f46d753fd 22 bool mov = motion;
nargetdev 25:d48f46d753fd 23 #else
nargetdev 25:d48f46d753fd 24 bool mov = !motion;
nargetdev 25:d48f46d753fd 25 #endif
nargetdev 25:d48f46d753fd 26 if (mov) {
nargetdev 25:d48f46d753fd 27 hysteresis = time + HYSTERESIS_QUANTITY;
nargetdev 25:d48f46d753fd 28 }
nargetdev 25:d48f46d753fd 29
nargetdev 25:d48f46d753fd 30 // update rgb
nargetdev 25:d48f46d753fd 31 update_rgb();
nargetdev 25:d48f46d753fd 32
nargetdev 25:d48f46d753fd 33 printf("t:%f\t", time);
nargetdev 25:d48f46d753fd 34
nargetdev 25:d48f46d753fd 35 if (time > hysteresis) {
nargetdev 25:d48f46d753fd 36 if (rgb_c[0] < 0.01)
nargetdev 25:d48f46d753fd 37 finished |= 0x1;
nargetdev 25:d48f46d753fd 38 if (rgb_c[1] < 0.01)
nargetdev 25:d48f46d753fd 39 finished |= 0x2;
nargetdev 25:d48f46d753fd 40 if (rgb_c[2] < 0.01)
nargetdev 25:d48f46d753fd 41 finished |= 0x4;
nargetdev 25:d48f46d753fd 42 }
nargetdev 25:d48f46d753fd 43 }
nargetdev 25:d48f46d753fd 44 }
nargetdev 25:d48f46d753fd 45
nargetdev 25:d48f46d753fd 46
nargetdev 25:d48f46d753fd 47 void LightShow::simple_show()
nargetdev 25:d48f46d753fd 48 {
nargetdev 25:d48f46d753fd 49 finished = 0;
nargetdev 25:d48f46d753fd 50 printf("simple_show()\r\n");
nargetdev 25:d48f46d753fd 51 // randomize the delay and scale values
nargetdev 25:d48f46d753fd 52 randomize_params();
nargetdev 25:d48f46d753fd 53 printf("params initialized:\n\r");
nargetdev 25:d48f46d753fd 54
nargetdev 25:d48f46d753fd 55 for (time = 0; time < 10*PI; time = time + INCREMENT) {
nargetdev 25:d48f46d753fd 56 printf("t:%f\t", time);
nargetdev 25:d48f46d753fd 57
nargetdev 25:d48f46d753fd 58 // update rgb
nargetdev 25:d48f46d753fd 59 update_rgb();
nargetdev 25:d48f46d753fd 60 }
nargetdev 25:d48f46d753fd 61 strip->quiet();
nargetdev 25:d48f46d753fd 62 }
nargetdev 25:d48f46d753fd 63
nargetdev 25:d48f46d753fd 64 void LightShow::update_rgb()
nargetdev 25:d48f46d753fd 65 {
nargetdev 25:d48f46d753fd 66 // printf("\n\rupdate_rgb()\n\r");
nargetdev 25:d48f46d753fd 67 for (int i = 0; i < 3; i++) {
nargetdev 25:d48f46d753fd 68 if (finished & (0x1 << i) ) {
nargetdev 25:d48f46d753fd 69 printf("FINISHED\t");
nargetdev 25:d48f46d753fd 70 strip->write(i, 0.0f);
nargetdev 25:d48f46d753fd 71 } else {
nargetdev 25:d48f46d753fd 72 strip->write(i, rgb_c[i] = sine_waves[i].get_y(time));
nargetdev 25:d48f46d753fd 73 printf("%f\t", rgb_c[i]);
nargetdev 25:d48f46d753fd 74 }
nargetdev 25:d48f46d753fd 75 }
nargetdev 25:d48f46d753fd 76 printf("\n\r");
nargetdev 25:d48f46d753fd 77 }
nargetdev 25:d48f46d753fd 78
nargetdev 25:d48f46d753fd 79
nargetdev 25:d48f46d753fd 80
nargetdev 25:d48f46d753fd 81 void LightShow::randomize_params()
nargetdev 24:52319c0a14b8 82 {
nargetdev 24:52319c0a14b8 83 float rand_seed = t.read();
nargetdev 25:d48f46d753fd 84 pc.printf("float: %f\n\r", rand_seed);
nargetdev 25:d48f46d753fd 85
nargetdev 25:d48f46d753fd 86 int rand_int = (int) t.read() * 7919;
nargetdev 25:d48f46d753fd 87 pc.printf("int: %d\n\r", rand_int);
nargetdev 24:52319c0a14b8 88
nargetdev 24:52319c0a14b8 89 srand(rand_int);
nargetdev 25:d48f46d753fd 90 pc.printf("A random %d\r\n", rand() );
nargetdev 24:52319c0a14b8 91
nargetdev 25:d48f46d753fd 92 // generate random values time 0.0 - 1.0
nargetdev 24:52319c0a14b8 93 for (int j = 0; j < 3; j++) {
nargetdev 26:8bc9984c4600 94 float freq = (float) (rand()&0xff) / 0xff;
nargetdev 26:8bc9984c4600 95 sine_waves[j].set_frequency(freq*PI + HPI);
nargetdev 25:d48f46d753fd 96 printf("freq: %f\t", freq);
nargetdev 25:d48f46d753fd 97 //srand(bitmask*j % 17 + 7);
nargetdev 25:d48f46d753fd 98 float wait = (float) (rand()&0xff) / 0xff;
nargetdev 25:d48f46d753fd 99 printf("wait_time: %f\n\r", wait);
nargetdev 25:d48f46d753fd 100 sine_waves[j].set_wait_time(wait);
nargetdev 24:52319c0a14b8 101 }
nargetdev 25:d48f46d753fd 102 finished = 0x0;
nargetdev 24:52319c0a14b8 103 printf("Params Initialized\r\n");
nargetdev 25:d48f46d753fd 104 }
nargetdev 25:d48f46d753fd 105
nargetdev 25:d48f46d753fd 106 #ifdef NO
nargetdev 25:d48f46d753fd 107 void show_params()
nargetdev 25:d48f46d753fd 108 pc.printf("WAIT:\t%f\t%f\t%f\n\r", WAIT[0], WAIT[1], WAIT[2]);
nargetdev 25:d48f46d753fd 109 pc.printf("SCALE:\t%f\t%f\t%f\n\r", SCALE[0], SCALE[1], SCALE[2]);
nargetdev 25:d48f46d753fd 110 #endif