Light Show library for organic, calm, light display.
Dependencies: BLE_API mbed nRF51822
Fork of mbed_blinky by
light_show.cpp@25:d48f46d753fd, 2016-02-01 (annotated)
- Committer:
- nargetdev
- Date:
- Mon Feb 01 01:02:46 2016 +0000
- Revision:
- 25:d48f46d753fd
- Parent:
- 24:52319c0a14b8
- Child:
- 26:8bc9984c4600
alpha done refactoring to object oriented
Who changed what in which revision?
User | Revision | Line number | New 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 | 25:d48f46d753fd | 93 | uint8_t bitmask; |
nargetdev | 24:52319c0a14b8 | 94 | for (int j = 0; j < 3; j++) { |
nargetdev | 25:d48f46d753fd | 95 | float freq = (float) (bitmask = rand()&0xff) / 0xff; |
nargetdev | 25:d48f46d753fd | 96 | sine_waves[j].set_frequency(freq*PI); |
nargetdev | 25:d48f46d753fd | 97 | printf("freq: %f\t", freq); |
nargetdev | 25:d48f46d753fd | 98 | //srand(bitmask*j % 17 + 7); |
nargetdev | 25:d48f46d753fd | 99 | float wait = (float) (rand()&0xff) / 0xff; |
nargetdev | 25:d48f46d753fd | 100 | printf("wait_time: %f\n\r", wait); |
nargetdev | 25:d48f46d753fd | 101 | sine_waves[j].set_wait_time(wait); |
nargetdev | 24:52319c0a14b8 | 102 | } |
nargetdev | 25:d48f46d753fd | 103 | finished = 0x0; |
nargetdev | 24:52319c0a14b8 | 104 | printf("Params Initialized\r\n"); |
nargetdev | 25:d48f46d753fd | 105 | } |
nargetdev | 25:d48f46d753fd | 106 | |
nargetdev | 25:d48f46d753fd | 107 | #ifdef NO |
nargetdev | 25:d48f46d753fd | 108 | void show_params() |
nargetdev | 25:d48f46d753fd | 109 | pc.printf("WAIT:\t%f\t%f\t%f\n\r", WAIT[0], WAIT[1], WAIT[2]); |
nargetdev | 25:d48f46d753fd | 110 | pc.printf("SCALE:\t%f\t%f\t%f\n\r", SCALE[0], SCALE[1], SCALE[2]); |
nargetdev | 25:d48f46d753fd | 111 | #endif |