Barometer program : Data Logger function includes Barometer & temperature (BMP180), Humidity & temp. (RHT03), Sunshine (Cds), RTC(M41T62) data. : Logging data saves into EEPROM (AT24C1024) using ring buffer function.

Dependencies:   AT24C1024 RHT03 TextLCD BMP180 M41T62

Fork of mbed_blinky by Mbed

Please see https://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-barometer-with-data-logging/#

Committer:
kenjiArai
Date:
Sat Aug 08 07:01:19 2020 +0000
Revision:
18:b3a27f681171
Parent:
16:f164f8912201
change to mbed-os-6.2.0 but not work this revision

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