Let the on board RGB led run thru the color circle
Test program for LPC 1549 and LPC 812 board. It use the on board RGB led to scroll thru the colors.
Diff: main.cpp
- Revision:
- 0:5a281c0ca6ae
- Child:
- 1:c92fa914546d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Oct 17 16:23:22 2015 +0000 @@ -0,0 +1,83 @@ +#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 (LED1); +PwmOut g (LED2); +PwmOut b (LED3); + +// 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; + } +}