Dependencies: ChaNFSSD mbed BMP085 SHT2x
main.cpp@0:6089ae824f06, 2011-12-26 (annotated)
- Committer:
- tosihisa
- Date:
- Mon Dec 26 15:58:32 2011 +0000
- Revision:
- 0:6089ae824f06
- Child:
- 1:83960ee4d9a2
1st Release
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tosihisa | 0:6089ae824f06 | 1 | #include "mbed.h" |
tosihisa | 0:6089ae824f06 | 2 | #include "NMEA_parse.h" |
tosihisa | 0:6089ae824f06 | 3 | #include "SDFileSystem.h" |
tosihisa | 0:6089ae824f06 | 4 | #include "libT/mbed/tserialbuffer.h" |
tosihisa | 0:6089ae824f06 | 5 | #include "BMP085.h" |
tosihisa | 0:6089ae824f06 | 6 | #include "SHT25.h" |
tosihisa | 0:6089ae824f06 | 7 | #include "SHT2x.h" |
tosihisa | 0:6089ae824f06 | 8 | #include "AD7994.h" |
tosihisa | 0:6089ae824f06 | 9 | //#include "TextLCD.h" |
tosihisa | 0:6089ae824f06 | 10 | #include "TextLCD_20X4.h" |
tosihisa | 0:6089ae824f06 | 11 | |
tosihisa | 0:6089ae824f06 | 12 | using namespace libT; |
tosihisa | 0:6089ae824f06 | 13 | |
tosihisa | 0:6089ae824f06 | 14 | //#define HAVE_CO2 |
tosihisa | 0:6089ae824f06 | 15 | |
tosihisa | 0:6089ae824f06 | 16 | #define _USE_FS_NAME "sd" |
tosihisa | 0:6089ae824f06 | 17 | |
tosihisa | 0:6089ae824f06 | 18 | Serial debug(USBTX,USBRX); |
tosihisa | 0:6089ae824f06 | 19 | |
tosihisa | 0:6089ae824f06 | 20 | DigitalIn gps_int0(p24); |
tosihisa | 0:6089ae824f06 | 21 | DigitalOut gps_reset(p25); |
tosihisa | 0:6089ae824f06 | 22 | InterruptIn gps_pps(p26); |
tosihisa | 0:6089ae824f06 | 23 | tSerialBuffer gps(p28,p27); |
tosihisa | 0:6089ae824f06 | 24 | DigitalOut gps_pps_led(LED2); |
tosihisa | 0:6089ae824f06 | 25 | //I2C i2c(p9, p10); // sda, scl |
tosihisa | 0:6089ae824f06 | 26 | BMP085 bmp085(p9, p10); |
tosihisa | 0:6089ae824f06 | 27 | //SHT25 sht25(p9, p10); |
tosihisa | 0:6089ae824f06 | 28 | //SHT2x sht25(p9,p10); |
tosihisa | 0:6089ae824f06 | 29 | AD7994 ad7994(p9,p10); |
tosihisa | 0:6089ae824f06 | 30 | TextLCD_20X4 lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7 |
tosihisa | 0:6089ae824f06 | 31 | |
tosihisa | 0:6089ae824f06 | 32 | //SDFileSystem sd(p5, p6, p7, p8, _USE_FS_NAME); |
tosihisa | 0:6089ae824f06 | 33 | |
tosihisa | 0:6089ae824f06 | 34 | DigitalOut myled(LED1); |
tosihisa | 0:6089ae824f06 | 35 | |
tosihisa | 0:6089ae824f06 | 36 | #ifdef HAVE_CO2 |
tosihisa | 0:6089ae824f06 | 37 | tSerialBuffer CO2(p13,p14); |
tosihisa | 0:6089ae824f06 | 38 | #endif |
tosihisa | 0:6089ae824f06 | 39 | |
tosihisa | 0:6089ae824f06 | 40 | int pps_count = 0; |
tosihisa | 0:6089ae824f06 | 41 | void gps_pps_rise() |
tosihisa | 0:6089ae824f06 | 42 | { |
tosihisa | 0:6089ae824f06 | 43 | gps_pps_led = ((pps_count+=1) & 1) ? 1 : 0; |
tosihisa | 0:6089ae824f06 | 44 | } |
tosihisa | 0:6089ae824f06 | 45 | |
tosihisa | 0:6089ae824f06 | 46 | void logFile_Init() |
tosihisa | 0:6089ae824f06 | 47 | { |
tosihisa | 0:6089ae824f06 | 48 | DIR *d; |
tosihisa | 0:6089ae824f06 | 49 | struct dirent *p; |
tosihisa | 0:6089ae824f06 | 50 | |
tosihisa | 0:6089ae824f06 | 51 | d = opendir("/" _USE_FS_NAME); |
tosihisa | 0:6089ae824f06 | 52 | if ( d != NULL ) { |
tosihisa | 0:6089ae824f06 | 53 | while ( (p = readdir(d)) != NULL ) { |
tosihisa | 0:6089ae824f06 | 54 | debug.printf("FILE - %s\x0d\x0a", p->d_name); |
tosihisa | 0:6089ae824f06 | 55 | } |
tosihisa | 0:6089ae824f06 | 56 | closedir(d); |
tosihisa | 0:6089ae824f06 | 57 | } |
tosihisa | 0:6089ae824f06 | 58 | } |
tosihisa | 0:6089ae824f06 | 59 | |
tosihisa | 0:6089ae824f06 | 60 | void FileWriteTest() |
tosihisa | 0:6089ae824f06 | 61 | { |
tosihisa | 0:6089ae824f06 | 62 | FILE *fp; |
tosihisa | 0:6089ae824f06 | 63 | char *logname = "/" _USE_FS_NAME "/MBEDLOG.TXT"; |
tosihisa | 0:6089ae824f06 | 64 | |
tosihisa | 0:6089ae824f06 | 65 | debug.printf("FileWriteTest() open(%s) :", logname); |
tosihisa | 0:6089ae824f06 | 66 | fp = fopen(logname,"a+w"); |
tosihisa | 0:6089ae824f06 | 67 | if(fp == NULL){ |
tosihisa | 0:6089ae824f06 | 68 | printf("NG\n"); |
tosihisa | 0:6089ae824f06 | 69 | return; |
tosihisa | 0:6089ae824f06 | 70 | } |
tosihisa | 0:6089ae824f06 | 71 | printf("OK\n"); |
tosihisa | 0:6089ae824f06 | 72 | fprintf(fp,"ENV Logger \"V1\" Start (BUILD:[" __DATE__ "/" __TIME__ "])\x0d\x0a"); |
tosihisa | 0:6089ae824f06 | 73 | fclose(fp); |
tosihisa | 0:6089ae824f06 | 74 | } |
tosihisa | 0:6089ae824f06 | 75 | |
tosihisa | 0:6089ae824f06 | 76 | #ifdef HAVE_CO2 /* { */ |
tosihisa | 0:6089ae824f06 | 77 | int CO2_Read(unsigned short *val) |
tosihisa | 0:6089ae824f06 | 78 | { |
tosihisa | 0:6089ae824f06 | 79 | unsigned char sbuf[] = { 0xFE, 0x04, 0x00, 0x03, 0x00, 0x01, 0xD5, 0xC5 }; |
tosihisa | 0:6089ae824f06 | 80 | unsigned char rbuf[7]; |
tosihisa | 0:6089ae824f06 | 81 | int i; |
tosihisa | 0:6089ae824f06 | 82 | unsigned short crc; |
tosihisa | 0:6089ae824f06 | 83 | extern unsigned short modbus_CRC(unsigned char *DataPtr, unsigned short len); |
tosihisa | 0:6089ae824f06 | 84 | |
tosihisa | 0:6089ae824f06 | 85 | for(i=0;i < sizeof(sbuf);i++){ |
tosihisa | 0:6089ae824f06 | 86 | //debug.printf("0x%02x ",sbuf[i]); |
tosihisa | 0:6089ae824f06 | 87 | CO2.putc(sbuf[i]); |
tosihisa | 0:6089ae824f06 | 88 | } |
tosihisa | 0:6089ae824f06 | 89 | for(i=0;i < sizeof(rbuf);i++){ |
tosihisa | 0:6089ae824f06 | 90 | while(!CO2.readable()){} |
tosihisa | 0:6089ae824f06 | 91 | rbuf[i] = CO2.getc(); |
tosihisa | 0:6089ae824f06 | 92 | } |
tosihisa | 0:6089ae824f06 | 93 | crc = rbuf[6]; |
tosihisa | 0:6089ae824f06 | 94 | crc = (crc << 8) | rbuf[5]; |
tosihisa | 0:6089ae824f06 | 95 | if(crc != modbus_CRC(rbuf,5)){ |
tosihisa | 0:6089ae824f06 | 96 | return -1; |
tosihisa | 0:6089ae824f06 | 97 | } |
tosihisa | 0:6089ae824f06 | 98 | |
tosihisa | 0:6089ae824f06 | 99 | *val = rbuf[3]; |
tosihisa | 0:6089ae824f06 | 100 | *val = (*val << 8) | rbuf[4]; |
tosihisa | 0:6089ae824f06 | 101 | return 0; |
tosihisa | 0:6089ae824f06 | 102 | } |
tosihisa | 0:6089ae824f06 | 103 | #endif /* HAVE_CO2 } */ |
tosihisa | 0:6089ae824f06 | 104 | |
tosihisa | 0:6089ae824f06 | 105 | // BMP085 0xee |
tosihisa | 0:6089ae824f06 | 106 | // AD9774 0x44 |
tosihisa | 0:6089ae824f06 | 107 | #if 0 |
tosihisa | 0:6089ae824f06 | 108 | int i2c_found() { |
tosihisa | 0:6089ae824f06 | 109 | printf("Searching for I2C devices...\n"); |
tosihisa | 0:6089ae824f06 | 110 | |
tosihisa | 0:6089ae824f06 | 111 | int count = 0; |
tosihisa | 0:6089ae824f06 | 112 | for (int address=0; address<256; address+=2) { |
tosihisa | 0:6089ae824f06 | 113 | if (!i2c.write(address, NULL, 0)) { // 0 returned is ok |
tosihisa | 0:6089ae824f06 | 114 | printf(" - I2C device found at address 0x%02X\n", address); |
tosihisa | 0:6089ae824f06 | 115 | count++; |
tosihisa | 0:6089ae824f06 | 116 | } |
tosihisa | 0:6089ae824f06 | 117 | } |
tosihisa | 0:6089ae824f06 | 118 | printf("%d devices found\n", count); |
tosihisa | 0:6089ae824f06 | 119 | return count; |
tosihisa | 0:6089ae824f06 | 120 | } |
tosihisa | 0:6089ae824f06 | 121 | #endif |
tosihisa | 0:6089ae824f06 | 122 | |
tosihisa | 0:6089ae824f06 | 123 | int main() { |
tosihisa | 0:6089ae824f06 | 124 | int ret = 0; |
tosihisa | 0:6089ae824f06 | 125 | float p, t; |
tosihisa | 0:6089ae824f06 | 126 | int temp; |
tosihisa | 0:6089ae824f06 | 127 | int userRegister; |
tosihisa | 0:6089ae824f06 | 128 | unsigned short CO2_val; |
tosihisa | 0:6089ae824f06 | 129 | unsigned long scanCount = 0; |
tosihisa | 0:6089ae824f06 | 130 | |
tosihisa | 0:6089ae824f06 | 131 | debug.format(8,Serial::None,1); |
tosihisa | 0:6089ae824f06 | 132 | debug.baud(115200); |
tosihisa | 0:6089ae824f06 | 133 | debug.printf("ENV Logger \"V1\" Start (BUILD:[" __DATE__ "/" __TIME__ "])\n"); |
tosihisa | 0:6089ae824f06 | 134 | |
tosihisa | 0:6089ae824f06 | 135 | debug.printf("LCD Display\n"); |
tosihisa | 0:6089ae824f06 | 136 | |
tosihisa | 0:6089ae824f06 | 137 | //lcd.cls(); |
tosihisa | 0:6089ae824f06 | 138 | lcd.locate(0,0); |
tosihisa | 0:6089ae824f06 | 139 | lcd.printf("ENV Logger \"V1\""); |
tosihisa | 0:6089ae824f06 | 140 | |
tosihisa | 0:6089ae824f06 | 141 | //logFile_Init(); |
tosihisa | 0:6089ae824f06 | 142 | //FileWriteTest(); |
tosihisa | 0:6089ae824f06 | 143 | |
tosihisa | 0:6089ae824f06 | 144 | gps_pps.rise(gps_pps_rise); |
tosihisa | 0:6089ae824f06 | 145 | gps.format(8,Serial::None,1); |
tosihisa | 0:6089ae824f06 | 146 | gps.baud(9600); |
tosihisa | 0:6089ae824f06 | 147 | gps.recvStart(); |
tosihisa | 0:6089ae824f06 | 148 | |
tosihisa | 0:6089ae824f06 | 149 | //�P���Z�b�g�C�O���Z�b�g�J�� |
tosihisa | 0:6089ae824f06 | 150 | gps_reset = 1; |
tosihisa | 0:6089ae824f06 | 151 | wait(0.5); |
tosihisa | 0:6089ae824f06 | 152 | gps_reset = 0; |
tosihisa | 0:6089ae824f06 | 153 | |
tosihisa | 0:6089ae824f06 | 154 | ad7994.Start(); |
tosihisa | 0:6089ae824f06 | 155 | |
tosihisa | 0:6089ae824f06 | 156 | #ifdef HAVE_CO2 |
tosihisa | 0:6089ae824f06 | 157 | CO2.format(8,Serial::None,1); |
tosihisa | 0:6089ae824f06 | 158 | CO2.baud(9600); |
tosihisa | 0:6089ae824f06 | 159 | CO2.recvStart(); |
tosihisa | 0:6089ae824f06 | 160 | #endif |
tosihisa | 0:6089ae824f06 | 161 | |
tosihisa | 0:6089ae824f06 | 162 | //sht25.SHT2x_SoftReset(); |
tosihisa | 0:6089ae824f06 | 163 | //sht25.SHT2x_ReadUserRegister(&userRegister); //get actual user reg |
tosihisa | 0:6089ae824f06 | 164 | //userRegister = (userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_12_14BIT; |
tosihisa | 0:6089ae824f06 | 165 | //sht25.SHT2x_WriteUserRegister(&userRegister); //write changed user reg |
tosihisa | 0:6089ae824f06 | 166 | |
tosihisa | 0:6089ae824f06 | 167 | while(1) { |
tosihisa | 0:6089ae824f06 | 168 | //lcd.cls(); |
tosihisa | 0:6089ae824f06 | 169 | lcd.locate(0,1); |
tosihisa | 0:6089ae824f06 | 170 | lcd.printf("SCAN : %-10ld\n",scanCount); |
tosihisa | 0:6089ae824f06 | 171 | |
tosihisa | 0:6089ae824f06 | 172 | #if 0 |
tosihisa | 0:6089ae824f06 | 173 | while(gps.readable()) { |
tosihisa | 0:6089ae824f06 | 174 | debug.printf("%c",gps.getc()); |
tosihisa | 0:6089ae824f06 | 175 | //ret = libNMEA_Parse1Char(gps.getc(),&sts); |
tosihisa | 0:6089ae824f06 | 176 | } |
tosihisa | 0:6089ae824f06 | 177 | #endif |
tosihisa | 0:6089ae824f06 | 178 | |
tosihisa | 0:6089ae824f06 | 179 | #if 1 |
tosihisa | 0:6089ae824f06 | 180 | bmp085.update(); |
tosihisa | 0:6089ae824f06 | 181 | p = bmp085.get_pressure(); |
tosihisa | 0:6089ae824f06 | 182 | t = bmp085.get_temperature(); |
tosihisa | 0:6089ae824f06 | 183 | lcd.locate(0,2); |
tosihisa | 0:6089ae824f06 | 184 | lcd.printf("%-7.2fhPa %-7.2fC\n", p, t); |
tosihisa | 0:6089ae824f06 | 185 | #endif |
tosihisa | 0:6089ae824f06 | 186 | |
tosihisa | 0:6089ae824f06 | 187 | #if 0 |
tosihisa | 0:6089ae824f06 | 188 | sht25.SHT2x_MeasurePoll(TEMP,&temp); |
tosihisa | 0:6089ae824f06 | 189 | p = sht25.SHT2x_CalcTemperatureC(temp); |
tosihisa | 0:6089ae824f06 | 190 | sht25.SHT2x_MeasurePoll(HUMIDITY,&temp); |
tosihisa | 0:6089ae824f06 | 191 | t = sht25.SHT2x_CalcRH(temp); |
tosihisa | 0:6089ae824f06 | 192 | debug.printf("SHT25 = p:%6.2f C / t:%6.2f RH\n", p, t); |
tosihisa | 0:6089ae824f06 | 193 | sht25.SHT2x_SoftReset(); |
tosihisa | 0:6089ae824f06 | 194 | #endif |
tosihisa | 0:6089ae824f06 | 195 | #if 0 |
tosihisa | 0:6089ae824f06 | 196 | sht25.SoftReset(); |
tosihisa | 0:6089ae824f06 | 197 | printf("SHT25 = %f\n",sht25.get_temperature()); |
tosihisa | 0:6089ae824f06 | 198 | #endif |
tosihisa | 0:6089ae824f06 | 199 | //i2c_found(); |
tosihisa | 0:6089ae824f06 | 200 | |
tosihisa | 0:6089ae824f06 | 201 | #ifdef HAVE_CO2 |
tosihisa | 0:6089ae824f06 | 202 | if(CO2_Read(&CO2_val) == 0){ |
tosihisa | 0:6089ae824f06 | 203 | debug.printf("CO2 OK : %d (0x%04x) ppm\n",CO2_val,CO2_val); |
tosihisa | 0:6089ae824f06 | 204 | } else { |
tosihisa | 0:6089ae824f06 | 205 | debug.printf("CO2 NG\n"); |
tosihisa | 0:6089ae824f06 | 206 | } |
tosihisa | 0:6089ae824f06 | 207 | #endif |
tosihisa | 0:6089ae824f06 | 208 | ad7994.update(); |
tosihisa | 0:6089ae824f06 | 209 | lcd.locate(0,3); |
tosihisa | 0:6089ae824f06 | 210 | lcd.printf("A/D:%04X/%04X", |
tosihisa | 0:6089ae824f06 | 211 | ad7994.readChn(0), |
tosihisa | 0:6089ae824f06 | 212 | ad7994.readChn(1)); |
tosihisa | 0:6089ae824f06 | 213 | |
tosihisa | 0:6089ae824f06 | 214 | myled = 1; |
tosihisa | 0:6089ae824f06 | 215 | wait(0.2); |
tosihisa | 0:6089ae824f06 | 216 | myled = 0; |
tosihisa | 0:6089ae824f06 | 217 | wait(0.2); |
tosihisa | 0:6089ae824f06 | 218 | |
tosihisa | 0:6089ae824f06 | 219 | scanCount++; |
tosihisa | 0:6089ae824f06 | 220 | } |
tosihisa | 0:6089ae824f06 | 221 | } |