example of Grove - Chainable RGB LED

Dependencies:   Chainable_RGB_LED mbed USBDevice

Files at this revision

API Documentation at this revision

Comitter:
yihui
Date:
Wed Oct 16 05:39:07 2013 +0000
Parent:
0:71564ae5e242
Commit message:
changing color with temperature

Changed in this revision

USBDevice.lib 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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBDevice.lib	Wed Oct 16 05:39:07 2013 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/USBDevice/#d495202c90f4
--- a/main.cpp	Tue Oct 15 09:42:36 2013 +0000
+++ b/main.cpp	Wed Oct 16 05:39:07 2013 +0000
@@ -1,19 +1,73 @@
 #include "mbed.h"
 #include "ChainableLED.h"
 
-DigitalOut led(LED4);
+//#define DEBUG
+
+#ifdef DEBUG
+
+#include "USBSerial.h"
+#define LOG(args...)        pc.printf(args)
+USBSerial pc;
+
+#else
+
+#define LOG(args...)
+
+#endif  // DEBUG
+
+
 // ChainableLED(clk, data, number_of_leds)
 ChainableLED color_led(P1_14, P1_13, 1);
+AnalogIn thermistor(P0_12);
+
+float get_temperature()
+{
+    unsigned int a, beta = 3975;
+    float temperature, resistance;
+    
+    a = thermistor.read_u16();
+    
+    /* Calculate the resistance of the thermistor from analog votage read. */
+    resistance = (float) 10000.0 * ((65536.0 / a) - 1);
+    
+    /* Convert the resistance to temperature using Steinhart's Hart equation */
+    temperature=(1/((log(resistance/10000.0)/beta) + (1.0/298.15)))-273.15; 
+    
+    return temperature;
+}
+
+int temperature2color(float t)
+{
+    float low  = 26;
+    float high = 30;
+    int   min = 0;
+    int   max = 255;
+    int   color;
+    
+    if (t < low) {
+        color = min;
+    } else if (t > high) {
+        color = max;
+    } else {
+        color = min + (max - min) * ((t - min) / (max - min));
+    }
+    
+    return color;
+}
+    
 
 int main() {
-    uint8_t value = 0;
-    
+  
     while(1) {
-        value += 10;
+        float t = get_temperature();
+        uint8_t color = temperature2color(t);
+        
+        LOG("Temperature: %f\r\n", t);
+        LOG("Color: %d\r\n", color);
+        
         // ChainableLED.setColorRGB(index_of_led, red, green, blue)
-        color_led.setColorRGB(0, value, 0xFF - value, 0);
-        led = !led;
-        wait(0.4);
+        color_led.setColorRGB(0, color, 0xFF - color, 0);
+        wait(0.05);
     }
 }