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
Please see https://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-barometer-with-data-logging/#
main.cpp@10:398f62bb41f7, 2014-06-14 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat Jun 14 01:37:54 2014 +0000
- Revision:
- 10:398f62bb41f7
- Parent:
- 9:ce80da60884a
- Child:
- 11:bccfd75e84a0
Barometer program / Step by step approach -> 4th step,; Added Humidity sensor RHT03 w/ existing Lib.
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 | 7:d3b49f1d9f76 | 3 | * Test program -> Check LED & Switch function |
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 | 7:d3b49f1d9f76 | 8 | * Created: June 13th, 2014 |
kenjiArai | 10:398f62bb41f7 | 9 | * Revised: June 14th, 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 | */ |
dan | 0:7dec7e9ac085 | 17 | #include "mbed.h" |
kenjiArai | 10:398f62bb41f7 | 18 | #include "RHT03.h" //Include neede to use the RHT03 lib |
dan | 0:7dec7e9ac085 | 19 | |
kenjiArai | 9:ce80da60884a | 20 | #define DEBUG_L1 1 // 1=Debug, 0=Normal |
kenjiArai | 9:ce80da60884a | 21 | #define DEBUG_L2 1 // 1=Debug, 0=Normal |
kenjiArai | 8:f6aa5561f219 | 22 | |
kenjiArai | 8:f6aa5561f219 | 23 | #define VREF_VOLT 2.482 // TA76431F Vref real measued data |
kenjiArai | 8:f6aa5561f219 | 24 | #define R_FIX 9930 // 10K ohm <- real measued data |
kenjiArai | 8:f6aa5561f219 | 25 | #define VOL_OFFSET 4 // Offset data ,= real measured data |
kenjiArai | 8:f6aa5561f219 | 26 | #define CDS_TBL_SIZE 13 |
kenjiArai | 7:d3b49f1d9f76 | 27 | |
kenjiArai | 7:d3b49f1d9f76 | 28 | DigitalOut myled0(dp28); // LED for Debug |
kenjiArai | 7:d3b49f1d9f76 | 29 | DigitalOut myled1(dp14); // Indicate state transition |
kenjiArai | 8:f6aa5561f219 | 30 | DigitalOut analog_pwr(dp6); // VCC for analog interface (vol, cds and vref) |
kenjiArai | 8:f6aa5561f219 | 31 | DigitalOut vref_pwr(dp4); // VCC for Vref |
kenjiArai | 7:d3b49f1d9f76 | 32 | DigitalIn sw_chng(dp1,PullUp);// SW for select |
kenjiArai | 7:d3b49f1d9f76 | 33 | DigitalIn sw_mode(dp2,PullUp);// SW for Mode change |
kenjiArai | 8:f6aa5561f219 | 34 | AnalogIn cds(dp11); // Input / CDS data |
kenjiArai | 8:f6aa5561f219 | 35 | AnalogIn vref(dp9); // Input / Bandgap 2.5V |
kenjiArai | 8:f6aa5561f219 | 36 | AnalogIn vol(dp10); // Input / contrast volume |
kenjiArai | 10:398f62bb41f7 | 37 | RHT03 humtemp(dp26); // RHT03 interface |
kenjiArai | 10:398f62bb41f7 | 38 | Serial pc(dp16,dp15); |
kenjiArai | 8:f6aa5561f219 | 39 | |
kenjiArai | 8:f6aa5561f219 | 40 | typedef enum {CDS = 0, VREF, VOL} ADC_Select; |
kenjiArai | 8:f6aa5561f219 | 41 | |
kenjiArai | 9:ce80da60884a | 42 | // ADC |
kenjiArai | 8:f6aa5561f219 | 43 | float av_cds, av_vref, av_vol, cal_vcc; |
kenjiArai | 8:f6aa5561f219 | 44 | float r_cds, lux; |
kenjiArai | 8:f6aa5561f219 | 45 | uint32_t nor_vol; |
kenjiArai | 8:f6aa5561f219 | 46 | |
kenjiArai | 9:ce80da60884a | 47 | // LCD |
kenjiArai | 9:ce80da60884a | 48 | extern unsigned char contrast; |
kenjiArai | 9:ce80da60884a | 49 | char buf[16]; |
kenjiArai | 9:ce80da60884a | 50 | |
kenjiArai | 9:ce80da60884a | 51 | // Barometer |
kenjiArai | 9:ce80da60884a | 52 | extern uint32_t baro_pressure_ave_data; // Temperature /normalized |
kenjiArai | 9:ce80da60884a | 53 | extern int16_t baro_temp_ave_data; |
kenjiArai | 9:ce80da60884a | 54 | extern uint32_t baro_pres_data; // Barometer /normalized |
kenjiArai | 9:ce80da60884a | 55 | extern int16_t baro_temp_data; |
kenjiArai | 9:ce80da60884a | 56 | |
kenjiArai | 10:398f62bb41f7 | 57 | // Humidity Sensor |
kenjiArai | 10:398f62bb41f7 | 58 | float humidity_temp, humidity; |
kenjiArai | 10:398f62bb41f7 | 59 | |
kenjiArai | 8:f6aa5561f219 | 60 | // Cds GL5528 (Dark Resistance 1 Mohm type) SENBA OPTICAL & ELECTRONIC CO.,LTD. |
kenjiArai | 8:f6aa5561f219 | 61 | // Table value referrence: http://homepage3.nifty.com/skomo/f35/hp35_20.htm |
kenjiArai | 8:f6aa5561f219 | 62 | const float lux_cds[CDS_TBL_SIZE][2] = |
kenjiArai | 8:f6aa5561f219 | 63 | {{50,21194},{100,8356},{200,3294},{400,1299},{800,512},{1600,202},{3200,79.6},{6400,31.4}, |
kenjiArai | 8:f6aa5561f219 | 64 | {12800,12.4},{25600,4.88},{51200,1.92},{102400,0.758},{409600,0.118}}; |
kenjiArai | 8:f6aa5561f219 | 65 | |
kenjiArai | 9:ce80da60884a | 66 | #if DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 67 | char *const imsg0 = "-->Control Reg."; |
kenjiArai | 9:ce80da60884a | 68 | char *const imsg1 = "-->Status Reg."; |
kenjiArai | 9:ce80da60884a | 69 | char *const imsg2 = "-->Data Reg."; |
kenjiArai | 9:ce80da60884a | 70 | char *const imsg3 = "-->Clock control Reg."; |
kenjiArai | 9:ce80da60884a | 71 | static char *const io_port_name0 = "PIO0_"; |
kenjiArai | 9:ce80da60884a | 72 | static char *const iomsg0 = "Func->select "; |
kenjiArai | 9:ce80da60884a | 73 | static char *const iomsg1 = "IO"; |
kenjiArai | 9:ce80da60884a | 74 | static char *const iomsg2 = "Reserved"; |
kenjiArai | 9:ce80da60884a | 75 | static char *const iomsg3 = "Std/F-md I2C"; |
kenjiArai | 9:ce80da60884a | 76 | #endif // DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 77 | |
kenjiArai | 9:ce80da60884a | 78 | // Functions |
kenjiArai | 9:ce80da60884a | 79 | // Barometer |
kenjiArai | 9:ce80da60884a | 80 | void baro_st_conv_temp( void ); // Start Conversion |
kenjiArai | 9:ce80da60884a | 81 | void baro_st_conv_press( void ); // Start Conversion |
kenjiArai | 9:ce80da60884a | 82 | void baro_rd_temp( void ); // Receive Press. & Temp. |
kenjiArai | 9:ce80da60884a | 83 | void baro_rd_press( void ); // Receive Press. & Temp. |
kenjiArai | 9:ce80da60884a | 84 | void baro_rd_coefficient( void ); // Receive Coefficient data |
kenjiArai | 9:ce80da60884a | 85 | void baro_rd_id( void ); // Receive Chip ID |
kenjiArai | 9:ce80da60884a | 86 | void cal_pressure( void ); // Calculate Pressure |
kenjiArai | 9:ce80da60884a | 87 | // LCD |
kenjiArai | 9:ce80da60884a | 88 | void lcd_init(); // Initialize LCD |
kenjiArai | 9:ce80da60884a | 89 | void lcd_printStr(const char *s); // Put strings |
kenjiArai | 9:ce80da60884a | 90 | void lcd_setCursor(unsigned char x,unsigned char y); // Set cursor position |
kenjiArai | 9:ce80da60884a | 91 | void setContrast(unsigned char c); // Set contrast |
kenjiArai | 9:ce80da60884a | 92 | |
kenjiArai | 9:ce80da60884a | 93 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 9:ce80da60884a | 94 | // Control Program |
kenjiArai | 9:ce80da60884a | 95 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 9:ce80da60884a | 96 | #if DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 97 | // Put \r\n |
kenjiArai | 9:ce80da60884a | 98 | void put_rn ( void ){ |
kenjiArai | 9:ce80da60884a | 99 | pc.putc('\r'); |
kenjiArai | 9:ce80da60884a | 100 | pc.putc('\n'); |
kenjiArai | 9:ce80da60884a | 101 | } |
kenjiArai | 9:ce80da60884a | 102 | |
kenjiArai | 9:ce80da60884a | 103 | // Put \r |
kenjiArai | 9:ce80da60884a | 104 | void put_r ( void ){ |
kenjiArai | 9:ce80da60884a | 105 | pc.putc('\r'); |
kenjiArai | 9:ce80da60884a | 106 | } |
kenjiArai | 9:ce80da60884a | 107 | |
kenjiArai | 9:ce80da60884a | 108 | // Put ", " |
kenjiArai | 9:ce80da60884a | 109 | void put_lin ( void ){ |
kenjiArai | 9:ce80da60884a | 110 | pc.printf(", "); |
kenjiArai | 9:ce80da60884a | 111 | } |
kenjiArai | 9:ce80da60884a | 112 | |
kenjiArai | 9:ce80da60884a | 113 | void debug_port_check( void ){ |
kenjiArai | 9:ce80da60884a | 114 | uint32_t r0,r1,r2,r3,r4,r5,r6,r7; |
kenjiArai | 9:ce80da60884a | 115 | // Show registers |
kenjiArai | 9:ce80da60884a | 116 | put_rn(); |
kenjiArai | 9:ce80da60884a | 117 | pc.printf( "------- Show Registers -------" ); |
kenjiArai | 9:ce80da60884a | 118 | put_rn(); |
kenjiArai | 9:ce80da60884a | 119 | pc.printf( "**** P0_4,P0_5 Port usage ****" ); |
kenjiArai | 9:ce80da60884a | 120 | put_rn(); |
kenjiArai | 9:ce80da60884a | 121 | // P0_4 |
kenjiArai | 9:ce80da60884a | 122 | r0 = LPC_IOCON->PIO0_4; |
kenjiArai | 9:ce80da60884a | 123 | pc.printf( "%s4(dp27)",io_port_name0 ); |
kenjiArai | 9:ce80da60884a | 124 | pc.printf( " 0x%08x", r0 ); |
kenjiArai | 9:ce80da60884a | 125 | put_rn(); |
kenjiArai | 9:ce80da60884a | 126 | pc.printf( iomsg0 ); |
kenjiArai | 9:ce80da60884a | 127 | switch ( r0 & 0x7 ){ |
kenjiArai | 9:ce80da60884a | 128 | case 0: pc.printf( iomsg1 ); break; |
kenjiArai | 9:ce80da60884a | 129 | case 1: pc.printf("SCL"); break; |
kenjiArai | 9:ce80da60884a | 130 | } |
kenjiArai | 9:ce80da60884a | 131 | put_lin(); |
kenjiArai | 9:ce80da60884a | 132 | switch ( ( r0 >> 8 ) & 0x3 ){ |
kenjiArai | 9:ce80da60884a | 133 | case 0: pc.printf( iomsg3 ); break; |
kenjiArai | 9:ce80da60884a | 134 | case 1: pc.printf( iomsg1); break; |
kenjiArai | 9:ce80da60884a | 135 | case 2: pc.printf("Fast md"); break; |
kenjiArai | 9:ce80da60884a | 136 | case 3: pc.printf( iomsg2 ); break; |
kenjiArai | 9:ce80da60884a | 137 | } |
kenjiArai | 9:ce80da60884a | 138 | put_rn(); |
kenjiArai | 9:ce80da60884a | 139 | // P0_5 |
kenjiArai | 9:ce80da60884a | 140 | r0 = LPC_IOCON->PIO0_5; |
kenjiArai | 9:ce80da60884a | 141 | pc.printf( "%s5(dp5)",io_port_name0 ); |
kenjiArai | 9:ce80da60884a | 142 | pc.printf( " 0x%08x", r0 ); |
kenjiArai | 9:ce80da60884a | 143 | put_rn(); |
kenjiArai | 9:ce80da60884a | 144 | pc.printf( iomsg0 ); |
kenjiArai | 9:ce80da60884a | 145 | switch ( r0 & 0x7 ){ |
kenjiArai | 9:ce80da60884a | 146 | case 0: pc.printf( iomsg1 ); break; |
kenjiArai | 9:ce80da60884a | 147 | case 1: pc.printf("SDA"); break; |
kenjiArai | 9:ce80da60884a | 148 | } |
kenjiArai | 9:ce80da60884a | 149 | put_lin(); |
kenjiArai | 9:ce80da60884a | 150 | switch ( ( r0 >> 8 ) & 0x3 ){ |
kenjiArai | 9:ce80da60884a | 151 | case 0: pc.printf( iomsg3 ); break; |
kenjiArai | 9:ce80da60884a | 152 | case 1: pc.printf( iomsg1 ); break; |
kenjiArai | 9:ce80da60884a | 153 | case 2: pc.printf("Fast md"); break; |
kenjiArai | 9:ce80da60884a | 154 | case 3: pc.printf( iomsg2 ); break; |
kenjiArai | 9:ce80da60884a | 155 | } |
kenjiArai | 9:ce80da60884a | 156 | put_rn(); |
kenjiArai | 9:ce80da60884a | 157 | // I2C Control register |
kenjiArai | 9:ce80da60884a | 158 | r0 = LPC_I2C->CONSET; |
kenjiArai | 9:ce80da60884a | 159 | r1 = LPC_I2C->STAT; |
kenjiArai | 9:ce80da60884a | 160 | r2 = LPC_I2C->DAT; |
kenjiArai | 9:ce80da60884a | 161 | r3 = LPC_I2C->SCLH; |
kenjiArai | 9:ce80da60884a | 162 | r4 = LPC_I2C->SCLL; |
kenjiArai | 9:ce80da60884a | 163 | r5 = LPC_I2C->CONCLR; |
kenjiArai | 9:ce80da60884a | 164 | r6 = LPC_I2C->MMCTRL; |
kenjiArai | 9:ce80da60884a | 165 | r7 = LPC_I2C->DATA_BUFFER; |
kenjiArai | 9:ce80da60884a | 166 | pc.printf( "**** Show I2C Registers ****" ); |
kenjiArai | 9:ce80da60884a | 167 | put_rn(); |
kenjiArai | 9:ce80da60884a | 168 | pc.printf( "CONSET" ); |
kenjiArai | 9:ce80da60884a | 169 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 170 | pc.printf( " 0x%08x", r0 ); |
kenjiArai | 9:ce80da60884a | 171 | put_rn(); |
kenjiArai | 9:ce80da60884a | 172 | pc.printf( "STAT" ); |
kenjiArai | 9:ce80da60884a | 173 | pc.printf( imsg1 ); |
kenjiArai | 9:ce80da60884a | 174 | pc.printf( " 0x%08x", r1 ); |
kenjiArai | 9:ce80da60884a | 175 | put_rn(); |
kenjiArai | 9:ce80da60884a | 176 | pc.printf( "DAT" ); |
kenjiArai | 9:ce80da60884a | 177 | pc.printf( imsg2 ); |
kenjiArai | 9:ce80da60884a | 178 | pc.printf( " 0x%08x", r2 ); |
kenjiArai | 9:ce80da60884a | 179 | put_rn(); |
kenjiArai | 9:ce80da60884a | 180 | pc.printf( "ADR0--Not support" ); |
kenjiArai | 9:ce80da60884a | 181 | put_rn(); |
kenjiArai | 9:ce80da60884a | 182 | pc.printf( "SCLH" ); |
kenjiArai | 9:ce80da60884a | 183 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 184 | pc.printf( " 0x%08x", r3 ); |
kenjiArai | 9:ce80da60884a | 185 | put_rn(); |
kenjiArai | 9:ce80da60884a | 186 | pc.printf( "SCLL" ); |
kenjiArai | 9:ce80da60884a | 187 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 188 | pc.printf( " 0x%08x", r4 ); |
kenjiArai | 9:ce80da60884a | 189 | put_rn(); |
kenjiArai | 9:ce80da60884a | 190 | pc.printf( "CONCLR" ); |
kenjiArai | 9:ce80da60884a | 191 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 192 | pc.printf( " 0x%08x", r5 ); |
kenjiArai | 9:ce80da60884a | 193 | put_rn(); |
kenjiArai | 9:ce80da60884a | 194 | pc.printf( "MMCTRL" ); |
kenjiArai | 9:ce80da60884a | 195 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 196 | pc.printf( " 0x%08x", r6 ); |
kenjiArai | 9:ce80da60884a | 197 | put_rn(); |
kenjiArai | 9:ce80da60884a | 198 | pc.printf( "ADR1,2,3--Not support" ); |
kenjiArai | 9:ce80da60884a | 199 | put_rn(); |
kenjiArai | 9:ce80da60884a | 200 | pc.printf( "DATA_BUFFER" ); |
kenjiArai | 9:ce80da60884a | 201 | pc.printf( imsg3 ); |
kenjiArai | 9:ce80da60884a | 202 | pc.printf( " 0x%08x", r7 ); |
kenjiArai | 9:ce80da60884a | 203 | put_rn(); |
kenjiArai | 9:ce80da60884a | 204 | pc.printf( "MASK0,1,2,3--Not support" ); |
kenjiArai | 9:ce80da60884a | 205 | put_rn(); |
kenjiArai | 9:ce80da60884a | 206 | } |
kenjiArai | 9:ce80da60884a | 207 | #endif // DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 208 | |
kenjiArai | 8:f6aa5561f219 | 209 | void adc_normalize( ADC_Select n ){ |
kenjiArai | 8:f6aa5561f219 | 210 | int i; |
kenjiArai | 8:f6aa5561f219 | 211 | float x1,y1,dx; |
kenjiArai | 8:f6aa5561f219 | 212 | |
kenjiArai | 8:f6aa5561f219 | 213 | switch (n){ |
kenjiArai | 8:f6aa5561f219 | 214 | case CDS: |
kenjiArai | 8:f6aa5561f219 | 215 | // v_adc = Rfix / (Rcds + Rfix) |
kenjiArai | 8:f6aa5561f219 | 216 | // Rcds = ( Rfix / v_adc ) - Rfix |
kenjiArai | 8:f6aa5561f219 | 217 | r_cds = (R_FIX / av_cds) - R_FIX; |
kenjiArai | 8:f6aa5561f219 | 218 | // CDS resistance to Lux conversion using convertion table (luc_cds[][]) |
kenjiArai | 8:f6aa5561f219 | 219 | // with Linear interpolation method |
kenjiArai | 8:f6aa5561f219 | 220 | for (i =0; i < CDS_TBL_SIZE; i++){ |
kenjiArai | 8:f6aa5561f219 | 221 | if ( r_cds <= lux_cds[i][0]){ |
kenjiArai | 8:f6aa5561f219 | 222 | break; |
kenjiArai | 8:f6aa5561f219 | 223 | } |
kenjiArai | 8:f6aa5561f219 | 224 | } |
kenjiArai | 9:ce80da60884a | 225 | #if DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 226 | pc.printf( "i=%d, ", i ); |
kenjiArai | 9:ce80da60884a | 227 | #endif // DEBUG_L1 |
kenjiArai | 8:f6aa5561f219 | 228 | if (i == 0){ |
kenjiArai | 8:f6aa5561f219 | 229 | lux = lux_cds[0][1]; |
kenjiArai | 9:ce80da60884a | 230 | #if DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 231 | pc.printf( "range over!\r\n" ); |
kenjiArai | 9:ce80da60884a | 232 | #endif // DEBUG_L1 |
kenjiArai | 8:f6aa5561f219 | 233 | } else if ( i == CDS_TBL_SIZE ){ |
kenjiArai | 9:ce80da60884a | 234 | if ( r_cds <= lux_cds[i][0] ){ |
kenjiArai | 8:f6aa5561f219 | 235 | lux = lux_cds[i-1][1]; |
kenjiArai | 8:f6aa5561f219 | 236 | } |
kenjiArai | 8:f6aa5561f219 | 237 | } else { |
kenjiArai | 9:ce80da60884a | 238 | if ( i == CDS_TBL_SIZE ){ |
kenjiArai | 9:ce80da60884a | 239 | if ( r_cds <= lux_cds[i][0] ){ |
kenjiArai | 9:ce80da60884a | 240 | lux = lux_cds[i-1][1]; |
kenjiArai | 9:ce80da60884a | 241 | #if DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 242 | pc.printf("range over!\r\n"); |
kenjiArai | 9:ce80da60884a | 243 | #endif // DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 244 | break; |
kenjiArai | 9:ce80da60884a | 245 | } |
kenjiArai | 9:ce80da60884a | 246 | } |
kenjiArai | 8:f6aa5561f219 | 247 | y1 = lux_cds[i-1][1] - lux_cds[i][1]; |
kenjiArai | 8:f6aa5561f219 | 248 | x1 = lux_cds[i][0] - lux_cds[i-1][0]; |
kenjiArai | 8:f6aa5561f219 | 249 | dx = r_cds - lux_cds[i-1][0]; |
kenjiArai | 8:f6aa5561f219 | 250 | lux = lux_cds[i-1][1] - ((dx/x1) * y1); |
kenjiArai | 9:ce80da60884a | 251 | #if DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 252 | pc.printf( "y1:%f, x1:%f, dx:%f, lux_tbl:%f\r\n", y1, x1, dx, lux_cds[i-1][1] ); |
kenjiArai | 9:ce80da60884a | 253 | #endif // DEBUG_L1 |
kenjiArai | 8:f6aa5561f219 | 254 | } |
kenjiArai | 8:f6aa5561f219 | 255 | break; |
kenjiArai | 8:f6aa5561f219 | 256 | case VREF: |
kenjiArai | 8:f6aa5561f219 | 257 | // vref = VREF_VOLT / VCC -> VCC = VREF_VOLT / vref |
kenjiArai | 8:f6aa5561f219 | 258 | cal_vcc = VREF_VOLT / vref; |
kenjiArai | 8:f6aa5561f219 | 259 | break; |
kenjiArai | 8:f6aa5561f219 | 260 | case VOL: |
kenjiArai | 8:f6aa5561f219 | 261 | // Vol center = 1.00 (actual 100) |
kenjiArai | 8:f6aa5561f219 | 262 | nor_vol = (uint32_t)(av_vol * 200) + VOL_OFFSET; |
kenjiArai | 8:f6aa5561f219 | 263 | break; |
kenjiArai | 8:f6aa5561f219 | 264 | } |
kenjiArai | 8:f6aa5561f219 | 265 | } |
kenjiArai | 8:f6aa5561f219 | 266 | |
kenjiArai | 8:f6aa5561f219 | 267 | void adc_all_read( void){ |
kenjiArai | 10:398f62bb41f7 | 268 | if ( av_cds == 0 ){ |
kenjiArai | 10:398f62bb41f7 | 269 | av_cds = cds.read(); |
kenjiArai | 10:398f62bb41f7 | 270 | } else { |
kenjiArai | 10:398f62bb41f7 | 271 | av_cds = av_cds *0.5 + cds.read() * 0.5; |
kenjiArai | 10:398f62bb41f7 | 272 | } |
kenjiArai | 10:398f62bb41f7 | 273 | if ( av_vref == 0 ){ |
kenjiArai | 10:398f62bb41f7 | 274 | av_vref = vref.read(); |
kenjiArai | 10:398f62bb41f7 | 275 | } else { |
kenjiArai | 10:398f62bb41f7 | 276 | av_vref = av_vref *0.9 + vref.read() * 0.1; |
kenjiArai | 10:398f62bb41f7 | 277 | } |
kenjiArai | 10:398f62bb41f7 | 278 | if ( av_vol == 0 ){ |
kenjiArai | 10:398f62bb41f7 | 279 | av_vol = vol.read(); |
kenjiArai | 10:398f62bb41f7 | 280 | } else { |
kenjiArai | 10:398f62bb41f7 | 281 | av_vol = av_vol *0.2 + vol.read() * 0.8; |
kenjiArai | 10:398f62bb41f7 | 282 | } |
kenjiArai | 8:f6aa5561f219 | 283 | } |
kenjiArai | 8:f6aa5561f219 | 284 | |
kenjiArai | 10:398f62bb41f7 | 285 | void hum_RHT03_read( void){ |
kenjiArai | 10:398f62bb41f7 | 286 | while (true){ |
kenjiArai | 10:398f62bb41f7 | 287 | if ( humtemp.readData() == RHT_ERROR_NONE ){ //Request data from the RHT03 |
kenjiArai | 10:398f62bb41f7 | 288 | break; |
kenjiArai | 10:398f62bb41f7 | 289 | } |
kenjiArai | 10:398f62bb41f7 | 290 | } |
kenjiArai | 10:398f62bb41f7 | 291 | if ( humidity_temp == 0 ){ |
kenjiArai | 10:398f62bb41f7 | 292 | humidity_temp = humtemp.getTemperatureC(); |
kenjiArai | 10:398f62bb41f7 | 293 | } else { |
kenjiArai | 10:398f62bb41f7 | 294 | humidity_temp = humidity_temp * 0.9 + humtemp.getTemperatureC() * 0.1; |
kenjiArai | 10:398f62bb41f7 | 295 | } |
kenjiArai | 10:398f62bb41f7 | 296 | if ( humidity == 0 ){ |
kenjiArai | 10:398f62bb41f7 | 297 | humidity = humtemp.getHumidity(); |
kenjiArai | 10:398f62bb41f7 | 298 | } else { |
kenjiArai | 10:398f62bb41f7 | 299 | humidity = humidity * 0.9 + humtemp.getHumidity() * 0.1; |
kenjiArai | 10:398f62bb41f7 | 300 | } |
kenjiArai | 8:f6aa5561f219 | 301 | } |
dan | 0:7dec7e9ac085 | 302 | |
dan | 0:7dec7e9ac085 | 303 | int main() { |
kenjiArai | 9:ce80da60884a | 304 | uint16_t dt; |
kenjiArai | 9:ce80da60884a | 305 | |
kenjiArai | 8:f6aa5561f219 | 306 | pc.baud(9600); |
kenjiArai | 9:ce80da60884a | 307 | pc.printf( "\r\nmbed LPC1114FN28 test program by JH1PJL created on "__DATE__"\r\n" ); |
kenjiArai | 9:ce80da60884a | 308 | // Initialize LCD |
kenjiArai | 9:ce80da60884a | 309 | lcd_init(); |
kenjiArai | 9:ce80da60884a | 310 | contrast = 25; |
kenjiArai | 9:ce80da60884a | 311 | setContrast(contrast); |
kenjiArai | 9:ce80da60884a | 312 | //Initial screen shot |
kenjiArai | 9:ce80da60884a | 313 | lcd_setCursor(0, 0); |
kenjiArai | 9:ce80da60884a | 314 | // 12345678 |
kenjiArai | 9:ce80da60884a | 315 | lcd_printStr("LPC1114F"); |
kenjiArai | 9:ce80da60884a | 316 | lcd_setCursor(0, 1); |
kenjiArai | 9:ce80da60884a | 317 | // 12345678 |
kenjiArai | 9:ce80da60884a | 318 | lcd_printStr(" JH1PJL "); |
kenjiArai | 9:ce80da60884a | 319 | // Read BMP180 data / only once |
kenjiArai | 9:ce80da60884a | 320 | baro_rd_id(); |
kenjiArai | 9:ce80da60884a | 321 | baro_rd_coefficient(); |
kenjiArai | 10:398f62bb41f7 | 322 | // Show initial screen |
kenjiArai | 9:ce80da60884a | 323 | wait(5.0); |
kenjiArai | 10:398f62bb41f7 | 324 | // Initialize data |
kenjiArai | 10:398f62bb41f7 | 325 | av_cds = 0; |
kenjiArai | 10:398f62bb41f7 | 326 | av_vref = 0; |
kenjiArai | 10:398f62bb41f7 | 327 | av_vol = 0; |
kenjiArai | 10:398f62bb41f7 | 328 | humidity_temp = 0; |
kenjiArai | 10:398f62bb41f7 | 329 | humidity = 0; |
kenjiArai | 7:d3b49f1d9f76 | 330 | while(1) { |
kenjiArai | 10:398f62bb41f7 | 331 | // ---------- Cds Sensor, Vref, Volume --------------------------------------------------- |
kenjiArai | 9:ce80da60884a | 332 | // Power on / Analog sensor |
kenjiArai | 8:f6aa5561f219 | 333 | analog_pwr = 1; |
kenjiArai | 8:f6aa5561f219 | 334 | vref_pwr = 1; |
kenjiArai | 8:f6aa5561f219 | 335 | wait(0.2); |
kenjiArai | 8:f6aa5561f219 | 336 | adc_all_read(); |
kenjiArai | 9:ce80da60884a | 337 | // Power off / Analog sensor |
kenjiArai | 9:ce80da60884a | 338 | analog_pwr = 0; |
kenjiArai | 9:ce80da60884a | 339 | //vref_pwr = 0; |
kenjiArai | 9:ce80da60884a | 340 | // Normalize |
kenjiArai | 8:f6aa5561f219 | 341 | adc_normalize( CDS ); |
kenjiArai | 8:f6aa5561f219 | 342 | adc_normalize( VREF ); |
kenjiArai | 9:ce80da60884a | 343 | adc_normalize( VOL ); |
kenjiArai | 8:f6aa5561f219 | 344 | myled0 = 1; |
kenjiArai | 8:f6aa5561f219 | 345 | if (sw_chng == 1){ // SW Off |
kenjiArai | 9:ce80da60884a | 346 | pc.printf( "\r\nCds:%.0fohm -> %.1flux, Vcc:%.3fV, Vol:%d\r\n", |
kenjiArai | 9:ce80da60884a | 347 | r_cds, lux, cal_vcc, nor_vol ); |
kenjiArai | 8:f6aa5561f219 | 348 | } else { // SW On |
kenjiArai | 9:ce80da60884a | 349 | pc.printf( "\r\nCds:%f, Vref:%f, Vol:%f\r\n", av_cds, av_vref, av_vol ); |
kenjiArai | 7:d3b49f1d9f76 | 350 | } |
kenjiArai | 8:f6aa5561f219 | 351 | myled0 = 0; |
kenjiArai | 9:ce80da60884a | 352 | lcd_setCursor(0, 0); // 1st line top |
kenjiArai | 9:ce80da60884a | 353 | dt = (uint16_t)(lux * 10); |
kenjiArai | 9:ce80da60884a | 354 | //sprintf( buf,"l: %4.1f ", lux ); |
kenjiArai | 9:ce80da60884a | 355 | sprintf( buf,"L:%4d.%01d ", dt / 10, dt % 10 ); |
kenjiArai | 9:ce80da60884a | 356 | lcd_printStr(buf); |
kenjiArai | 9:ce80da60884a | 357 | lcd_setCursor(0, 1); // 2nd line top |
kenjiArai | 9:ce80da60884a | 358 | sprintf( buf,"V: %1.3f ", cal_vcc ); |
kenjiArai | 9:ce80da60884a | 359 | lcd_printStr(buf); |
kenjiArai | 10:398f62bb41f7 | 360 | wait(2.0); |
kenjiArai | 10:398f62bb41f7 | 361 | // ---------- Barometer Sensor / BMP180 -------------------------------------------------- |
kenjiArai | 9:ce80da60884a | 362 | baro_st_conv_temp(); // start temprerature measurment |
kenjiArai | 9:ce80da60884a | 363 | wait(0.25); // wait for convertion |
kenjiArai | 9:ce80da60884a | 364 | baro_rd_temp(); // read it |
kenjiArai | 9:ce80da60884a | 365 | baro_st_conv_press(); // start pressure measurement |
kenjiArai | 9:ce80da60884a | 366 | wait(0.5); // wait for convertion |
kenjiArai | 9:ce80da60884a | 367 | baro_rd_press(); // read it |
kenjiArai | 9:ce80da60884a | 368 | cal_pressure(); // Calculate baro & temp. |
kenjiArai | 9:ce80da60884a | 369 | lcd_setCursor(0, 0); // 1st line top |
kenjiArai | 9:ce80da60884a | 370 | sprintf( buf,"P:%4d.%01d ", baro_pres_data / 100, ( baro_pres_data % 100 ) /10 ); |
kenjiArai | 9:ce80da60884a | 371 | lcd_printStr(buf); |
kenjiArai | 9:ce80da60884a | 372 | lcd_setCursor(0, 1); // 2nd line top |
kenjiArai | 9:ce80da60884a | 373 | if (sw_chng == 0){ // SW ON |
kenjiArai | 9:ce80da60884a | 374 | baro_temp_data = -100; // Dummy -10.0 degC -> Test printf() minus display |
kenjiArai | 9:ce80da60884a | 375 | } |
kenjiArai | 9:ce80da60884a | 376 | sprintf( buf,"T: %\+-d.%01d ", baro_temp_data / 10, baro_temp_data% 10 ); |
kenjiArai | 9:ce80da60884a | 377 | lcd_printStr(buf); |
kenjiArai | 9:ce80da60884a | 378 | myled1 = 1; |
kenjiArai | 9:ce80da60884a | 379 | pc.printf( "Pres:%4d.%01dhPa, Temp:%\+-d.%01ddegC\r\n", |
kenjiArai | 9:ce80da60884a | 380 | baro_pres_data / 100, ( baro_pres_data % 100 ) /10, |
kenjiArai | 9:ce80da60884a | 381 | baro_temp_data / 10, baro_temp_data% 10 ); |
kenjiArai | 8:f6aa5561f219 | 382 | myled1 = 0; |
kenjiArai | 10:398f62bb41f7 | 383 | wait(4.0); |
kenjiArai | 10:398f62bb41f7 | 384 | // ---------- Humidity Sensor / RHT03 ---------------------------------------------------- |
kenjiArai | 10:398f62bb41f7 | 385 | hum_RHT03_read(); // Read Humidity data then avaraging |
kenjiArai | 10:398f62bb41f7 | 386 | lcd_setCursor(0, 0); // 1st line top |
kenjiArai | 10:398f62bb41f7 | 387 | dt = (uint16_t)(lux * 10); |
kenjiArai | 10:398f62bb41f7 | 388 | //sprintf( buf,"l: %4.1f ", lux ); |
kenjiArai | 10:398f62bb41f7 | 389 | sprintf( buf,"H: %2.1f ", humidity ); |
kenjiArai | 10:398f62bb41f7 | 390 | lcd_printStr(buf); |
kenjiArai | 10:398f62bb41f7 | 391 | lcd_setCursor(0, 1); // 2nd line top |
kenjiArai | 10:398f62bb41f7 | 392 | sprintf( buf,"T: %\+-0.1f", humidity_temp ); |
kenjiArai | 10:398f62bb41f7 | 393 | lcd_printStr(buf); |
kenjiArai | 10:398f62bb41f7 | 394 | myled1 = 1; |
kenjiArai | 10:398f62bb41f7 | 395 | pc.printf( "Humid: %0.1f%cRH, Temp:%\+-0.1fdegC\r\n", humidity, '%', humidity_temp ); |
kenjiArai | 10:398f62bb41f7 | 396 | myled1 = 0; |
kenjiArai | 10:398f62bb41f7 | 397 | wait(2.0); |
kenjiArai | 9:ce80da60884a | 398 | #if DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 399 | debug_port_check(); |
kenjiArai | 10:398f62bb41f7 | 400 | #endif // DEBUG_L2 |
kenjiArai | 7:d3b49f1d9f76 | 401 | } |
dan | 0:7dec7e9ac085 | 402 | } |