Let the on board RGB led run thru the color circle

Dependencies:   mbed

Test program for LPC 1549 and LPC 812 board. It use the on board RGB led to scroll thru the colors.

main.cpp

Committer:
dreschpe
Date:
2015-10-17
Revision:
1:c92fa914546d
Parent:
0:5a281c0ca6ae

File content as of revision 1:c92fa914546d:

#include "mbed.h"


/* the led's are connected to vcc, so a PwmOut of 100% will shut off the led and 0% will let it shine ! */
PwmOut r (LED_RED);
PwmOut g (LED_GREEN);
PwmOut b (LED_BLUE);

// function to convert hue , saturation and  value to RGB
// see http://en.wikipedia.org/wiki/HSL_and_HSV
void hsv2rgb(float H,float S, float V)
{
    float f,h,p,q,t;
    int i;
    if( S == 0.0) {
        r = 1.0 - V;  // invert pwm !
        g = 1.0 - V;
        b = 1.0 - V;
        return;
    }
    if(H > 360.0) H = 0.0;   // check values
    if(S > 1.0) S = 1.0; 
    if(S < 0.0) S = 0.0;
    if(V > 1.0) V = 1.0;
    if(V < 0.0) V = 0.0;
    h = H / 60.0;
    i = (int) h;
    f = h - i;
    p = V * (1.0 - S);
    q = V * (1.0 - (S * f));
    t = V * (1.0 - (S * (1.0 - f)));

    switch(i) {
        case 0:
            r = 1.0 - V;  // invert pwm !
            g = 1.0 - t;
            b = 1.0 - p;
            break;
        case 1:
            r = 1.0 - q;
            g = 1.0 - V;
            b = 1.0 - p;
            break;
        case 2:
            r = 1.0 - p;
            g = 1.0 - V;
            b = 1.0 - t;
            break;
        case 3:
            r = 1.0 - p;
            g = 1.0 - q;
            b = 1.0 - V;
            break;
        case 4:
            r = 1.0 - t;
            g = 1.0 - p;
            b = 1.0 - V;
            break;
        case 5:
        default:
            r = 1.0 - V;
            g = 1.0 - p;
            b = 1.0 - q;
            break;
    }
}



int main() {
    float h;       //  hue 
    float s,v;   // saturation and  value;
    r.period(0.001);  // set pwm period
    s = 1.0;
    v = 1.0;
    h = 0.0;    
    for(;;){   // run thru colors 
        hsv2rgb(h,s,v);
        wait_ms(50);
        if(h<360) h++;
        else h = 0;
    }
}