Nathan Argetsinger / Mbed 2 deprecated FIR_SENSOR

Dependencies:   BLE_API mbed nRF51822

Fork of mbed_blinky by Mbed

rgb_led.cpp

Committer:
nargetdev
Date:
2016-01-29
Revision:
23:4bb74b53e112
Child:
24:52319c0a14b8

File content as of revision 23:4bb74b53e112:

#include "rgb_led.h"


void Rgb::randomize_params()
{
    float rand_seed = t.read();
    pc.printf("%f\n\r", rand_seed);
    int rand_int = t.read() * 7919;

    time_t seconds = time(NULL);
    pc.printf("Time as seconds since January 1, 1970 = %d\n\r", seconds);

    srand(rand_int);
    pc.printf("A random %d\r\n", rand() );

    // generate random values in 0.0 - 1.0
    uint8_t blah;
    for (int j = 0; j < 3; j++){
        srand(rand_int+j);
        blah = rand();
        SCALE[j] = (float) blah;
        SCALE[j] /= (float) 0xff;
        SCALE[j] = SCALE[j]*HPI + 1;
        pc.printf("scale %d, %f\n\r", i, SCALE[i]);
        srand(blah+j % 17 + 7);
        blah = rand();
        WAIT[j] = (float) blah;
        WAIT[j] /= (float) 0xff;
        WAIT[j] *= HPI;
        pc.printf("wait %d, %f\n\r", i, WAIT[i]);
    }
    rgb = 0x0;
    printf("Params Initialized\r\n");
}

void Rgb::update_rgb_values ()
{
//        printf("Updating RGB values...\r\n");
    for (i=0; i<3; i++) {
        if (!(rgb & (0x1 << i) )) {
            if ( in > WAIT[i]) {
//                    printf("%d, %d, result: %d\r\n", rgb, (0x1 << i), (!(rgb & (0x1 << i)) ) );
                rgb_c[i] = -cos((in - WAIT[i])*SCALE[i]) + 1;
            } else {
                rgb_c[i] = 0.0;
            }
        } else
            rgb_c[i] = 0.0;
        pc.printf("%f\t",rgb_c[i]);
    }
    pc.printf("\n\r");
//        exit(0);
}

void Rgb::write_rgb ()
{
    red.write(rgb_c[0]/2.0);
    green.write(rgb_c[1]/2.0);
    blue.write(rgb_c[2]/2.0);
}

//public:

void Rgb::show()
{
    pc.printf("show\r\n");
    // randomize the delay and scale values
    randomize_params();
    printf("params initialized:\n\r");
    printf("WAIT:\t%f\t%f\t%f\n\r", WAIT[0], WAIT[1], WAIT[2]);
    printf("SCALE:\t%f\t%f\t%f\n\r", SCALE[0], SCALE[1], SCALE[2]);
    for (in = 0; in < hysteresis || rgb != 0x7; in = in + INCREMENT) {
#ifdef MKIT
        bool mov = motion;
#else
        bool mov = !motion;
#endif
        if (mov) {
            hysteresis = in + HYSTERESIS_QUANTITY;
        }

        // update rgb
        update_rgb_values();

        // write values
        write_rgb();


        if (in > hysteresis) {
            if (rgb_c[0] < 0.01)
                rgb |= 0x1;
            if (rgb_c[1] < 0.01)
                rgb |= 0x2;
            if (rgb_c[2] < 0.01)
                rgb |= 0x4;
        }

    }
}
};


void channel_check()
{

    red.write(1.0f);
    wait(.5);
    red.write(0.0f);

    green.write(1.0f);
    wait(.5);
    green.write(0.0f);

    blue.write(1.0f);
    wait(.5);
    blue.write(0.0f);
}