mbed Weather Platform SD memory logger

Dependencies:   mbed

Committer:
okini3939
Date:
Wed Dec 01 14:27:29 2010 +0000
Revision:
1:14bf00e73e45
Parent:
0:88b426acd89c

        

Who changed what in which revision?

UserRevisionLine numberNew 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 1:14bf00e73e45 58 seq ++;
okini3939 0:88b426acd89c 59 }
okini3939 0:88b426acd89c 60 fp = fopen("/sd/weather.seq", "w");
okini3939 0:88b426acd89c 61 if (fp) {
okini3939 0:88b426acd89c 62 if (seq == 0) seq = 1;
okini3939 0:88b426acd89c 63 fprintf(fp, "%d", seq);
okini3939 0:88b426acd89c 64 fclose(fp);
okini3939 0:88b426acd89c 65 sprintf(filename, "/sd/w%05d.csv", seq);
okini3939 0:88b426acd89c 66 led2 = 1;
okini3939 0:88b426acd89c 67 }
okini3939 0:88b426acd89c 68
okini3939 0:88b426acd89c 69 timer.start();
okini3939 0:88b426acd89c 70
okini3939 0:88b426acd89c 71 while(1) {
okini3939 0:88b426acd89c 72 led1 = 0;
okini3939 0:88b426acd89c 73
okini3939 0:88b426acd89c 74 bmp085.update();
okini3939 0:88b426acd89c 75 p = bmp085.get_pressure();
okini3939 0:88b426acd89c 76 pc.printf("p:%6.2f hPa / t:%6.2f C\n", p, bmp085.get_temperature());
okini3939 0:88b426acd89c 77
okini3939 0:88b426acd89c 78 sht11.update(SHT_high);
okini3939 0:88b426acd89c 79 t = sht11.get_temperature();
okini3939 0:88b426acd89c 80 h = sht11.get_humidity();
okini3939 0:88b426acd89c 81 pc.printf("t:%6.2f C / h:%6.2f %%\n", t, h);
okini3939 0:88b426acd89c 82
okini3939 0:88b426acd89c 83 a = wmeters.get_windspeed();
okini3939 0:88b426acd89c 84 v = wmeters.get_windvane();
okini3939 0:88b426acd89c 85 r = wmeters.get_raingauge();
okini3939 0:88b426acd89c 86 pc.printf("a:%6.2f m/s / v:%6.2f / r:%6.2f mm\n", a, v, r);
okini3939 0:88b426acd89c 87
okini3939 0:88b426acd89c 88 b = get_photo(photo);
okini3939 0:88b426acd89c 89 pc.printf("b:%6.2f lx\n", b);
okini3939 0:88b426acd89c 90 m = get_moist(moist);
okini3939 0:88b426acd89c 91 pc.printf("m:%6.2f k ohm\n", m);
okini3939 0:88b426acd89c 92 u = get_uv(uv);
okini3939 0:88b426acd89c 93 pc.printf("u:%6.2f mW/cm2\n", u);
okini3939 0:88b426acd89c 94 /*
okini3939 0:88b426acd89c 95 i2clcd.locate(0, 0);
okini3939 0:88b426acd89c 96 i2clcd.printf("%4.1f hPa", p);
okini3939 0:88b426acd89c 97 i2clcd.locate(0, 1);
okini3939 0:88b426acd89c 98 i2clcd.printf("%2.1f C / %2.1f %%", t, h);
okini3939 0:88b426acd89c 99 */
okini3939 0:88b426acd89c 100
okini3939 0:88b426acd89c 101 if (seq) {
okini3939 0:88b426acd89c 102 led3 = 1;
okini3939 0:88b426acd89c 103 fp = fopen(filename, "a");
okini3939 0:88b426acd89c 104 if (fp) {
okini3939 0:88b426acd89c 105 fprintf(fp, "%f,%f,%f,%f,%f,%f\r\n", p, t, h, a, v, r);
okini3939 0:88b426acd89c 106 fclose(fp);
okini3939 0:88b426acd89c 107 } else {
okini3939 0:88b426acd89c 108 led2 = 0;
okini3939 0:88b426acd89c 109 seq = 0;
okini3939 0:88b426acd89c 110 }
okini3939 0:88b426acd89c 111 led3 = 0;
okini3939 0:88b426acd89c 112 } else {
okini3939 0:88b426acd89c 113 led2 = 0;
okini3939 0:88b426acd89c 114 seq = 0;
okini3939 0:88b426acd89c 115 }
okini3939 0:88b426acd89c 116
okini3939 0:88b426acd89c 117 led1 = 1;
okini3939 0:88b426acd89c 118
okini3939 0:88b426acd89c 119 while (timer.read() < 60);
okini3939 0:88b426acd89c 120 timer.reset();
okini3939 0:88b426acd89c 121 }
okini3939 0:88b426acd89c 122 }