Dependencies: ChaNFSSD mbed BMP085 SHT2x
Diff: main.cpp
- Revision:
- 0:6089ae824f06
- Child:
- 1:83960ee4d9a2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Dec 26 15:58:32 2011 +0000 @@ -0,0 +1,221 @@ +#include "mbed.h" +#include "NMEA_parse.h" +#include "SDFileSystem.h" +#include "libT/mbed/tserialbuffer.h" +#include "BMP085.h" +#include "SHT25.h" +#include "SHT2x.h" +#include "AD7994.h" +//#include "TextLCD.h" +#include "TextLCD_20X4.h" + +using namespace libT; + +//#define HAVE_CO2 + +#define _USE_FS_NAME "sd" + +Serial debug(USBTX,USBRX); + +DigitalIn gps_int0(p24); +DigitalOut gps_reset(p25); +InterruptIn gps_pps(p26); +tSerialBuffer gps(p28,p27); +DigitalOut gps_pps_led(LED2); +//I2C i2c(p9, p10); // sda, scl +BMP085 bmp085(p9, p10); +//SHT25 sht25(p9, p10); +//SHT2x sht25(p9,p10); +AD7994 ad7994(p9,p10); +TextLCD_20X4 lcd(p15, p16, p17, p18, p19, p20); // rs, e, d4-d7 + +//SDFileSystem sd(p5, p6, p7, p8, _USE_FS_NAME); + +DigitalOut myled(LED1); + +#ifdef HAVE_CO2 +tSerialBuffer CO2(p13,p14); +#endif + +int pps_count = 0; +void gps_pps_rise() +{ + gps_pps_led = ((pps_count+=1) & 1) ? 1 : 0; +} + +void logFile_Init() +{ + DIR *d; + struct dirent *p; + + d = opendir("/" _USE_FS_NAME); + if ( d != NULL ) { + while ( (p = readdir(d)) != NULL ) { + debug.printf("FILE - %s\x0d\x0a", p->d_name); + } + closedir(d); + } +} + +void FileWriteTest() +{ + FILE *fp; + char *logname = "/" _USE_FS_NAME "/MBEDLOG.TXT"; + + debug.printf("FileWriteTest() open(%s) :", logname); + fp = fopen(logname,"a+w"); + if(fp == NULL){ + printf("NG\n"); + return; + } + printf("OK\n"); + fprintf(fp,"ENV Logger \"V1\" Start (BUILD:[" __DATE__ "/" __TIME__ "])\x0d\x0a"); + fclose(fp); +} + +#ifdef HAVE_CO2 /* { */ +int CO2_Read(unsigned short *val) +{ + unsigned char sbuf[] = { 0xFE, 0x04, 0x00, 0x03, 0x00, 0x01, 0xD5, 0xC5 }; + unsigned char rbuf[7]; + int i; + unsigned short crc; + extern unsigned short modbus_CRC(unsigned char *DataPtr, unsigned short len); + + for(i=0;i < sizeof(sbuf);i++){ + //debug.printf("0x%02x ",sbuf[i]); + CO2.putc(sbuf[i]); + } + for(i=0;i < sizeof(rbuf);i++){ + while(!CO2.readable()){} + rbuf[i] = CO2.getc(); + } + crc = rbuf[6]; + crc = (crc << 8) | rbuf[5]; + if(crc != modbus_CRC(rbuf,5)){ + return -1; + } + + *val = rbuf[3]; + *val = (*val << 8) | rbuf[4]; + return 0; +} +#endif /* HAVE_CO2 } */ + +// BMP085 0xee +// AD9774 0x44 +#if 0 +int i2c_found() { + printf("Searching for I2C devices...\n"); + + int count = 0; + for (int address=0; address<256; address+=2) { + if (!i2c.write(address, NULL, 0)) { // 0 returned is ok + printf(" - I2C device found at address 0x%02X\n", address); + count++; + } + } + printf("%d devices found\n", count); + return count; +} +#endif + +int main() { + int ret = 0; + float p, t; + int temp; + int userRegister; + unsigned short CO2_val; + unsigned long scanCount = 0; + + debug.format(8,Serial::None,1); + debug.baud(115200); + debug.printf("ENV Logger \"V1\" Start (BUILD:[" __DATE__ "/" __TIME__ "])\n"); + + debug.printf("LCD Display\n"); + + //lcd.cls(); + lcd.locate(0,0); + lcd.printf("ENV Logger \"V1\""); + + //logFile_Init(); + //FileWriteTest(); + + gps_pps.rise(gps_pps_rise); + gps.format(8,Serial::None,1); + gps.baud(9600); + gps.recvStart(); + + //�P���Z�b�g�C�O���Z�b�g�J�� + gps_reset = 1; + wait(0.5); + gps_reset = 0; + + ad7994.Start(); + +#ifdef HAVE_CO2 + CO2.format(8,Serial::None,1); + CO2.baud(9600); + CO2.recvStart(); +#endif + + //sht25.SHT2x_SoftReset(); + //sht25.SHT2x_ReadUserRegister(&userRegister); //get actual user reg + //userRegister = (userRegister & ~SHT2x_RES_MASK) | SHT2x_RES_12_14BIT; + //sht25.SHT2x_WriteUserRegister(&userRegister); //write changed user reg + + while(1) { + //lcd.cls(); + lcd.locate(0,1); + lcd.printf("SCAN : %-10ld\n",scanCount); + +#if 0 + while(gps.readable()) { + debug.printf("%c",gps.getc()); + //ret = libNMEA_Parse1Char(gps.getc(),&sts); + } +#endif + +#if 1 + bmp085.update(); + p = bmp085.get_pressure(); + t = bmp085.get_temperature(); + lcd.locate(0,2); + lcd.printf("%-7.2fhPa %-7.2fC\n", p, t); +#endif + +#if 0 + sht25.SHT2x_MeasurePoll(TEMP,&temp); + p = sht25.SHT2x_CalcTemperatureC(temp); + sht25.SHT2x_MeasurePoll(HUMIDITY,&temp); + t = sht25.SHT2x_CalcRH(temp); + debug.printf("SHT25 = p:%6.2f C / t:%6.2f RH\n", p, t); + sht25.SHT2x_SoftReset(); +#endif +#if 0 + sht25.SoftReset(); + printf("SHT25 = %f\n",sht25.get_temperature()); +#endif + //i2c_found(); + +#ifdef HAVE_CO2 + if(CO2_Read(&CO2_val) == 0){ + debug.printf("CO2 OK : %d (0x%04x) ppm\n",CO2_val,CO2_val); + } else { + debug.printf("CO2 NG\n"); + } +#endif + ad7994.update(); + lcd.locate(0,3); + lcd.printf("A/D:%04X/%04X", + ad7994.readChn(0), + ad7994.readChn(1)); + + myled = 1; + wait(0.2); + myled = 0; + wait(0.2); + + scanCount++; + } +}