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
Child:
24:52319c0a14b8
uggh

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nargetdev 23:4bb74b53e112 1 #include "rgb_led.h"
nargetdev 23:4bb74b53e112 2
nargetdev 23:4bb74b53e112 3
nargetdev 23:4bb74b53e112 4 void Rgb::randomize_params()
nargetdev 23:4bb74b53e112 5 {
nargetdev 23:4bb74b53e112 6 float rand_seed = t.read();
nargetdev 23:4bb74b53e112 7 pc.printf("%f\n\r", rand_seed);
nargetdev 23:4bb74b53e112 8 int rand_int = t.read() * 7919;
nargetdev 23:4bb74b53e112 9
nargetdev 23:4bb74b53e112 10 time_t seconds = time(NULL);
nargetdev 23:4bb74b53e112 11 pc.printf("Time as seconds since January 1, 1970 = %d\n\r", seconds);
nargetdev 23:4bb74b53e112 12
nargetdev 23:4bb74b53e112 13 srand(rand_int);
nargetdev 23:4bb74b53e112 14 pc.printf("A random %d\r\n", rand() );
nargetdev 23:4bb74b53e112 15
nargetdev 23:4bb74b53e112 16 // generate random values in 0.0 - 1.0
nargetdev 23:4bb74b53e112 17 uint8_t blah;
nargetdev 23:4bb74b53e112 18 for (int j = 0; j < 3; j++){
nargetdev 23:4bb74b53e112 19 srand(rand_int+j);
nargetdev 23:4bb74b53e112 20 blah = rand();
nargetdev 23:4bb74b53e112 21 SCALE[j] = (float) blah;
nargetdev 23:4bb74b53e112 22 SCALE[j] /= (float) 0xff;
nargetdev 23:4bb74b53e112 23 SCALE[j] = SCALE[j]*HPI + 1;
nargetdev 23:4bb74b53e112 24 pc.printf("scale %d, %f\n\r", i, SCALE[i]);
nargetdev 23:4bb74b53e112 25 srand(blah+j % 17 + 7);
nargetdev 23:4bb74b53e112 26 blah = rand();
nargetdev 23:4bb74b53e112 27 WAIT[j] = (float) blah;
nargetdev 23:4bb74b53e112 28 WAIT[j] /= (float) 0xff;
nargetdev 23:4bb74b53e112 29 WAIT[j] *= HPI;
nargetdev 23:4bb74b53e112 30 pc.printf("wait %d, %f\n\r", i, WAIT[i]);
nargetdev 23:4bb74b53e112 31 }
nargetdev 23:4bb74b53e112 32 rgb = 0x0;
nargetdev 23:4bb74b53e112 33 printf("Params Initialized\r\n");
nargetdev 23:4bb74b53e112 34 }
nargetdev 23:4bb74b53e112 35
nargetdev 23:4bb74b53e112 36 void Rgb::update_rgb_values ()
nargetdev 23:4bb74b53e112 37 {
nargetdev 23:4bb74b53e112 38 // printf("Updating RGB values...\r\n");
nargetdev 23:4bb74b53e112 39 for (i=0; i<3; i++) {
nargetdev 23:4bb74b53e112 40 if (!(rgb & (0x1 << i) )) {
nargetdev 23:4bb74b53e112 41 if ( in > WAIT[i]) {
nargetdev 23:4bb74b53e112 42 // printf("%d, %d, result: %d\r\n", rgb, (0x1 << i), (!(rgb & (0x1 << i)) ) );
nargetdev 23:4bb74b53e112 43 rgb_c[i] = -cos((in - WAIT[i])*SCALE[i]) + 1;
nargetdev 23:4bb74b53e112 44 } else {
nargetdev 23:4bb74b53e112 45 rgb_c[i] = 0.0;
nargetdev 23:4bb74b53e112 46 }
nargetdev 23:4bb74b53e112 47 } else
nargetdev 23:4bb74b53e112 48 rgb_c[i] = 0.0;
nargetdev 23:4bb74b53e112 49 pc.printf("%f\t",rgb_c[i]);
nargetdev 23:4bb74b53e112 50 }
nargetdev 23:4bb74b53e112 51 pc.printf("\n\r");
nargetdev 23:4bb74b53e112 52 // exit(0);
nargetdev 23:4bb74b53e112 53 }
nargetdev 23:4bb74b53e112 54
nargetdev 23:4bb74b53e112 55 void Rgb::write_rgb ()
nargetdev 23:4bb74b53e112 56 {
nargetdev 23:4bb74b53e112 57 red.write(rgb_c[0]/2.0);
nargetdev 23:4bb74b53e112 58 green.write(rgb_c[1]/2.0);
nargetdev 23:4bb74b53e112 59 blue.write(rgb_c[2]/2.0);
nargetdev 23:4bb74b53e112 60 }
nargetdev 23:4bb74b53e112 61
nargetdev 23:4bb74b53e112 62 //public:
nargetdev 23:4bb74b53e112 63
nargetdev 23:4bb74b53e112 64 void Rgb::show()
nargetdev 23:4bb74b53e112 65 {
nargetdev 23:4bb74b53e112 66 pc.printf("show\r\n");
nargetdev 23:4bb74b53e112 67 // randomize the delay and scale values
nargetdev 23:4bb74b53e112 68 randomize_params();
nargetdev 23:4bb74b53e112 69 printf("params initialized:\n\r");
nargetdev 23:4bb74b53e112 70 printf("WAIT:\t%f\t%f\t%f\n\r", WAIT[0], WAIT[1], WAIT[2]);
nargetdev 23:4bb74b53e112 71 printf("SCALE:\t%f\t%f\t%f\n\r", SCALE[0], SCALE[1], SCALE[2]);
nargetdev 23:4bb74b53e112 72 for (in = 0; in < hysteresis || rgb != 0x7; in = in + INCREMENT) {
nargetdev 23:4bb74b53e112 73 #ifdef MKIT
nargetdev 23:4bb74b53e112 74 bool mov = motion;
nargetdev 23:4bb74b53e112 75 #else
nargetdev 23:4bb74b53e112 76 bool mov = !motion;
nargetdev 23:4bb74b53e112 77 #endif
nargetdev 23:4bb74b53e112 78 if (mov) {
nargetdev 23:4bb74b53e112 79 hysteresis = in + HYSTERESIS_QUANTITY;
nargetdev 23:4bb74b53e112 80 }
nargetdev 23:4bb74b53e112 81
nargetdev 23:4bb74b53e112 82 // update rgb
nargetdev 23:4bb74b53e112 83 update_rgb_values();
nargetdev 23:4bb74b53e112 84
nargetdev 23:4bb74b53e112 85 // write values
nargetdev 23:4bb74b53e112 86 write_rgb();
nargetdev 23:4bb74b53e112 87
nargetdev 23:4bb74b53e112 88
nargetdev 23:4bb74b53e112 89 if (in > hysteresis) {
nargetdev 23:4bb74b53e112 90 if (rgb_c[0] < 0.01)
nargetdev 23:4bb74b53e112 91 rgb |= 0x1;
nargetdev 23:4bb74b53e112 92 if (rgb_c[1] < 0.01)
nargetdev 23:4bb74b53e112 93 rgb |= 0x2;
nargetdev 23:4bb74b53e112 94 if (rgb_c[2] < 0.01)
nargetdev 23:4bb74b53e112 95 rgb |= 0x4;
nargetdev 23:4bb74b53e112 96 }
nargetdev 23:4bb74b53e112 97
nargetdev 23:4bb74b53e112 98 }
nargetdev 23:4bb74b53e112 99 }
nargetdev 23:4bb74b53e112 100 };
nargetdev 23:4bb74b53e112 101
nargetdev 23:4bb74b53e112 102
nargetdev 23:4bb74b53e112 103 void channel_check()
nargetdev 23:4bb74b53e112 104 {
nargetdev 23:4bb74b53e112 105
nargetdev 23:4bb74b53e112 106 red.write(1.0f);
nargetdev 23:4bb74b53e112 107 wait(.5);
nargetdev 23:4bb74b53e112 108 red.write(0.0f);
nargetdev 23:4bb74b53e112 109
nargetdev 23:4bb74b53e112 110 green.write(1.0f);
nargetdev 23:4bb74b53e112 111 wait(.5);
nargetdev 23:4bb74b53e112 112 green.write(0.0f);
nargetdev 23:4bb74b53e112 113
nargetdev 23:4bb74b53e112 114 blue.write(1.0f);
nargetdev 23:4bb74b53e112 115 wait(.5);
nargetdev 23:4bb74b53e112 116 blue.write(0.0f);
nargetdev 23:4bb74b53e112 117 }