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/

Committer:
kenjiArai
Date:
Thu Jul 03 22:01:25 2014 +0000
Revision:
16:f164f8912201
Parent:
15:065fbeddc305
Child:
18:2a1d75bc8ebc
Added monitor function and ring buffer function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 7:d3b49f1d9f76 1 /*
kenjiArai 7:d3b49f1d9f76 2 * mbed Application program for the mbed LPC1114FN28
kenjiArai 15:065fbeddc305 3 * Barometer program for only for LPC1114FN28
kenjiArai 7:d3b49f1d9f76 4 *
kenjiArai 7:d3b49f1d9f76 5 * Copyright (c) 2014 Kenji Arai / JH1PJL
kenjiArai 7:d3b49f1d9f76 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 7:d3b49f1d9f76 7 * http://mbed.org/users/kenjiArai/
kenjiArai 15:065fbeddc305 8 * Created: May 21st, 2014
kenjiArai 16:f164f8912201 9 * Revised: July 3rd, 2014
kenjiArai 7:d3b49f1d9f76 10 *
kenjiArai 7:d3b49f1d9f76 11 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 7:d3b49f1d9f76 12 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 7:d3b49f1d9f76 13 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 7:d3b49f1d9f76 14 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 7:d3b49f1d9f76 15 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 7:d3b49f1d9f76 16 */
kenjiArai 15:065fbeddc305 17 /*
kenjiArai 15:065fbeddc305 18 * Function
kenjiArai 15:065fbeddc305 19 * measure atmospheric pressure and temprerature using Bosch BMP180 pressure sensor
kenjiArai 15:065fbeddc305 20 * show measured data on AQM0802A LCD and logging such data in EEPROM
kenjiArai 15:065fbeddc305 21 */
kenjiArai 15:065fbeddc305 22
kenjiArai 15:065fbeddc305 23 // Include ---------------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 24 #include "mbed.h"
kenjiArai 15:065fbeddc305 25 #include "BMP180.h" // Own lib. / Pressure sensor
kenjiArai 15:065fbeddc305 26 #include "RHT03.h" // Std. lib./ Humidity sensor
kenjiArai 15:065fbeddc305 27 #include "TextLCD.h" // Std. lib./ LCD control
kenjiArai 15:065fbeddc305 28 #include "m41t62_rtc.h" // Own lib. / RTC control
kenjiArai 15:065fbeddc305 29 #include "dt_log.h"
kenjiArai 15:065fbeddc305 30
kenjiArai 15:065fbeddc305 31 // Definition ------------------------------------------------------------------------------------
kenjiArai 16:f164f8912201 32 #define USE_MON 1
kenjiArai 16:f164f8912201 33 #define USE_BARO 0
kenjiArai 15:065fbeddc305 34
kenjiArai 16:f164f8912201 35 #define BOUND 5 // chattering
kenjiArai 15:065fbeddc305 36
kenjiArai 15:065fbeddc305 37 // Define cyclic period
kenjiArai 16:f164f8912201 38 #define SHOW_LED 1 // Time for LED on x mS
kenjiArai 16:f164f8912201 39 #define CNV_WAIT_T 25 // Waiting time for temp. conversion
kenjiArai 16:f164f8912201 40 #define CNV_WAIT_P 50 // Waiting time for pressure conversion
kenjiArai 16:f164f8912201 41 #define LOOP_WAIT (1000 - (SHOW_LED + CNV_WAIT_T +CNV_WAIT_P))
kenjiArai 15:065fbeddc305 42
kenjiArai 15:065fbeddc305 43 // ADC related definition
kenjiArai 16:f164f8912201 44 #define VREF_VOLT 2.482 // TA76431F Vref real measued data
kenjiArai 16:f164f8912201 45 #define R_FIX 9930 // 10K ohm <- real measued data
kenjiArai 16:f164f8912201 46 #define VOL_OFFSET 3 // Offset data ,= real measured data
kenjiArai 16:f164f8912201 47 #define CDS_TBL_SIZE 13
kenjiArai 15:065fbeddc305 48
kenjiArai 15:065fbeddc305 49 // Waiting time
kenjiArai 15:065fbeddc305 50 #define STATE_CHANGE_TIME 3
kenjiArai 16:f164f8912201 51 #define TIME_INTERVAL 600 // 10 minutes
kenjiArai 15:065fbeddc305 52
kenjiArai 15:065fbeddc305 53 typedef enum {CDS = 0, VREF, VOL} ADC_Select;
kenjiArai 15:065fbeddc305 54
kenjiArai 15:065fbeddc305 55 // Object ----------------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 56 Timeout to; // wake-up from sleep()
kenjiArai 15:065fbeddc305 57 I2C i2c(dp5,dp27); // SDA, SCL
kenjiArai 15:065fbeddc305 58 DigitalOut myled0(dp28); // LED for Debug
kenjiArai 15:065fbeddc305 59 DigitalOut myled1(dp14); // Indicate state transition
kenjiArai 15:065fbeddc305 60 DigitalOut analog_pwr(dp6); // VCC for analog interface (vol, cds and vref)
kenjiArai 15:065fbeddc305 61 DigitalOut vref_pwr(dp4); // VCC for Vref
kenjiArai 15:065fbeddc305 62 DigitalIn sw_chng(dp1,PullUp);// SW for select
kenjiArai 15:065fbeddc305 63 DigitalIn sw_mode(dp2,PullUp);// SW for Mode change
kenjiArai 15:065fbeddc305 64 AnalogIn cds(dp11); // Input / CDS data
kenjiArai 15:065fbeddc305 65 AnalogIn vref(dp9); // Input / Bandgap 2.5V
kenjiArai 15:065fbeddc305 66 AnalogIn vol(dp10); // Input / contrast volume
kenjiArai 15:065fbeddc305 67 RHT03 humtemp(dp26); // RHT03 interface
kenjiArai 15:065fbeddc305 68 BMP180 bmp180(i2c); // Bosch sensor
kenjiArai 15:065fbeddc305 69 M41T62 m41t62(i2c); // STmicro RTC(M41T62)
kenjiArai 15:065fbeddc305 70 TextLCD_I2C_N i2clcd(&i2c, 0x7c, TextLCD::LCD8x2); // LCD(Akizuki AQM0802A)
kenjiArai 15:065fbeddc305 71
kenjiArai 15:065fbeddc305 72 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 73 extern int mon( void); // only use for debug purpose
kenjiArai 15:065fbeddc305 74
kenjiArai 15:065fbeddc305 75 // RAM -------------------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 76 int flag;
kenjiArai 15:065fbeddc305 77
kenjiArai 15:065fbeddc305 78 // ADC
kenjiArai 15:065fbeddc305 79 float av_cds, av_vref, av_vol, cal_vcc;
kenjiArai 15:065fbeddc305 80 float r_cds, lux;
kenjiArai 15:065fbeddc305 81 uint32_t nor_vol;
kenjiArai 15:065fbeddc305 82
kenjiArai 15:065fbeddc305 83 // Humidity Sensor
kenjiArai 15:065fbeddc305 84 float humidity_temp, humidity;
kenjiArai 15:065fbeddc305 85
kenjiArai 15:065fbeddc305 86 // EEPROM
kenjiArai 15:065fbeddc305 87 uint8_t eep_buf[256 + 2];
kenjiArai 8:f6aa5561f219 88
kenjiArai 15:065fbeddc305 89 // Barometer
kenjiArai 15:065fbeddc305 90 float baro;
kenjiArai 15:065fbeddc305 91 float baro_temp;
kenjiArai 15:065fbeddc305 92
kenjiArai 15:065fbeddc305 93 // EEPROM
kenjiArai 16:f164f8912201 94 //extern xEeprom_ptr log_inf;
kenjiArai 15:065fbeddc305 95
kenjiArai 15:065fbeddc305 96 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 97 // Cds GL5528 (Dark Resistance 1 Mohm type) SENBA OPTICAL & ELECTRONIC CO.,LTD.
kenjiArai 15:065fbeddc305 98 // Table value referrence: http://homepage3.nifty.com/skomo/f35/hp35_20.htm
kenjiArai 15:065fbeddc305 99 const float lux_cds[CDS_TBL_SIZE][2] =
kenjiArai 15:065fbeddc305 100 {{50,21194},{100,8356},{200,3294},{400,1299},{800,512},{1600,202},{3200,79.6},{6400,31.4},
kenjiArai 15:065fbeddc305 101 {12800,12.4},{25600,4.88},{51200,1.92},{102400,0.758},{409600,0.118}};
kenjiArai 15:065fbeddc305 102
kenjiArai 15:065fbeddc305 103 // LCD screen data
kenjiArai 15:065fbeddc305 104 enum Screen{
kenjiArai 15:065fbeddc305 105 SCRN_Clear=0, SCRN_Opening, SCRN_Goto_mon, SCRN_Backto_normal
kenjiArai 15:065fbeddc305 106 };
kenjiArai 15:065fbeddc305 107 // Clear Opening Goto_mon Backto_normal
kenjiArai 15:065fbeddc305 108 char scrn_1st[4][10] = { " ", "LPC1114F", "GOTO MON", "Back to"};
kenjiArai 15:065fbeddc305 109 char scrn_2nd[4][10] = { " ", " JH1PJL ", " 9600BPS", " Normal"};
kenjiArai 15:065fbeddc305 110
kenjiArai 15:065fbeddc305 111 // Disply on LCD
kenjiArai 15:065fbeddc305 112 enum Disp_num{
kenjiArai 15:065fbeddc305 113 DSP_INIT=0, DSP_BARO, DSP_HUMD, DSP_LUX, DSP_TIME, DSP_LOG, DSP_RTURN
kenjiArai 15:065fbeddc305 114 };
kenjiArai 15:065fbeddc305 115
kenjiArai 16:f164f8912201 116 // loop time = STATE_CHANGE_TIME * 20 = 3 * 20 = 60 sec (current)
kenjiArai 15:065fbeddc305 117 // rule 1) DSP_INIT is top position, 2)DSP_RTURN is end position, 3) Total number 20
kenjiArai 15:065fbeddc305 118 const uint8_t lcd_disp_tbl[20]
kenjiArai 16:f164f8912201 119 // 1, 2, 3, 4, 5,
kenjiArai 16:f164f8912201 120 = {DSP_INIT, DSP_BARO, DSP_BARO, DSP_BARO, DSP_TIME,
kenjiArai 16:f164f8912201 121 // 6, 7, 8, 9, 10,
kenjiArai 16:f164f8912201 122 DSP_TIME, DSP_HUMD, DSP_HUMD, DSP_LUX, DSP_LUX,
kenjiArai 16:f164f8912201 123 // 11, 12, 13, 14, 15,
kenjiArai 16:f164f8912201 124 DSP_BARO, DSP_BARO, DSP_TIME, DSP_TIME, DSP_HUMD,
kenjiArai 16:f164f8912201 125 // 16, 17, 18, 19, 20
kenjiArai 16:f164f8912201 126 DSP_HUMD, DSP_LUX, DSP_LUX, DSP_LOG, DSP_RTURN};
kenjiArai 15:065fbeddc305 127
kenjiArai 15:065fbeddc305 128 //-------------------------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 129 // Control Program
kenjiArai 15:065fbeddc305 130 //-------------------------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 131 // Normalize ADC data
kenjiArai 15:065fbeddc305 132 void adc_normalize (ADC_Select n){
kenjiArai 15:065fbeddc305 133 int i;
kenjiArai 15:065fbeddc305 134 float x1,y1,dx;
kenjiArai 15:065fbeddc305 135
kenjiArai 15:065fbeddc305 136 switch (n){
kenjiArai 15:065fbeddc305 137 case CDS:
kenjiArai 15:065fbeddc305 138 // v_adc = Rfix / (Rcds + Rfix) -> Rcds = ( Rfix / v_adc ) - Rfix
kenjiArai 15:065fbeddc305 139 r_cds = (R_FIX / av_cds) - R_FIX;
kenjiArai 15:065fbeddc305 140 // CDS resistance to Lux conversion using convertion table (luc_cds[][])
kenjiArai 15:065fbeddc305 141 for (i =0; i < CDS_TBL_SIZE; i++){ // search table
kenjiArai 15:065fbeddc305 142 if ( r_cds <= lux_cds[i][0]){ break; }
kenjiArai 15:065fbeddc305 143 }
kenjiArai 15:065fbeddc305 144 // Check table position
kenjiArai 15:065fbeddc305 145 if (i == 0){ lux = lux_cds[0][1]; break;
kenjiArai 15:065fbeddc305 146 } else if ( i == CDS_TBL_SIZE ){
kenjiArai 15:065fbeddc305 147 if ( r_cds <= lux_cds[i][0] ){
kenjiArai 15:065fbeddc305 148 lux = lux_cds[i-1][1];
kenjiArai 15:065fbeddc305 149 break;
kenjiArai 15:065fbeddc305 150 }
kenjiArai 15:065fbeddc305 151 }
kenjiArai 15:065fbeddc305 152 // Linear interpolation
kenjiArai 15:065fbeddc305 153 y1 = lux_cds[i-1][1] - lux_cds[i][1];
kenjiArai 15:065fbeddc305 154 x1 = lux_cds[i][0] - lux_cds[i-1][0];
kenjiArai 15:065fbeddc305 155 dx = r_cds - lux_cds[i-1][0];
kenjiArai 15:065fbeddc305 156 lux = lux_cds[i-1][1] - ((dx/x1) * y1);
kenjiArai 15:065fbeddc305 157 break;
kenjiArai 15:065fbeddc305 158 case VREF: // vref = VREF_VOLT / VCC -> VCC = VREF_VOLT / vref
kenjiArai 15:065fbeddc305 159 cal_vcc = VREF_VOLT / vref;
kenjiArai 15:065fbeddc305 160 break;
kenjiArai 15:065fbeddc305 161 case VOL: // Vol center = 1.00 (actual 100)
kenjiArai 15:065fbeddc305 162 nor_vol = (uint32_t)(av_vol * 200) + VOL_OFFSET;
kenjiArai 15:065fbeddc305 163 break;
kenjiArai 15:065fbeddc305 164 }
kenjiArai 15:065fbeddc305 165 }
kenjiArai 13:950adc9d6d61 166
kenjiArai 15:065fbeddc305 167 // Read adc data and averaging
kenjiArai 15:065fbeddc305 168 void adc_all_read (void){
kenjiArai 15:065fbeddc305 169 if (av_cds == 0){ av_cds = cds.read();
kenjiArai 15:065fbeddc305 170 } else { av_cds = av_cds *0.5 + cds.read() * 0.5;
kenjiArai 15:065fbeddc305 171 }
kenjiArai 15:065fbeddc305 172 if (av_vref == 0){ av_vref = vref.read();
kenjiArai 15:065fbeddc305 173 } else { av_vref = av_vref *0.9 + vref.read() * 0.1;
kenjiArai 15:065fbeddc305 174 }
kenjiArai 15:065fbeddc305 175 if (av_vol == 0){ av_vol = vol.read();
kenjiArai 15:065fbeddc305 176 } else { av_vol = av_vol *0.2 + vol.read() * 0.8;
kenjiArai 15:065fbeddc305 177 }
kenjiArai 15:065fbeddc305 178 }
kenjiArai 13:950adc9d6d61 179
kenjiArai 15:065fbeddc305 180 // Read Humidity sensor data
kenjiArai 15:065fbeddc305 181 void hum_RHT03_read (void){
kenjiArai 15:065fbeddc305 182 while (true){ // wait data
kenjiArai 15:065fbeddc305 183 if ( humtemp.readData() == RHT_ERROR_NONE ){ break; }
kenjiArai 15:065fbeddc305 184 }
kenjiArai 15:065fbeddc305 185 if (humidity_temp == 0){humidity_temp = humtemp.getTemperatureC();
kenjiArai 15:065fbeddc305 186 } else { humidity_temp = humidity_temp * 0.9 + humtemp.getTemperatureC() * 0.1;
kenjiArai 15:065fbeddc305 187 }
kenjiArai 15:065fbeddc305 188 if ( humidity == 0 ){ humidity = humtemp.getHumidity();
kenjiArai 15:065fbeddc305 189 } else { humidity = humidity * 0.9 + humtemp.getHumidity() * 0.1;
kenjiArai 15:065fbeddc305 190 }
kenjiArai 15:065fbeddc305 191 }
kenjiArai 15:065fbeddc305 192
kenjiArai 15:065fbeddc305 193 void set_lcd_screen(int n){
kenjiArai 15:065fbeddc305 194 i2clcd.locate(0, 0);
kenjiArai 15:065fbeddc305 195 i2clcd.printf("%s", scrn_1st[n]);
kenjiArai 15:065fbeddc305 196 i2clcd.locate(0, 1);
kenjiArai 15:065fbeddc305 197 i2clcd.printf("%s", scrn_2nd[n]);
kenjiArai 15:065fbeddc305 198 }
kenjiArai 15:065fbeddc305 199
kenjiArai 15:065fbeddc305 200 //-------------------------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 201 // Application program
kenjiArai 15:065fbeddc305 202 //-------------------------------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 203 // Nothing is done but just wake-up from sleep condition
kenjiArai 15:065fbeddc305 204 void wakeup() {
kenjiArai 15:065fbeddc305 205 flag = 1;
kenjiArai 15:065fbeddc305 206 myled1 = !myled1;
kenjiArai 15:065fbeddc305 207 }
kenjiArai 15:065fbeddc305 208
kenjiArai 15:065fbeddc305 209 // Measure pressure and show it on LCD
kenjiArai 15:065fbeddc305 210 void conv_and_disp(void) {
kenjiArai 15:065fbeddc305 211 tm t;
kenjiArai 16:f164f8912201 212 time_t seconds = 0;
kenjiArai 16:f164f8912201 213 time_t old_seconds = 0;
kenjiArai 16:f164f8912201 214 uint32_t step = 0, dt;
kenjiArai 16:f164f8912201 215 uint8_t num;
kenjiArai 13:950adc9d6d61 216
kenjiArai 15:065fbeddc305 217 while (true) { // infinit loop for measure and display
kenjiArai 15:065fbeddc305 218 // Call wakeup()function after specific time
kenjiArai 15:065fbeddc305 219 to.attach(&wakeup, STATE_CHANGE_TIME); // this is for wake-up
kenjiArai 15:065fbeddc305 220 //---- State Control ----
kenjiArai 15:065fbeddc305 221 num = lcd_disp_tbl[step++];
kenjiArai 15:065fbeddc305 222 switch (num){
kenjiArai 15:065fbeddc305 223 // ---------- Initialize data ----------------------------------------------------------------
kenjiArai 15:065fbeddc305 224 case DSP_INIT:
kenjiArai 15:065fbeddc305 225 av_cds = 0;
kenjiArai 15:065fbeddc305 226 av_vref = 0;
kenjiArai 15:065fbeddc305 227 av_vol = 0;
kenjiArai 15:065fbeddc305 228 humidity_temp = 0;
kenjiArai 15:065fbeddc305 229 humidity = 0;
kenjiArai 15:065fbeddc305 230 // RTC
kenjiArai 16:f164f8912201 231 m41t62.set_sq_wave(RTC_SQW_NONE);
kenjiArai 16:f164f8912201 232 m41t62.read_rtc_std(&t);
kenjiArai 16:f164f8912201 233 old_seconds = mktime(&t);
kenjiArai 15:065fbeddc305 234 break;
kenjiArai 15:065fbeddc305 235 // ---------- Cds Sensor, Vref, Volume -------------------------------------------------------
kenjiArai 15:065fbeddc305 236 case DSP_LUX:
kenjiArai 15:065fbeddc305 237 // Power on / Analog sensor
kenjiArai 15:065fbeddc305 238 analog_pwr = 1;
kenjiArai 15:065fbeddc305 239 vref_pwr = 1;
kenjiArai 15:065fbeddc305 240 wait(0.2);
kenjiArai 15:065fbeddc305 241 adc_all_read();
kenjiArai 15:065fbeddc305 242 // Power off / Analog sensor
kenjiArai 15:065fbeddc305 243 analog_pwr = 0;
kenjiArai 15:065fbeddc305 244 // Normalize
kenjiArai 15:065fbeddc305 245 adc_normalize(CDS);
kenjiArai 15:065fbeddc305 246 adc_normalize(VREF);
kenjiArai 15:065fbeddc305 247 adc_normalize(VOL);
kenjiArai 15:065fbeddc305 248 set_lcd_screen(SCRN_Clear);
kenjiArai 15:065fbeddc305 249 i2clcd.locate(0, 0); // 1st line top
kenjiArai 15:065fbeddc305 250 // 12345678
kenjiArai 15:065fbeddc305 251 i2clcd.printf("L:%.1f", lux);
kenjiArai 15:065fbeddc305 252 i2clcd.locate(0, 1); // 2nd line top
kenjiArai 15:065fbeddc305 253 i2clcd.printf("V:%.3f", cal_vcc);
kenjiArai 15:065fbeddc305 254 break;
kenjiArai 15:065fbeddc305 255 // ---------- Barometer Sensor / BMP180 ------------------------------------------------------
kenjiArai 15:065fbeddc305 256 case DSP_BARO:
kenjiArai 15:065fbeddc305 257 bmp180.normalize();
kenjiArai 15:065fbeddc305 258 baro = bmp180.read_pressure();
kenjiArai 15:065fbeddc305 259 baro_temp = bmp180.read_temperature();
kenjiArai 15:065fbeddc305 260 set_lcd_screen(SCRN_Clear);
kenjiArai 15:065fbeddc305 261 i2clcd.locate(0, 0); // 1st line top
kenjiArai 15:065fbeddc305 262 i2clcd.printf("P:%.1f", baro);
kenjiArai 15:065fbeddc305 263 i2clcd.locate(0, 1); // 2nd line top
kenjiArai 15:065fbeddc305 264 i2clcd.printf("T:%\+-6.1f", baro_temp);
kenjiArai 15:065fbeddc305 265 break;
kenjiArai 15:065fbeddc305 266 // ---------- Humidity Sensor / RHT03 --------------------------------------------------------
kenjiArai 15:065fbeddc305 267 case DSP_HUMD:
kenjiArai 15:065fbeddc305 268 hum_RHT03_read(); // Read Humidity data then avaraging
kenjiArai 15:065fbeddc305 269 set_lcd_screen(SCRN_Clear);
kenjiArai 15:065fbeddc305 270 i2clcd.locate(0, 0); // 1st line top
kenjiArai 15:065fbeddc305 271 i2clcd.printf("H:%.1f", humidity);
kenjiArai 15:065fbeddc305 272 i2clcd.locate(0, 1); // 2nd line top
kenjiArai 15:065fbeddc305 273 i2clcd.printf("T:%\+-6.1f", humidity_temp);
kenjiArai 15:065fbeddc305 274 break;
kenjiArai 15:065fbeddc305 275 // ---------- RTC ----------------------------------------------------------------------------
kenjiArai 15:065fbeddc305 276 case DSP_TIME:
kenjiArai 16:f164f8912201 277 m41t62.read_rtc_std(&t);
kenjiArai 16:f164f8912201 278 seconds = mktime(&t);
kenjiArai 15:065fbeddc305 279 set_lcd_screen(SCRN_Clear);
kenjiArai 15:065fbeddc305 280 i2clcd.locate(0, 0); // 1st line top
kenjiArai 15:065fbeddc305 281 i2clcd.printf("%02d/%02d/%02d", t.tm_year % 100, t.tm_mon + 1, t.tm_mday);
kenjiArai 15:065fbeddc305 282 i2clcd.locate(0, 1); // 2nd line top
kenjiArai 15:065fbeddc305 283 i2clcd.printf("%02d:%02d:%02d", t.tm_hour, t.tm_min, t.tm_sec);
kenjiArai 15:065fbeddc305 284 break;
kenjiArai 15:065fbeddc305 285 // ---------- EEPROM Logging -----------------------------------------------------------------
kenjiArai 15:065fbeddc305 286 case DSP_LOG:
kenjiArai 16:f164f8912201 287 if (seconds >= old_seconds + TIME_INTERVAL){
kenjiArai 16:f164f8912201 288 // Data Logging action
kenjiArai 16:f164f8912201 289 old_seconds += TIME_INTERVAL;
kenjiArai 16:f164f8912201 290 dtlog_data_pack(); // Get EEPROM resource
kenjiArai 16:f164f8912201 291 dtlog_one_write(); // Write data to EEPROM
kenjiArai 16:f164f8912201 292 dt = (uint32_t)dtlog_buf_occupation();
kenjiArai 16:f164f8912201 293 dt = (dt * 1000)/ BLK_NO;
kenjiArai 16:f164f8912201 294 }
kenjiArai 15:065fbeddc305 295 set_lcd_screen(SCRN_Clear);
kenjiArai 15:065fbeddc305 296 i2clcd.locate(0, 0); // 1st line top
kenjiArai 15:065fbeddc305 297 i2clcd.printf("Logging");
kenjiArai 15:065fbeddc305 298 i2clcd.locate(0, 1); // 2nd line top
kenjiArai 16:f164f8912201 299 i2clcd.printf("%d.%01d%%", dt / 10, dt % 10);
kenjiArai 15:065fbeddc305 300 break;
kenjiArai 15:065fbeddc305 301 // ---------- return (loop) ------------------------------------------------------------------
kenjiArai 15:065fbeddc305 302 case DSP_RTURN:
kenjiArai 15:065fbeddc305 303 default:
kenjiArai 15:065fbeddc305 304 // <State> State change
kenjiArai 15:065fbeddc305 305 step = 1; // if something wrong, go to reset condition
kenjiArai 15:065fbeddc305 306 }
kenjiArai 15:065fbeddc305 307 // ---------- back to top --------------------------------------------------------------------
kenjiArai 15:065fbeddc305 308 myled0 = !myled0;
kenjiArai 15:065fbeddc305 309 while (flag == 0){ wait(0.01);}
kenjiArai 15:065fbeddc305 310 wait(0.1);
kenjiArai 15:065fbeddc305 311 myled1 = !myled1;
kenjiArai 15:065fbeddc305 312 flag = 0;
kenjiArai 15:065fbeddc305 313 }
kenjiArai 15:065fbeddc305 314 }
kenjiArai 13:950adc9d6d61 315
kenjiArai 15:065fbeddc305 316 // Application program starts here
kenjiArai 15:065fbeddc305 317 int main() {
kenjiArai 15:065fbeddc305 318 flag = 0;
kenjiArai 15:065fbeddc305 319 i2clcd.setContrast(25);
kenjiArai 15:065fbeddc305 320 set_lcd_screen(SCRN_Opening);
kenjiArai 15:065fbeddc305 321 if (sw_chng == 0){ // SW ON
kenjiArai 15:065fbeddc305 322 //-- Enter Monitor Mode --
kenjiArai 15:065fbeddc305 323 myled1 = 1; wait(0.5);
kenjiArai 15:065fbeddc305 324 myled1 = 0; wait(0.5);
kenjiArai 15:065fbeddc305 325 myled1 = 1; wait(0.5);
kenjiArai 15:065fbeddc305 326 if (sw_chng == 0){ // Still SW ON
kenjiArai 15:065fbeddc305 327 myled1 = 0; wait(0.5);
kenjiArai 15:065fbeddc305 328 myled1 = 1; wait(0.5);
kenjiArai 15:065fbeddc305 329 if (sw_mode == 0){ // SW ON
kenjiArai 15:065fbeddc305 330 set_lcd_screen(SCRN_Clear);
kenjiArai 15:065fbeddc305 331 set_lcd_screen(SCRN_Goto_mon);
kenjiArai 15:065fbeddc305 332 myled1 = 0;
kenjiArai 15:065fbeddc305 333 mon(); // mon.cpp
kenjiArai 15:065fbeddc305 334 }
kenjiArai 15:065fbeddc305 335 set_lcd_screen(SCRN_Clear);
kenjiArai 15:065fbeddc305 336 set_lcd_screen(SCRN_Backto_normal);
kenjiArai 15:065fbeddc305 337 }
kenjiArai 15:065fbeddc305 338 }
kenjiArai 15:065fbeddc305 339 //-- Enter Normal Mode --
kenjiArai 15:065fbeddc305 340 myled0 = 1;
kenjiArai 15:065fbeddc305 341 myled1 = 0;
kenjiArai 15:065fbeddc305 342 while (true) { // Start main program
kenjiArai 15:065fbeddc305 343 conv_and_disp();
kenjiArai 15:065fbeddc305 344 }
kenjiArai 15:065fbeddc305 345 }