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 Kenji Arai

Please refer following Notebook.
http://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-data-logger/

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: