Dependencies:   ChaNFSSD mbed BMP085 SHT2x

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?

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