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:
- 16:f164f8912201
- Parent:
- 15:065fbeddc305
- Child:
- 18:2a1d75bc8ebc
--- a/main.cpp Sun Jun 29 06:58:00 2014 +0000 +++ b/main.cpp Thu Jul 03 22:01:25 2014 +0000 @@ -6,7 +6,7 @@ * http://www.page.sannet.ne.jp/kenjia/index.html * http://mbed.org/users/kenjiArai/ * Created: May 21st, 2014 - * Revised: June 28th, 2014 + * Revised: July 3rd, 2014 * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE @@ -29,25 +29,26 @@ #include "dt_log.h" // Definition ------------------------------------------------------------------------------------ -#define USE_MON 1 -#define USE_BARO 0 +#define USE_MON 1 +#define USE_BARO 0 -#define BOUND 5 // chattering +#define BOUND 5 // chattering // Define cyclic period -#define SHOW_LED 1 // Time for LED on x mS -#define CNV_WAIT_T 25 // Waiting time for temp. conversion -#define CNV_WAIT_P 50 // Waiting time for pressure conversion -#define LOOP_WAIT (1000 - (SHOW_LED + CNV_WAIT_T +CNV_WAIT_P)) +#define SHOW_LED 1 // Time for LED on x mS +#define CNV_WAIT_T 25 // Waiting time for temp. conversion +#define CNV_WAIT_P 50 // Waiting time for pressure conversion +#define LOOP_WAIT (1000 - (SHOW_LED + CNV_WAIT_T +CNV_WAIT_P)) // ADC related definition -#define VREF_VOLT 2.482 // TA76431F Vref real measued data -#define R_FIX 9930 // 10K ohm <- real measued data -#define VOL_OFFSET 3 // Offset data ,= real measured data -#define CDS_TBL_SIZE 13 +#define VREF_VOLT 2.482 // TA76431F Vref real measued data +#define R_FIX 9930 // 10K ohm <- real measued data +#define VOL_OFFSET 3 // Offset data ,= real measured data +#define CDS_TBL_SIZE 13 // Waiting time #define STATE_CHANGE_TIME 3 +#define TIME_INTERVAL 600 // 10 minutes typedef enum {CDS = 0, VREF, VOL} ADC_Select; @@ -90,7 +91,7 @@ float baro_temp; // EEPROM -extern xEeprom_ptr log_inf; +//extern xEeprom_ptr log_inf; // ROM / Constant data --------------------------------------------------------------------------- // Cds GL5528 (Dark Resistance 1 Mohm type) SENBA OPTICAL & ELECTRONIC CO.,LTD. @@ -112,12 +113,17 @@ DSP_INIT=0, DSP_BARO, DSP_HUMD, DSP_LUX, DSP_TIME, DSP_LOG, DSP_RTURN }; +// loop time = STATE_CHANGE_TIME * 20 = 3 * 20 = 60 sec (current) // rule 1) DSP_INIT is top position, 2)DSP_RTURN is end position, 3) Total number 20 const uint8_t lcd_disp_tbl[20] -// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - = {DSP_INIT, DSP_BARO, DSP_BARO, DSP_BARO, DSP_TIME, DSP_TIME, DSP_HUMD, DSP_HUMD, DSP_LUX, DSP_LUX, -// 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 - DSP_BARO, DSP_BARO, DSP_TIME, DSP_TIME, DSP_HUMD, DSP_HUMD, DSP_LUX, DSP_LUX, DSP_LOG, DSP_RTURN}; +// 1, 2, 3, 4, 5, + = {DSP_INIT, DSP_BARO, DSP_BARO, DSP_BARO, DSP_TIME, +// 6, 7, 8, 9, 10, + DSP_TIME, DSP_HUMD, DSP_HUMD, DSP_LUX, DSP_LUX, +// 11, 12, 13, 14, 15, + DSP_BARO, DSP_BARO, DSP_TIME, DSP_TIME, DSP_HUMD, +// 16, 17, 18, 19, 20 + DSP_HUMD, DSP_LUX, DSP_LUX, DSP_LOG, DSP_RTURN}; //------------------------------------------------------------------------------------------------- // Control Program @@ -203,8 +209,10 @@ // Measure pressure and show it on LCD void conv_and_disp(void) { tm t; -uint32_t step = 0; -uint8_t num; +time_t seconds = 0; +time_t old_seconds = 0; +uint32_t step = 0, dt; +uint8_t num; while (true) { // infinit loop for measure and display // Call wakeup()function after specific time @@ -220,7 +228,9 @@ humidity_temp = 0; humidity = 0; // RTC - m41t62.set_sq_wave(RTC_SQW_NONE); + m41t62.set_sq_wave(RTC_SQW_NONE); + m41t62.read_rtc_std(&t); + old_seconds = mktime(&t); break; // ---------- Cds Sensor, Vref, Volume ------------------------------------------------------- case DSP_LUX: @@ -264,7 +274,8 @@ break; // ---------- RTC ---------------------------------------------------------------------------- case DSP_TIME: - m41t62.read_rtc_std(&t);; + m41t62.read_rtc_std(&t); + seconds = mktime(&t); set_lcd_screen(SCRN_Clear); i2clcd.locate(0, 0); // 1st line top i2clcd.printf("%02d/%02d/%02d", t.tm_year % 100, t.tm_mon + 1, t.tm_mday); @@ -273,13 +284,19 @@ break; // ---------- EEPROM Logging ----------------------------------------------------------------- case DSP_LOG: - dtlog_data_pack(); // Get EEPROM resource - dtlog_one_write(); // Write data to EEPROM + if (seconds >= old_seconds + TIME_INTERVAL){ + // Data Logging action + old_seconds += TIME_INTERVAL; + dtlog_data_pack(); // Get EEPROM resource + dtlog_one_write(); // Write data to EEPROM + dt = (uint32_t)dtlog_buf_occupation(); + dt = (dt * 1000)/ BLK_NO; + } set_lcd_screen(SCRN_Clear); i2clcd.locate(0, 0); // 1st line top i2clcd.printf("Logging"); i2clcd.locate(0, 1); // 2nd line top - i2clcd.printf("%d.1", dtlog_buf_occupation() / 10); + i2clcd.printf("%d.%01d%%", dt / 10, dt % 10); break; // ---------- return (loop) ------------------------------------------------------------------ case DSP_RTURN: