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:
Sun Jun 29 06:58:00 2014 +0000
Revision:
15:065fbeddc305
Parent:
14:18a98cad6109
Child:
16:f164f8912201
Barometer program / Step by step approach -> final step,; Barometer, Humidity, Sunshine, RTC data into EEPROM (logging)

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