Suga koubou
/
WeatherPlatform_sd
mbed Weather Platform SD memory logger
main.cpp@0:88b426acd89c, 2010-12-01 (annotated)
- Committer:
- okini3939
- Date:
- Wed Dec 01 14:14:24 2010 +0000
- Revision:
- 0:88b426acd89c
- Child:
- 1:14bf00e73e45
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:88b426acd89c | 1 | #include "mbed.h" |
okini3939 | 0:88b426acd89c | 2 | #include "BMP085.h" |
okini3939 | 0:88b426acd89c | 3 | #include "SHT.h" |
okini3939 | 0:88b426acd89c | 4 | #include "WeatherMeters.h" |
okini3939 | 0:88b426acd89c | 5 | //#include "I2CLCD.h" |
okini3939 | 0:88b426acd89c | 6 | #include "SDFileSystem.h" |
okini3939 | 0:88b426acd89c | 7 | |
okini3939 | 0:88b426acd89c | 8 | I2C i2c(p9, p10); |
okini3939 | 0:88b426acd89c | 9 | |
okini3939 | 0:88b426acd89c | 10 | BMP085 bmp085(i2c, BMP085_oss4); |
okini3939 | 0:88b426acd89c | 11 | //I2CLCD i2clcd(i2c); |
okini3939 | 0:88b426acd89c | 12 | SHT sht11(p12, p11, SHT_high); // sclock, data |
okini3939 | 0:88b426acd89c | 13 | WeatherMeters wmeters(p21, p15, p22); // anemo, vane, rain |
okini3939 | 0:88b426acd89c | 14 | |
okini3939 | 0:88b426acd89c | 15 | DigitalOut led1(LED1), led2(LED2), led3(LED3); |
okini3939 | 0:88b426acd89c | 16 | |
okini3939 | 0:88b426acd89c | 17 | Serial pc(USBTX, USBRX); |
okini3939 | 0:88b426acd89c | 18 | AnalogIn photo(p16); |
okini3939 | 0:88b426acd89c | 19 | AnalogIn moist(p18); |
okini3939 | 0:88b426acd89c | 20 | AnalogIn uv(p17); |
okini3939 | 0:88b426acd89c | 21 | |
okini3939 | 0:88b426acd89c | 22 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
okini3939 | 0:88b426acd89c | 23 | |
okini3939 | 0:88b426acd89c | 24 | float get_photo (AnalogIn &ain) { |
okini3939 | 0:88b426acd89c | 25 | float f; |
okini3939 | 0:88b426acd89c | 26 | |
okini3939 | 0:88b426acd89c | 27 | f = ain * 5.0 / 1000; // A |
okini3939 | 0:88b426acd89c | 28 | return f / 0.0000026; // lx |
okini3939 | 0:88b426acd89c | 29 | } |
okini3939 | 0:88b426acd89c | 30 | |
okini3939 | 0:88b426acd89c | 31 | float get_moist (AnalogIn &ain) { |
okini3939 | 0:88b426acd89c | 32 | float f; |
okini3939 | 0:88b426acd89c | 33 | |
okini3939 | 0:88b426acd89c | 34 | f = ain * 5.0; // V |
okini3939 | 0:88b426acd89c | 35 | return f / ((3.3 - f) / 10.0); // k ohm |
okini3939 | 0:88b426acd89c | 36 | } |
okini3939 | 0:88b426acd89c | 37 | |
okini3939 | 0:88b426acd89c | 38 | float get_uv (AnalogIn &ain) { |
okini3939 | 0:88b426acd89c | 39 | float f; |
okini3939 | 0:88b426acd89c | 40 | |
okini3939 | 0:88b426acd89c | 41 | f = ain * 5.0 / 100000; // A |
okini3939 | 0:88b426acd89c | 42 | return f / 0.000384; // mW/cm2 |
okini3939 | 0:88b426acd89c | 43 | } |
okini3939 | 0:88b426acd89c | 44 | |
okini3939 | 0:88b426acd89c | 45 | int main() { |
okini3939 | 0:88b426acd89c | 46 | float p, t, h, b, a, v, r, m, u; |
okini3939 | 0:88b426acd89c | 47 | FILE *fp; |
okini3939 | 0:88b426acd89c | 48 | int seq = 0; |
okini3939 | 0:88b426acd89c | 49 | char filename[20]; |
okini3939 | 0:88b426acd89c | 50 | Timer timer; |
okini3939 | 0:88b426acd89c | 51 | |
okini3939 | 0:88b426acd89c | 52 | led1 = 1; |
okini3939 | 0:88b426acd89c | 53 | |
okini3939 | 0:88b426acd89c | 54 | fp = fopen("/sd/weather.seq", "r"); |
okini3939 | 0:88b426acd89c | 55 | if (fp) { |
okini3939 | 0:88b426acd89c | 56 | fscanf(fp, "%d", &seq); |
okini3939 | 0:88b426acd89c | 57 | fclose(fp); |
okini3939 | 0:88b426acd89c | 58 | } |
okini3939 | 0:88b426acd89c | 59 | fp = fopen("/sd/weather.seq", "w"); |
okini3939 | 0:88b426acd89c | 60 | if (fp) { |
okini3939 | 0:88b426acd89c | 61 | if (seq == 0) seq = 1; |
okini3939 | 0:88b426acd89c | 62 | fprintf(fp, "%d", seq); |
okini3939 | 0:88b426acd89c | 63 | fclose(fp); |
okini3939 | 0:88b426acd89c | 64 | sprintf(filename, "/sd/w%05d.csv", seq); |
okini3939 | 0:88b426acd89c | 65 | led2 = 1; |
okini3939 | 0:88b426acd89c | 66 | } |
okini3939 | 0:88b426acd89c | 67 | |
okini3939 | 0:88b426acd89c | 68 | timer.start(); |
okini3939 | 0:88b426acd89c | 69 | |
okini3939 | 0:88b426acd89c | 70 | while(1) { |
okini3939 | 0:88b426acd89c | 71 | led1 = 0; |
okini3939 | 0:88b426acd89c | 72 | |
okini3939 | 0:88b426acd89c | 73 | bmp085.update(); |
okini3939 | 0:88b426acd89c | 74 | p = bmp085.get_pressure(); |
okini3939 | 0:88b426acd89c | 75 | pc.printf("p:%6.2f hPa / t:%6.2f C\n", p, bmp085.get_temperature()); |
okini3939 | 0:88b426acd89c | 76 | |
okini3939 | 0:88b426acd89c | 77 | sht11.update(SHT_high); |
okini3939 | 0:88b426acd89c | 78 | t = sht11.get_temperature(); |
okini3939 | 0:88b426acd89c | 79 | h = sht11.get_humidity(); |
okini3939 | 0:88b426acd89c | 80 | pc.printf("t:%6.2f C / h:%6.2f %%\n", t, h); |
okini3939 | 0:88b426acd89c | 81 | |
okini3939 | 0:88b426acd89c | 82 | a = wmeters.get_windspeed(); |
okini3939 | 0:88b426acd89c | 83 | v = wmeters.get_windvane(); |
okini3939 | 0:88b426acd89c | 84 | r = wmeters.get_raingauge(); |
okini3939 | 0:88b426acd89c | 85 | pc.printf("a:%6.2f m/s / v:%6.2f / r:%6.2f mm\n", a, v, r); |
okini3939 | 0:88b426acd89c | 86 | |
okini3939 | 0:88b426acd89c | 87 | b = get_photo(photo); |
okini3939 | 0:88b426acd89c | 88 | pc.printf("b:%6.2f lx\n", b); |
okini3939 | 0:88b426acd89c | 89 | m = get_moist(moist); |
okini3939 | 0:88b426acd89c | 90 | pc.printf("m:%6.2f k ohm\n", m); |
okini3939 | 0:88b426acd89c | 91 | u = get_uv(uv); |
okini3939 | 0:88b426acd89c | 92 | pc.printf("u:%6.2f mW/cm2\n", u); |
okini3939 | 0:88b426acd89c | 93 | /* |
okini3939 | 0:88b426acd89c | 94 | i2clcd.locate(0, 0); |
okini3939 | 0:88b426acd89c | 95 | i2clcd.printf("%4.1f hPa", p); |
okini3939 | 0:88b426acd89c | 96 | i2clcd.locate(0, 1); |
okini3939 | 0:88b426acd89c | 97 | i2clcd.printf("%2.1f C / %2.1f %%", t, h); |
okini3939 | 0:88b426acd89c | 98 | */ |
okini3939 | 0:88b426acd89c | 99 | |
okini3939 | 0:88b426acd89c | 100 | if (seq) { |
okini3939 | 0:88b426acd89c | 101 | led3 = 1; |
okini3939 | 0:88b426acd89c | 102 | fp = fopen(filename, "a"); |
okini3939 | 0:88b426acd89c | 103 | if (fp) { |
okini3939 | 0:88b426acd89c | 104 | fprintf(fp, "%f,%f,%f,%f,%f,%f\r\n", p, t, h, a, v, r); |
okini3939 | 0:88b426acd89c | 105 | fclose(fp); |
okini3939 | 0:88b426acd89c | 106 | } else { |
okini3939 | 0:88b426acd89c | 107 | led2 = 0; |
okini3939 | 0:88b426acd89c | 108 | seq = 0; |
okini3939 | 0:88b426acd89c | 109 | } |
okini3939 | 0:88b426acd89c | 110 | led3 = 0; |
okini3939 | 0:88b426acd89c | 111 | } else { |
okini3939 | 0:88b426acd89c | 112 | led2 = 0; |
okini3939 | 0:88b426acd89c | 113 | seq = 0; |
okini3939 | 0:88b426acd89c | 114 | } |
okini3939 | 0:88b426acd89c | 115 | |
okini3939 | 0:88b426acd89c | 116 | led1 = 1; |
okini3939 | 0:88b426acd89c | 117 | |
okini3939 | 0:88b426acd89c | 118 | while (timer.read() < 60); |
okini3939 | 0:88b426acd89c | 119 | timer.reset(); |
okini3939 | 0:88b426acd89c | 120 | } |
okini3939 | 0:88b426acd89c | 121 | } |