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/
main.cpp@19:19dd6332d729, 2014-08-19 (annotated)
- Committer:
- kenjiArai
- Date:
- Tue Aug 19 12:00:06 2014 +0000
- Revision:
- 19:19dd6332d729
- Parent:
- 18:2a1d75bc8ebc
changed interval and logging time
Who changed what in which revision?
User | Revision | Line number | New 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 | 19:19dd6332d729 | 9 | * Revised: August 19th, 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 | 18:2a1d75bc8ebc | 20 | * show measured data on a LCD and logging such data in I2C 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 | 18:2a1d75bc8ebc | 29 | #include "WakeUp.h" |
kenjiArai | 18:2a1d75bc8ebc | 30 | #include "WakeInterruptIn.h" |
kenjiArai | 15:065fbeddc305 | 31 | #include "dt_log.h" |
kenjiArai | 15:065fbeddc305 | 32 | |
kenjiArai | 15:065fbeddc305 | 33 | // Definition ------------------------------------------------------------------------------------ |
kenjiArai | 15:065fbeddc305 | 34 | // ADC related definition |
kenjiArai | 16:f164f8912201 | 35 | #define VREF_VOLT 2.482 // TA76431F Vref real measued data |
kenjiArai | 16:f164f8912201 | 36 | #define R_FIX 9930 // 10K ohm <- real measued data |
kenjiArai | 16:f164f8912201 | 37 | #define VOL_OFFSET 3 // Offset data ,= real measured data |
kenjiArai | 16:f164f8912201 | 38 | #define CDS_TBL_SIZE 13 |
kenjiArai | 15:065fbeddc305 | 39 | |
kenjiArai | 15:065fbeddc305 | 40 | // Waiting time |
kenjiArai | 19:19dd6332d729 | 41 | #define TIME_INTERVAL 600 // 10 minutes |
kenjiArai | 19:19dd6332d729 | 42 | //#define TIME_INTERVAL 60 // 1 minutes |
kenjiArai | 15:065fbeddc305 | 43 | |
kenjiArai | 15:065fbeddc305 | 44 | typedef enum {CDS = 0, VREF, VOL} ADC_Select; |
kenjiArai | 15:065fbeddc305 | 45 | |
kenjiArai | 18:2a1d75bc8ebc | 46 | #define BAUD(x) pcx.baud(x) |
kenjiArai | 18:2a1d75bc8ebc | 47 | #define GETC(x) pcx.getc(x) |
kenjiArai | 18:2a1d75bc8ebc | 48 | #define PUTC(x) pcx.putc(x) |
kenjiArai | 18:2a1d75bc8ebc | 49 | #define PRINTF(...) pcx.printf(__VA_ARGS__) |
kenjiArai | 18:2a1d75bc8ebc | 50 | #define READABLE(x) pcx.readable(x) |
kenjiArai | 18:2a1d75bc8ebc | 51 | |
kenjiArai | 15:065fbeddc305 | 52 | // Object ---------------------------------------------------------------------------------------- |
kenjiArai | 18:2a1d75bc8ebc | 53 | Serial pcx(dp16,dp15); |
kenjiArai | 15:065fbeddc305 | 54 | I2C i2c(dp5,dp27); // SDA, SCL |
kenjiArai | 18:2a1d75bc8ebc | 55 | WakeInterruptIn event(dp25); // wake-up from deepsleep mode by this interrupt |
kenjiArai | 18:2a1d75bc8ebc | 56 | DigitalOut myled(dp14); // LED for Debug |
kenjiArai | 15:065fbeddc305 | 57 | DigitalOut analog_pwr(dp6); // VCC for analog interface (vol, cds and vref) |
kenjiArai | 15:065fbeddc305 | 58 | DigitalOut vref_pwr(dp4); // VCC for Vref |
kenjiArai | 15:065fbeddc305 | 59 | AnalogIn cds(dp11); // Input / CDS data |
kenjiArai | 15:065fbeddc305 | 60 | AnalogIn vref(dp9); // Input / Bandgap 2.5V |
kenjiArai | 15:065fbeddc305 | 61 | AnalogIn vol(dp10); // Input / contrast volume |
kenjiArai | 15:065fbeddc305 | 62 | RHT03 humtemp(dp26); // RHT03 interface |
kenjiArai | 15:065fbeddc305 | 63 | BMP180 bmp180(i2c); // Bosch sensor |
kenjiArai | 15:065fbeddc305 | 64 | M41T62 m41t62(i2c); // STmicro RTC(M41T62) |
kenjiArai | 18:2a1d75bc8ebc | 65 | TextLCD lcd(dp1, dp28, dp17, dp18, dp2, dp13, TextLCD::LCD20x4); // rs, e, d4-d7 |
kenjiArai | 15:065fbeddc305 | 66 | |
kenjiArai | 15:065fbeddc305 | 67 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 68 | extern int mon( void); // only use for debug purpose |
kenjiArai | 15:065fbeddc305 | 69 | |
kenjiArai | 15:065fbeddc305 | 70 | // RAM ------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 71 | // ADC |
kenjiArai | 15:065fbeddc305 | 72 | float av_cds, av_vref, av_vol, cal_vcc; |
kenjiArai | 15:065fbeddc305 | 73 | float r_cds, lux; |
kenjiArai | 15:065fbeddc305 | 74 | uint32_t nor_vol; |
kenjiArai | 15:065fbeddc305 | 75 | |
kenjiArai | 15:065fbeddc305 | 76 | // Humidity Sensor |
kenjiArai | 15:065fbeddc305 | 77 | float humidity_temp, humidity; |
kenjiArai | 15:065fbeddc305 | 78 | |
kenjiArai | 15:065fbeddc305 | 79 | // EEPROM |
kenjiArai | 15:065fbeddc305 | 80 | uint8_t eep_buf[256 + 2]; |
kenjiArai | 8:f6aa5561f219 | 81 | |
kenjiArai | 15:065fbeddc305 | 82 | // Barometer |
kenjiArai | 15:065fbeddc305 | 83 | float baro; |
kenjiArai | 15:065fbeddc305 | 84 | float baro_temp; |
kenjiArai | 15:065fbeddc305 | 85 | |
kenjiArai | 15:065fbeddc305 | 86 | // ROM / Constant data --------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 87 | // Cds GL5528 (Dark Resistance 1 Mohm type) SENBA OPTICAL & ELECTRONIC CO.,LTD. |
kenjiArai | 15:065fbeddc305 | 88 | // Table value referrence: http://homepage3.nifty.com/skomo/f35/hp35_20.htm |
kenjiArai | 15:065fbeddc305 | 89 | const float lux_cds[CDS_TBL_SIZE][2] = |
kenjiArai | 15:065fbeddc305 | 90 | {{50,21194},{100,8356},{200,3294},{400,1299},{800,512},{1600,202},{3200,79.6},{6400,31.4}, |
kenjiArai | 15:065fbeddc305 | 91 | {12800,12.4},{25600,4.88},{51200,1.92},{102400,0.758},{409600,0.118}}; |
kenjiArai | 15:065fbeddc305 | 92 | |
kenjiArai | 18:2a1d75bc8ebc | 93 | // 12345678901234567890 |
kenjiArai | 18:2a1d75bc8ebc | 94 | static char *const msg_clear = " "; |
kenjiArai | 18:2a1d75bc8ebc | 95 | static char *const msg_msg0 = " mbed LPC1114FN28 "; |
kenjiArai | 18:2a1d75bc8ebc | 96 | static char *const msg_msg1 = " by JH1PJL K.Arai "; |
kenjiArai | 18:2a1d75bc8ebc | 97 | static char *const msg_msg2 = " Barometer Logger "; |
kenjiArai | 18:2a1d75bc8ebc | 98 | static char *const msg_msg3 = " "; |
kenjiArai | 18:2a1d75bc8ebc | 99 | static char *const msg_msg4 = "Goto Monitor/9600bps"; |
kenjiArai | 18:2a1d75bc8ebc | 100 | static char *const msg_msg5 = " Back to main "; |
kenjiArai | 15:065fbeddc305 | 101 | |
kenjiArai | 15:065fbeddc305 | 102 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 103 | // Control Program |
kenjiArai | 15:065fbeddc305 | 104 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 105 | // Normalize ADC data |
kenjiArai | 15:065fbeddc305 | 106 | void adc_normalize (ADC_Select n){ |
kenjiArai | 15:065fbeddc305 | 107 | int i; |
kenjiArai | 15:065fbeddc305 | 108 | float x1,y1,dx; |
kenjiArai | 15:065fbeddc305 | 109 | |
kenjiArai | 15:065fbeddc305 | 110 | switch (n){ |
kenjiArai | 15:065fbeddc305 | 111 | case CDS: |
kenjiArai | 15:065fbeddc305 | 112 | // v_adc = Rfix / (Rcds + Rfix) -> Rcds = ( Rfix / v_adc ) - Rfix |
kenjiArai | 15:065fbeddc305 | 113 | r_cds = (R_FIX / av_cds) - R_FIX; |
kenjiArai | 15:065fbeddc305 | 114 | // CDS resistance to Lux conversion using convertion table (luc_cds[][]) |
kenjiArai | 15:065fbeddc305 | 115 | for (i =0; i < CDS_TBL_SIZE; i++){ // search table |
kenjiArai | 15:065fbeddc305 | 116 | if ( r_cds <= lux_cds[i][0]){ break; } |
kenjiArai | 15:065fbeddc305 | 117 | } |
kenjiArai | 15:065fbeddc305 | 118 | // Check table position |
kenjiArai | 15:065fbeddc305 | 119 | if (i == 0){ lux = lux_cds[0][1]; break; |
kenjiArai | 15:065fbeddc305 | 120 | } else if ( i == CDS_TBL_SIZE ){ |
kenjiArai | 15:065fbeddc305 | 121 | if ( r_cds <= lux_cds[i][0] ){ |
kenjiArai | 15:065fbeddc305 | 122 | lux = lux_cds[i-1][1]; |
kenjiArai | 15:065fbeddc305 | 123 | break; |
kenjiArai | 15:065fbeddc305 | 124 | } |
kenjiArai | 15:065fbeddc305 | 125 | } |
kenjiArai | 15:065fbeddc305 | 126 | // Linear interpolation |
kenjiArai | 15:065fbeddc305 | 127 | y1 = lux_cds[i-1][1] - lux_cds[i][1]; |
kenjiArai | 15:065fbeddc305 | 128 | x1 = lux_cds[i][0] - lux_cds[i-1][0]; |
kenjiArai | 15:065fbeddc305 | 129 | dx = r_cds - lux_cds[i-1][0]; |
kenjiArai | 15:065fbeddc305 | 130 | lux = lux_cds[i-1][1] - ((dx/x1) * y1); |
kenjiArai | 15:065fbeddc305 | 131 | break; |
kenjiArai | 15:065fbeddc305 | 132 | case VREF: // vref = VREF_VOLT / VCC -> VCC = VREF_VOLT / vref |
kenjiArai | 15:065fbeddc305 | 133 | cal_vcc = VREF_VOLT / vref; |
kenjiArai | 15:065fbeddc305 | 134 | break; |
kenjiArai | 15:065fbeddc305 | 135 | case VOL: // Vol center = 1.00 (actual 100) |
kenjiArai | 15:065fbeddc305 | 136 | nor_vol = (uint32_t)(av_vol * 200) + VOL_OFFSET; |
kenjiArai | 15:065fbeddc305 | 137 | break; |
kenjiArai | 15:065fbeddc305 | 138 | } |
kenjiArai | 15:065fbeddc305 | 139 | } |
kenjiArai | 13:950adc9d6d61 | 140 | |
kenjiArai | 15:065fbeddc305 | 141 | // Read adc data and averaging |
kenjiArai | 15:065fbeddc305 | 142 | void adc_all_read (void){ |
kenjiArai | 15:065fbeddc305 | 143 | if (av_cds == 0){ av_cds = cds.read(); |
kenjiArai | 15:065fbeddc305 | 144 | } else { av_cds = av_cds *0.5 + cds.read() * 0.5; |
kenjiArai | 15:065fbeddc305 | 145 | } |
kenjiArai | 15:065fbeddc305 | 146 | if (av_vref == 0){ av_vref = vref.read(); |
kenjiArai | 15:065fbeddc305 | 147 | } else { av_vref = av_vref *0.9 + vref.read() * 0.1; |
kenjiArai | 15:065fbeddc305 | 148 | } |
kenjiArai | 15:065fbeddc305 | 149 | if (av_vol == 0){ av_vol = vol.read(); |
kenjiArai | 15:065fbeddc305 | 150 | } else { av_vol = av_vol *0.2 + vol.read() * 0.8; |
kenjiArai | 15:065fbeddc305 | 151 | } |
kenjiArai | 15:065fbeddc305 | 152 | } |
kenjiArai | 13:950adc9d6d61 | 153 | |
kenjiArai | 15:065fbeddc305 | 154 | // Read Humidity sensor data |
kenjiArai | 15:065fbeddc305 | 155 | void hum_RHT03_read (void){ |
kenjiArai | 15:065fbeddc305 | 156 | while (true){ // wait data |
kenjiArai | 15:065fbeddc305 | 157 | if ( humtemp.readData() == RHT_ERROR_NONE ){ break; } |
kenjiArai | 15:065fbeddc305 | 158 | } |
kenjiArai | 15:065fbeddc305 | 159 | if (humidity_temp == 0){humidity_temp = humtemp.getTemperatureC(); |
kenjiArai | 15:065fbeddc305 | 160 | } else { humidity_temp = humidity_temp * 0.9 + humtemp.getTemperatureC() * 0.1; |
kenjiArai | 15:065fbeddc305 | 161 | } |
kenjiArai | 15:065fbeddc305 | 162 | if ( humidity == 0 ){ humidity = humtemp.getHumidity(); |
kenjiArai | 15:065fbeddc305 | 163 | } else { humidity = humidity * 0.9 + humtemp.getHumidity() * 0.1; |
kenjiArai | 15:065fbeddc305 | 164 | } |
kenjiArai | 15:065fbeddc305 | 165 | } |
kenjiArai | 15:065fbeddc305 | 166 | |
kenjiArai | 15:065fbeddc305 | 167 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 168 | // Application program |
kenjiArai | 15:065fbeddc305 | 169 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 15:065fbeddc305 | 170 | // Measure pressure and show it on LCD |
kenjiArai | 15:065fbeddc305 | 171 | void conv_and_disp(void) { |
kenjiArai | 15:065fbeddc305 | 172 | tm t; |
kenjiArai | 16:f164f8912201 | 173 | time_t seconds = 0; |
kenjiArai | 16:f164f8912201 | 174 | time_t old_seconds = 0; |
kenjiArai | 18:2a1d75bc8ebc | 175 | uint32_t dt; |
kenjiArai | 13:950adc9d6d61 | 176 | |
kenjiArai | 18:2a1d75bc8ebc | 177 | // Wakeup from deep sleep |
kenjiArai | 18:2a1d75bc8ebc | 178 | WakeUp::calibrate(); |
kenjiArai | 18:2a1d75bc8ebc | 179 | // Initialize data |
kenjiArai | 18:2a1d75bc8ebc | 180 | av_cds = 0; |
kenjiArai | 18:2a1d75bc8ebc | 181 | av_vref = 0; |
kenjiArai | 18:2a1d75bc8ebc | 182 | av_vol = 0; |
kenjiArai | 18:2a1d75bc8ebc | 183 | humidity_temp = 0; |
kenjiArai | 18:2a1d75bc8ebc | 184 | humidity = 0; |
kenjiArai | 18:2a1d75bc8ebc | 185 | // RTC |
kenjiArai | 18:2a1d75bc8ebc | 186 | m41t62.set_sq_wave(RTC_SQW_NONE); |
kenjiArai | 18:2a1d75bc8ebc | 187 | m41t62.read_rtc_std(&t); |
kenjiArai | 18:2a1d75bc8ebc | 188 | old_seconds = mktime(&t); |
kenjiArai | 15:065fbeddc305 | 189 | while (true) { // infinit loop for measure and display |
kenjiArai | 15:065fbeddc305 | 190 | // ---------- Barometer Sensor / BMP180 ------------------------------------------------------ |
kenjiArai | 18:2a1d75bc8ebc | 191 | bmp180.normalize(); |
kenjiArai | 18:2a1d75bc8ebc | 192 | baro = bmp180.read_pressure(); |
kenjiArai | 18:2a1d75bc8ebc | 193 | baro_temp = bmp180.read_temperature(); |
kenjiArai | 15:065fbeddc305 | 194 | // ---------- Humidity Sensor / RHT03 -------------------------------------------------------- |
kenjiArai | 18:2a1d75bc8ebc | 195 | hum_RHT03_read(); // Read Humidity data then avaraging |
kenjiArai | 18:2a1d75bc8ebc | 196 | // ---------- Cds Sensor, Vref, Volume ------------------------------------------------------- |
kenjiArai | 18:2a1d75bc8ebc | 197 | wait(0.2); |
kenjiArai | 18:2a1d75bc8ebc | 198 | adc_all_read(); |
kenjiArai | 18:2a1d75bc8ebc | 199 | // Normalize |
kenjiArai | 18:2a1d75bc8ebc | 200 | adc_normalize(CDS); |
kenjiArai | 18:2a1d75bc8ebc | 201 | adc_normalize(VREF); |
kenjiArai | 18:2a1d75bc8ebc | 202 | adc_normalize(VOL); |
kenjiArai | 15:065fbeddc305 | 203 | // ---------- RTC ---------------------------------------------------------------------------- |
kenjiArai | 18:2a1d75bc8ebc | 204 | m41t62.read_rtc_std(&t); |
kenjiArai | 18:2a1d75bc8ebc | 205 | seconds = mktime(&t); |
kenjiArai | 15:065fbeddc305 | 206 | // ---------- EEPROM Logging ----------------------------------------------------------------- |
kenjiArai | 18:2a1d75bc8ebc | 207 | if (seconds >= old_seconds + TIME_INTERVAL){ |
kenjiArai | 18:2a1d75bc8ebc | 208 | // Data Logging action |
kenjiArai | 18:2a1d75bc8ebc | 209 | old_seconds += TIME_INTERVAL; |
kenjiArai | 18:2a1d75bc8ebc | 210 | dtlog_data_pack(); // Get EEPROM resource |
kenjiArai | 18:2a1d75bc8ebc | 211 | dtlog_one_write(); // Write data to EEPROM |
kenjiArai | 15:065fbeddc305 | 212 | } |
kenjiArai | 18:2a1d75bc8ebc | 213 | dt = (uint32_t)dtlog_buf_occupation(); |
kenjiArai | 18:2a1d75bc8ebc | 214 | dt = (dt * 1000)/ BLK_NO; |
kenjiArai | 18:2a1d75bc8ebc | 215 | // ---------- Display all data on a LCD ------------------------------------------------------ |
kenjiArai | 18:2a1d75bc8ebc | 216 | // Printf:: Barometer Sensor / BMP180 |
kenjiArai | 18:2a1d75bc8ebc | 217 | lcd.locate(0, 0); // 1st line top |
kenjiArai | 18:2a1d75bc8ebc | 218 | lcd.printf("%s", msg_clear); |
kenjiArai | 18:2a1d75bc8ebc | 219 | lcd.locate(0, 0); // 1st line top |
kenjiArai | 18:2a1d75bc8ebc | 220 | lcd.printf("%6.1fhPa %\+-5.1f%cC", baro, baro_temp, 0xdf); |
kenjiArai | 18:2a1d75bc8ebc | 221 | // Printf:: Humidity Sensor / RHT03 + Vcc |
kenjiArai | 18:2a1d75bc8ebc | 222 | lcd.locate(0, 1); // 2nd line top |
kenjiArai | 18:2a1d75bc8ebc | 223 | lcd.printf("%s", msg_clear); |
kenjiArai | 18:2a1d75bc8ebc | 224 | lcd.locate(0, 1); // 2nd line top |
kenjiArai | 18:2a1d75bc8ebc | 225 | #if 0 |
kenjiArai | 18:2a1d75bc8ebc | 226 | lcd.printf("%4.1f%%(%\+-4.1f%cC) %.2fV", humidity, humidity_temp, 0xdf, cal_vcc); |
kenjiArai | 18:2a1d75bc8ebc | 227 | #else |
kenjiArai | 18:2a1d75bc8ebc | 228 | lcd.printf("%.2fV %4.1f%% %\+-4.1f%cC", cal_vcc, humidity, humidity_temp, 0xdf); |
kenjiArai | 18:2a1d75bc8ebc | 229 | #endif |
kenjiArai | 18:2a1d75bc8ebc | 230 | // Printf:: Cds Sensor + EEPROM Logging |
kenjiArai | 18:2a1d75bc8ebc | 231 | lcd.locate(0, 2); // 3rd line top |
kenjiArai | 18:2a1d75bc8ebc | 232 | lcd.printf("%s", msg_clear); |
kenjiArai | 18:2a1d75bc8ebc | 233 | lcd.locate(0, 2); // 3rd line top |
kenjiArai | 18:2a1d75bc8ebc | 234 | if (dt <= 998){ |
kenjiArai | 18:2a1d75bc8ebc | 235 | lcd.printf("%8.1fLx Log:%2d.%01d%%", lux, dt / 10, dt % 10); |
kenjiArai | 18:2a1d75bc8ebc | 236 | } else { |
kenjiArai | 18:2a1d75bc8ebc | 237 | lcd.printf("%8.1fLx Log: full", lux); |
kenjiArai | 18:2a1d75bc8ebc | 238 | } |
kenjiArai | 18:2a1d75bc8ebc | 239 | // Printf:: RTC (Date & Time) |
kenjiArai | 18:2a1d75bc8ebc | 240 | lcd.locate(0, 3); // 4th line top |
kenjiArai | 18:2a1d75bc8ebc | 241 | lcd.printf("%s", msg_clear); |
kenjiArai | 18:2a1d75bc8ebc | 242 | lcd.locate(0, 3); // 4th line top |
kenjiArai | 18:2a1d75bc8ebc | 243 | #if 0 |
kenjiArai | 18:2a1d75bc8ebc | 244 | lcd.printf("20%02d/%02d/%02d %02d:%02d:%02d", |
kenjiArai | 18:2a1d75bc8ebc | 245 | t.tm_year % 100, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec); |
kenjiArai | 18:2a1d75bc8ebc | 246 | #else |
kenjiArai | 18:2a1d75bc8ebc | 247 | lcd.printf("20%02d/%02d/%02d %02d:%02d PJL", |
kenjiArai | 18:2a1d75bc8ebc | 248 | t.tm_year % 100, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min); |
kenjiArai | 18:2a1d75bc8ebc | 249 | #endif |
kenjiArai | 15:065fbeddc305 | 250 | // ---------- back to top -------------------------------------------------------------------- |
kenjiArai | 18:2a1d75bc8ebc | 251 | myled = 1; |
kenjiArai | 18:2a1d75bc8ebc | 252 | wait(0.001); |
kenjiArai | 18:2a1d75bc8ebc | 253 | myled = 0; |
kenjiArai | 18:2a1d75bc8ebc | 254 | // Power off - Analog sensor |
kenjiArai | 18:2a1d75bc8ebc | 255 | analog_pwr = 0; |
kenjiArai | 18:2a1d75bc8ebc | 256 | vref_pwr = 0; |
kenjiArai | 18:2a1d75bc8ebc | 257 | // Wait with sleep |
kenjiArai | 19:19dd6332d729 | 258 | WakeUp::set_ms(30000); |
kenjiArai | 19:19dd6332d729 | 259 | //WakeUp::set(10); |
kenjiArai | 18:2a1d75bc8ebc | 260 | wait(0.001); // looks important for works well |
kenjiArai | 18:2a1d75bc8ebc | 261 | myled = 1; |
kenjiArai | 18:2a1d75bc8ebc | 262 | wait(0.001); |
kenjiArai | 18:2a1d75bc8ebc | 263 | myled = 0; |
kenjiArai | 18:2a1d75bc8ebc | 264 | // Power on - Analog sensor |
kenjiArai | 18:2a1d75bc8ebc | 265 | analog_pwr = 1; |
kenjiArai | 18:2a1d75bc8ebc | 266 | vref_pwr = 1; |
kenjiArai | 15:065fbeddc305 | 267 | } |
kenjiArai | 15:065fbeddc305 | 268 | } |
kenjiArai | 13:950adc9d6d61 | 269 | |
kenjiArai | 15:065fbeddc305 | 270 | // Application program starts here |
kenjiArai | 15:065fbeddc305 | 271 | int main() { |
kenjiArai | 18:2a1d75bc8ebc | 272 | // Initial screen |
kenjiArai | 18:2a1d75bc8ebc | 273 | lcd.locate(0, 0); |
kenjiArai | 18:2a1d75bc8ebc | 274 | lcd.printf(msg_msg0); |
kenjiArai | 18:2a1d75bc8ebc | 275 | lcd.printf(msg_msg1); |
kenjiArai | 18:2a1d75bc8ebc | 276 | lcd.printf(msg_msg2); |
kenjiArai | 18:2a1d75bc8ebc | 277 | lcd.printf(msg_msg3); |
kenjiArai | 18:2a1d75bc8ebc | 278 | myled = 1; |
kenjiArai | 18:2a1d75bc8ebc | 279 | wait(3); // show initial screen and wait serial input |
kenjiArai | 18:2a1d75bc8ebc | 280 | myled = 0; |
kenjiArai | 15:065fbeddc305 | 281 | //-- Enter Monitor Mode -- |
kenjiArai | 18:2a1d75bc8ebc | 282 | if (READABLE()){ |
kenjiArai | 18:2a1d75bc8ebc | 283 | lcd.locate(0, 0); |
kenjiArai | 18:2a1d75bc8ebc | 284 | lcd.printf(msg_msg4); |
kenjiArai | 18:2a1d75bc8ebc | 285 | mon(); // mon.cpp |
kenjiArai | 18:2a1d75bc8ebc | 286 | lcd.locate(0, 0); |
kenjiArai | 18:2a1d75bc8ebc | 287 | lcd.printf(msg_msg5); |
kenjiArai | 18:2a1d75bc8ebc | 288 | wait(0.5); |
kenjiArai | 15:065fbeddc305 | 289 | } |
kenjiArai | 15:065fbeddc305 | 290 | //-- Enter Normal Mode -- |
kenjiArai | 15:065fbeddc305 | 291 | while (true) { // Start main program |
kenjiArai | 15:065fbeddc305 | 292 | conv_and_disp(); |
kenjiArai | 15:065fbeddc305 | 293 | } |
kenjiArai | 15:065fbeddc305 | 294 | } |