Data logger: Sensors -> Barometer & temperature (BMP180), Humidity & temp. (RHT03), Sunshine (Cds): Display -> 20 chracters x 4 lines: Strage -> EEPROM (AT24C1024): Special functions -> Enter sleep mode to save current, reading the logging data via serial line
Dependencies: AT24C1024 BMP180 M41T62 RHT03 TextLCD WakeUp mbed
Fork of LPC1114_barometer_with_data_logging by
Please refer following Notebook.
http://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-data-logger/
Diff: main.cpp
- Revision:
- 8:f6aa5561f219
- Parent:
- 7:d3b49f1d9f76
- Child:
- 9:ce80da60884a
--- a/main.cpp Fri Jun 13 07:41:55 2014 +0000 +++ b/main.cpp Fri Jun 13 07:45:15 2014 +0000 @@ -16,35 +16,125 @@ */ #include "mbed.h" -#define LED_TEST 0 // =1 -> LED test, =0 -> SW test +#define DEBUG 1 // 1=Debug, 0=Normal + +#define VREF_VOLT 2.482 // TA76431F Vref real measued data +#define R_FIX 9930 // 10K ohm <- real measued data +#define VOL_OFFSET 4 // Offset data ,= real measured data +#define CDS_TBL_SIZE 13 DigitalOut myled0(dp28); // LED for Debug DigitalOut myled1(dp14); // Indicate state transition +DigitalOut analog_pwr(dp6); // VCC for analog interface (vol, cds and vref) +DigitalOut vref_pwr(dp4); // VCC for Vref DigitalIn sw_chng(dp1,PullUp);// SW for select DigitalIn sw_mode(dp2,PullUp);// SW for Mode change +AnalogIn cds(dp11); // Input / CDS data +AnalogIn vref(dp9); // Input / Bandgap 2.5V +AnalogIn vol(dp10); // Input / contrast volume +Serial pc(dp16,dp15); + +typedef enum {CDS = 0, VREF, VOL} ADC_Select; + +float av_cds, av_vref, av_vol, cal_vcc; +float r_cds, lux; +uint32_t nor_vol; + +// Cds GL5528 (Dark Resistance 1 Mohm type) SENBA OPTICAL & ELECTRONIC CO.,LTD. +// Table value referrence: http://homepage3.nifty.com/skomo/f35/hp35_20.htm +const float lux_cds[CDS_TBL_SIZE][2] = + {{50,21194},{100,8356},{200,3294},{400,1299},{800,512},{1600,202},{3200,79.6},{6400,31.4}, + {12800,12.4},{25600,4.88},{51200,1.92},{102400,0.758},{409600,0.118}}; + +void adc_normalize( ADC_Select n ){ +int i; +float x1,y1,dx; + + switch (n){ + case CDS: + // v_adc = Rfix / (Rcds + Rfix) + // Rcds = ( Rfix / v_adc ) - Rfix + r_cds = (R_FIX / av_cds) - R_FIX; + // CDS resistance to Lux conversion using convertion table (luc_cds[][]) + // with Linear interpolation method + for (i =0; i < CDS_TBL_SIZE; i++){ + if ( r_cds <= lux_cds[i][0]){ + break; + } + } +#if DEBUG + pc.printf("i=%d, ", i); +#endif + if (i == 0){ + lux = lux_cds[0][1]; + } else if ( i == CDS_TBL_SIZE ){ + if ( r_cds <= lux_cds[i][0]){ + lux = lux_cds[i-1][1]; + } + } else { + y1 = lux_cds[i-1][1] - lux_cds[i][1]; + x1 = lux_cds[i][0] - lux_cds[i-1][0]; + dx = r_cds - lux_cds[i-1][0]; + lux = lux_cds[i-1][1] - ((dx/x1) * y1); +#if DEBUG + pc.printf("y1:%f, x1:%f, dx:%f, lux_tbl:%f\r\n", y1, x1, dx, lux_cds[i-1][1]); +#endif + } + break; + case VREF: + // vref = VREF_VOLT / VCC -> VCC = VREF_VOLT / vref + cal_vcc = VREF_VOLT / vref; + break; + case VOL: + // Vol center = 1.00 (actual 100) + nor_vol = (uint32_t)(av_vol * 200) + VOL_OFFSET; + break; + } +} + +void adc_all_read( void){ + av_cds = av_cds *0.5 + cds.read() * 0.5; + av_vref = av_vref *0.9 + vref.read() * 0.1; + av_vol = av_vol *0.2 + vol.read() * 0.8; +} + +void adc_init( void){ + analog_pwr = 1; + vref_pwr = 1; + wait(0.2); + av_cds = cds.read(); + av_vref = vref.read(); + av_vol = vol.read(); + wait(0.1); + adc_all_read(); + wait(0.1); + adc_all_read(); + analog_pwr = 0; + vref_pwr = 0; +} int main() { -#if LED_TEST - while(1) { - myled0 = 1; - myled1 = 0; - wait(1.0); - myled0 = 0; - myled1 = 1; - wait(1.0); - } -#else + pc.baud(9600); + pc.printf("mbed LPC1114FN28 test program by JH1PJL created on "__DATE__"\r\n"); while(1) { - if (sw_chng == 1){ - myled0 = 0; - } else { - myled0 = 1; + analog_pwr = 1; + vref_pwr = 1; + wait(0.2); + adc_all_read(); + //analog_pwr = 0; + adc_normalize( CDS ); + adc_normalize( VREF ); + adc_normalize( VOL ); + myled0 = 1; + myled1 = 1; + if (sw_chng == 1){ // SW Off + pc.printf("CDS:%.0fohm -> %.1flux, Vcc:%.3fV, Vol:%d\r\n", r_cds, lux, cal_vcc, nor_vol); + } else { // SW On + pc.printf("CDS:%f, Vref:%f, Vol:%f\r\n", av_cds, av_vref, av_vol); } - if (sw_mode == 1){ - myled1 = 0; - } else { - myled1 = 1; - } + myled0 = 0; + myled1 = 0; + wait(0.8); } -#endif } +