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:
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?

UserRevisionLine numberNew 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 }