Dreameforce 2013 giveaway demo
Dependencies: C12832_lcd EthernetInterface LM75B MMA7660 libxively mbed-rtos mbed
Fork of xively-dreamforce by
Revision 19:ca595d80895b, committed 2013-11-11
- Comitter:
- errordeveloper
- Date:
- Mon Nov 11 18:41:18 2013 +0000
- Parent:
- 18:07869e8bddb2
- Commit message:
- Control RGB led from Xively in simple way, but the colours are odd, but
Changed in this revision
--- a/app_board_io.cpp Mon Nov 11 18:23:45 2013 +0000 +++ b/app_board_io.cpp Mon Nov 11 18:41:18 2013 +0000 @@ -18,102 +18,4 @@ lcd.locate( 0, 3 ); lcd.printf( buffer ); //wait( 1.0 ); -} - -/** - * Demo for the RGB Led on the mbed Lab Board - * Pot 2 changes the color - * Pot 1 changes the value - * the saturation is set to maximum - * - * Based on: - * https://mbed.org/users/dreschpe/code/app-board-RGB2/ - * - * Copyright (c) 2012 Peter Drescher - DC2PD - */ - -/* 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 (p23); -PwmOut g (p24); -PwmOut b (p25); - -AnalogIn pot1(p19); -AnalogIn pot2(p20); - -// 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; - } -} - -void rgbpwm_thread(void const *args) -{ - float h, s, v; - - r.period(0.001); // set pwm period - s = 1.0; - while(true){ - - h = (pot1.read_u16() >> 6) * 0.3515625; // truncate to 10 bits and scale to 0 - 360; - - - v = (pot2.read_u16() >> 6) * 0.0009765624; // truncate and scale to 0 - 1; - - hsv2rgb(h,s,v); - - wait_ms(500); - } } \ No newline at end of file
--- a/app_board_io.h Mon Nov 11 18:23:45 2013 +0000 +++ b/app_board_io.h Mon Nov 11 18:41:18 2013 +0000 @@ -4,6 +4,4 @@ #ifdef __cplusplus extern "C" #endif -void lcd_printf( const char* fmt, ... ); - -void rgbpwm_thread(void const *args); \ No newline at end of file +void lcd_printf( const char* fmt, ... ); \ No newline at end of file
--- a/main.cpp Mon Nov 11 18:23:45 2013 +0000 +++ b/main.cpp Mon Nov 11 18:41:18 2013 +0000 @@ -18,15 +18,17 @@ PwmOut progress_led(LED1); C12832_LCD lcd; +DigitalOut r (p23); // blue? +DigitalOut g (p24); // purple? +DigitalOut b (p25); // yellow? + #include "logo.h" int main() { lcd_print_xively_logo(); EthernetInterface eth; - - Thread _rgbpwm(rgbpwm_thread); - + int s = eth.init(); //Use DHCP if( s != NULL ) @@ -108,21 +110,22 @@ case 0: fan = 0; break; case 1: fan = 1; break; } + if( strcmp( xi_value_pointer_str( led_ctl ), "RED" ) == 0 ) { - + r = 1; g = 0; b = 0; } else if( strcmp( xi_value_pointer_str( led_ctl ), "GREEN" ) == 0 ) { - + r = 0; g = 1; b = 0; } else if( strcmp( xi_value_pointer_str( led_ctl ), "BLUE" ) == 0 ) { - + r = 0; g = 0; b = 1; } else /* OFF */ { - + r = 0; g = 0; b = 0; } wait( 5.0 );