set led to common anode

Dependencies:   C12832_lcd EthernetInterface LM75B MMA7660 libxively mbed-rtos mbed

Fork of xively-dreamforce by Ilya Dmitrichenko

Files at this revision

API Documentation at this revision

Comitter:
errordeveloper
Date:
Mon Nov 11 18:41:18 2013 +0000
Parent:
18:07869e8bddb2
Child:
20:4bb2758223fb
Commit message:
Control RGB led from Xively in simple way, but the colours are odd, but

Changed in this revision

app_board_io.cpp Show annotated file Show diff for this revision Revisions of this file
app_board_io.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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 );