Suga koubou
/
WeatherPlatform_sd
mbed Weather Platform SD memory logger
Diff: main.cpp
- Revision:
- 0:88b426acd89c
- Child:
- 1:14bf00e73e45
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 01 14:14:24 2010 +0000 @@ -0,0 +1,121 @@ +#include "mbed.h" +#include "BMP085.h" +#include "SHT.h" +#include "WeatherMeters.h" +//#include "I2CLCD.h" +#include "SDFileSystem.h" + +I2C i2c(p9, p10); + +BMP085 bmp085(i2c, BMP085_oss4); +//I2CLCD i2clcd(i2c); +SHT sht11(p12, p11, SHT_high); // sclock, data +WeatherMeters wmeters(p21, p15, p22); // anemo, vane, rain + +DigitalOut led1(LED1), led2(LED2), led3(LED3); + +Serial pc(USBTX, USBRX); +AnalogIn photo(p16); +AnalogIn moist(p18); +AnalogIn uv(p17); + +SDFileSystem sd(p5, p6, p7, p8, "sd"); + +float get_photo (AnalogIn &ain) { + float f; + + f = ain * 5.0 / 1000; // A + return f / 0.0000026; // lx +} + +float get_moist (AnalogIn &ain) { + float f; + + f = ain * 5.0; // V + return f / ((3.3 - f) / 10.0); // k ohm +} + +float get_uv (AnalogIn &ain) { + float f; + + f = ain * 5.0 / 100000; // A + return f / 0.000384; // mW/cm2 +} + +int main() { + float p, t, h, b, a, v, r, m, u; + FILE *fp; + int seq = 0; + char filename[20]; + Timer timer; + + led1 = 1; + + fp = fopen("/sd/weather.seq", "r"); + if (fp) { + fscanf(fp, "%d", &seq); + fclose(fp); + } + fp = fopen("/sd/weather.seq", "w"); + if (fp) { + if (seq == 0) seq = 1; + fprintf(fp, "%d", seq); + fclose(fp); + sprintf(filename, "/sd/w%05d.csv", seq); + led2 = 1; + } + + timer.start(); + + while(1) { + led1 = 0; + + bmp085.update(); + p = bmp085.get_pressure(); + pc.printf("p:%6.2f hPa / t:%6.2f C\n", p, bmp085.get_temperature()); + + sht11.update(SHT_high); + t = sht11.get_temperature(); + h = sht11.get_humidity(); + pc.printf("t:%6.2f C / h:%6.2f %%\n", t, h); + + a = wmeters.get_windspeed(); + v = wmeters.get_windvane(); + r = wmeters.get_raingauge(); + pc.printf("a:%6.2f m/s / v:%6.2f / r:%6.2f mm\n", a, v, r); + + b = get_photo(photo); + pc.printf("b:%6.2f lx\n", b); + m = get_moist(moist); + pc.printf("m:%6.2f k ohm\n", m); + u = get_uv(uv); + pc.printf("u:%6.2f mW/cm2\n", u); +/* + i2clcd.locate(0, 0); + i2clcd.printf("%4.1f hPa", p); + i2clcd.locate(0, 1); + i2clcd.printf("%2.1f C / %2.1f %%", t, h); +*/ + + if (seq) { + led3 = 1; + fp = fopen(filename, "a"); + if (fp) { + fprintf(fp, "%f,%f,%f,%f,%f,%f\r\n", p, t, h, a, v, r); + fclose(fp); + } else { + led2 = 0; + seq = 0; + } + led3 = 0; + } else { + led2 = 0; + seq = 0; + } + + led1 = 1; + + while (timer.read() < 60); + timer.reset(); + } +}