Dreameforce 2013 giveaway demo

Dependencies:   C12832_lcd EthernetInterface LM75B MMA7660 libxively mbed-rtos mbed

Fork of xively-dreamforce by Ilya Dmitrichenko

Committer:
errordeveloper
Date:
Mon Nov 11 17:33:56 2013 +0000
Revision:
15:7443df31ff5b
Parent:
11:bdf601a405fc
Child:
19:ca595d80895b
Control RGB LED from a thread using pots, control fan using GPIO via an NPN transistor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
errordeveloper 15:7443df31ff5b 1 #include "mbed.h"
xively 7:0eff5db44b8b 2 #include "app_board_io.h"
errordeveloper 15:7443df31ff5b 3
errordeveloper 10:86ffba646df1 4 #include "C12832_lcd.h"
xively 7:0eff5db44b8b 5
errordeveloper 11:bdf601a405fc 6 extern C12832_LCD lcd;
xively 7:0eff5db44b8b 7
xively 7:0eff5db44b8b 8 extern "C" void lcd_printf( const char* fmt, ... )
xively 7:0eff5db44b8b 9 {
xively 7:0eff5db44b8b 10 char buffer[ 64 ];
xively 7:0eff5db44b8b 11
xively 7:0eff5db44b8b 12 va_list ap;
xively 7:0eff5db44b8b 13 va_start( ap, fmt );
xively 7:0eff5db44b8b 14 vsnprintf( buffer, 64, fmt, ap );
xively 7:0eff5db44b8b 15 va_end( ap );
xively 7:0eff5db44b8b 16
xively 7:0eff5db44b8b 17 lcd.cls();
xively 7:0eff5db44b8b 18 lcd.locate( 0, 3 );
xively 7:0eff5db44b8b 19 lcd.printf( buffer );
xively 7:0eff5db44b8b 20 //wait( 1.0 );
errordeveloper 15:7443df31ff5b 21 }
errordeveloper 15:7443df31ff5b 22
errordeveloper 15:7443df31ff5b 23 /**
errordeveloper 15:7443df31ff5b 24 * Demo for the RGB Led on the mbed Lab Board
errordeveloper 15:7443df31ff5b 25 * Pot 2 changes the color
errordeveloper 15:7443df31ff5b 26 * Pot 1 changes the value
errordeveloper 15:7443df31ff5b 27 * the saturation is set to maximum
errordeveloper 15:7443df31ff5b 28 *
errordeveloper 15:7443df31ff5b 29 * Based on:
errordeveloper 15:7443df31ff5b 30 * https://mbed.org/users/dreschpe/code/app-board-RGB2/
errordeveloper 15:7443df31ff5b 31 *
errordeveloper 15:7443df31ff5b 32 * Copyright (c) 2012 Peter Drescher - DC2PD
errordeveloper 15:7443df31ff5b 33 */
errordeveloper 15:7443df31ff5b 34
errordeveloper 15:7443df31ff5b 35 /* the led's are connected to vcc, so a PwmOut of 100% will shut off the led and 0% will let it shine ! */
errordeveloper 15:7443df31ff5b 36 PwmOut r (p23);
errordeveloper 15:7443df31ff5b 37 PwmOut g (p24);
errordeveloper 15:7443df31ff5b 38 PwmOut b (p25);
errordeveloper 15:7443df31ff5b 39
errordeveloper 15:7443df31ff5b 40 AnalogIn pot1(p19);
errordeveloper 15:7443df31ff5b 41 AnalogIn pot2(p20);
errordeveloper 15:7443df31ff5b 42
errordeveloper 15:7443df31ff5b 43 // function to convert hue , saturation and value to RGB
errordeveloper 15:7443df31ff5b 44 // see http://en.wikipedia.org/wiki/HSL_and_HSV
errordeveloper 15:7443df31ff5b 45 void hsv2rgb(float H,float S, float V)
errordeveloper 15:7443df31ff5b 46 {
errordeveloper 15:7443df31ff5b 47 float f,h,p,q,t;
errordeveloper 15:7443df31ff5b 48 int i;
errordeveloper 15:7443df31ff5b 49 if( S == 0.0) {
errordeveloper 15:7443df31ff5b 50 r = 1.0 - V; // invert pwm !
errordeveloper 15:7443df31ff5b 51 g = 1.0 - V;
errordeveloper 15:7443df31ff5b 52 b = 1.0 - V;
errordeveloper 15:7443df31ff5b 53 return;
errordeveloper 15:7443df31ff5b 54 }
errordeveloper 15:7443df31ff5b 55 if(H > 360.0) H = 0.0; // check values
errordeveloper 15:7443df31ff5b 56 if(S > 1.0) S = 1.0;
errordeveloper 15:7443df31ff5b 57 if(S < 0.0) S = 0.0;
errordeveloper 15:7443df31ff5b 58 if(V > 1.0) V = 1.0;
errordeveloper 15:7443df31ff5b 59 if(V < 0.0) V = 0.0;
errordeveloper 15:7443df31ff5b 60 h = H / 60.0;
errordeveloper 15:7443df31ff5b 61 i = (int) h;
errordeveloper 15:7443df31ff5b 62 f = h - i;
errordeveloper 15:7443df31ff5b 63 p = V * (1.0 - S);
errordeveloper 15:7443df31ff5b 64 q = V * (1.0 - (S * f));
errordeveloper 15:7443df31ff5b 65 t = V * (1.0 - (S * (1.0 - f)));
errordeveloper 15:7443df31ff5b 66
errordeveloper 15:7443df31ff5b 67 switch(i) {
errordeveloper 15:7443df31ff5b 68 case 0:
errordeveloper 15:7443df31ff5b 69 r = 1.0 - V; // invert pwm !
errordeveloper 15:7443df31ff5b 70 g = 1.0 - t;
errordeveloper 15:7443df31ff5b 71 b = 1.0 - p;
errordeveloper 15:7443df31ff5b 72 break;
errordeveloper 15:7443df31ff5b 73 case 1:
errordeveloper 15:7443df31ff5b 74 r = 1.0 - q;
errordeveloper 15:7443df31ff5b 75 g = 1.0 - V;
errordeveloper 15:7443df31ff5b 76 b = 1.0 - p;
errordeveloper 15:7443df31ff5b 77 break;
errordeveloper 15:7443df31ff5b 78 case 2:
errordeveloper 15:7443df31ff5b 79 r = 1.0 - p;
errordeveloper 15:7443df31ff5b 80 g = 1.0 - V;
errordeveloper 15:7443df31ff5b 81 b = 1.0 - t;
errordeveloper 15:7443df31ff5b 82 break;
errordeveloper 15:7443df31ff5b 83 case 3:
errordeveloper 15:7443df31ff5b 84 r = 1.0 - p;
errordeveloper 15:7443df31ff5b 85 g = 1.0 - q;
errordeveloper 15:7443df31ff5b 86 b = 1.0 - V;
errordeveloper 15:7443df31ff5b 87 break;
errordeveloper 15:7443df31ff5b 88 case 4:
errordeveloper 15:7443df31ff5b 89 r = 1.0 - t;
errordeveloper 15:7443df31ff5b 90 g = 1.0 - p;
errordeveloper 15:7443df31ff5b 91 b = 1.0 - V;
errordeveloper 15:7443df31ff5b 92 break;
errordeveloper 15:7443df31ff5b 93 case 5:
errordeveloper 15:7443df31ff5b 94 default:
errordeveloper 15:7443df31ff5b 95 r = 1.0 - V;
errordeveloper 15:7443df31ff5b 96 g = 1.0 - p;
errordeveloper 15:7443df31ff5b 97 b = 1.0 - q;
errordeveloper 15:7443df31ff5b 98 break;
errordeveloper 15:7443df31ff5b 99 }
errordeveloper 15:7443df31ff5b 100 }
errordeveloper 15:7443df31ff5b 101
errordeveloper 15:7443df31ff5b 102 void rgbpwm_thread(void const *args)
errordeveloper 15:7443df31ff5b 103 {
errordeveloper 15:7443df31ff5b 104 float h, s, v;
errordeveloper 15:7443df31ff5b 105
errordeveloper 15:7443df31ff5b 106 r.period(0.001); // set pwm period
errordeveloper 15:7443df31ff5b 107 s = 1.0;
errordeveloper 15:7443df31ff5b 108 while(true){
errordeveloper 15:7443df31ff5b 109
errordeveloper 15:7443df31ff5b 110 h = (pot1.read_u16() >> 6) * 0.3515625; // truncate to 10 bits and scale to 0 - 360;
errordeveloper 15:7443df31ff5b 111
errordeveloper 15:7443df31ff5b 112
errordeveloper 15:7443df31ff5b 113 v = (pot2.read_u16() >> 6) * 0.0009765624; // truncate and scale to 0 - 1;
errordeveloper 15:7443df31ff5b 114
errordeveloper 15:7443df31ff5b 115 hsv2rgb(h,s,v);
errordeveloper 15:7443df31ff5b 116
errordeveloper 15:7443df31ff5b 117 wait_ms(500);
errordeveloper 15:7443df31ff5b 118 }
xively 7:0eff5db44b8b 119 }