Dreameforce 2013 giveaway demo
Dependencies: C12832_lcd EthernetInterface LM75B MMA7660 libxively mbed-rtos mbed
Fork of xively-dreamforce by
app_board_io.cpp@15:7443df31ff5b, 2013-11-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |