mbed Weather Platform firmware http://mbed.org/users/okini3939/notebook/mbed-weather-platform-firmware/
Dependencies: EthernetNetIf SDHCFileSystem I2CLEDDisp Agentbed NTPClient_NetServices mbed BMP085 HTTPClient ConfigFile I2CLCD
Diff: func.cpp
- Revision:
- 14:ee6cc1632166
- Parent:
- 13:20c0f845df68
- Child:
- 15:07bfa25ba6ae
--- a/func.cpp Sat Mar 19 21:24:01 2011 +0000 +++ b/func.cpp Tue Mar 29 18:15:27 2011 +0000 @@ -24,7 +24,7 @@ extern EthernetNetIf *eth; extern NTPClient *ntp; extern HTTPClient *clientP, *clientT; -extern float pres, temp, humi, light, anemo, vane, rain, uv, moist, temp2; +extern Sensor sensor; void writefile (char *buf) { FILE *fp; @@ -49,7 +49,8 @@ strcat(post_data, conf.stations_id); strcat(post_data, "&pin="); strcat(post_data, conf.stations_pin); - sprintf(&post_data[strlen(post_data)], "&d0=%.2f&d1=%.2f&d2=%.2f&d3=%.2f&d4=%.2f&d5=%.2f&d6=%.2f&d7=%.2f&d8=%.2f&d9=%.2f", pres, temp, humi, anemo, vane, rain, light, uv, moist, temp2); + sprintf(&post_data[strlen(post_data)], "&d0=%.2f&d1=%.2f&d2=%.2f&d3=%.2f&d4=%.2f&d5=%.2f&d6=%.2f&d7=%.2f&d8=%.2f&d9=%.2f", + sensor.pres, sensor.temp, sensor.humi, sensor.anemo, sensor.vane, sensor.rain, sensor.light, sensor.uv, sensor.moist, sensor.temp2); postContent.puts(post_data); #ifdef NONBLOCKING @@ -103,37 +104,52 @@ time_t sec = time(NULL); struct tm *tim = localtime(&sec); - flg = 0; j = 0; for (i = 0; i < strlen(fmt) && j < len; i ++) { c = fmt[i]; if (c == '%') { + flg = 0; i ++; c = fmt[i]; + + if (c == '.') { + // float + if (fmt[i + 1] >= '0' && fmt[i + 1] <= '9') { + flg = fmt[i + 1] - '0'; + i ++; + + c = fmt[i + 1]; + i ++; + } + } + switch (c) { case 'P': - value = pres; + value = sensor.pres; break; case 'T': - value = temp; + value = sensor.temp; break; case 'H': - value = humi; + value = sensor.humi; break; case 'A': - value = anemo; + value = sensor.anemo; break; case 'V': - value = vane; + value = sensor.vane; break; case 'R': - value = rain; + value = sensor.rain; break; case 'L': - value = light; + value = sensor.light; break; case 'U': - value = uv; + value = sensor.uv; + break; + case 'M': + value = sensor.moist; break; case 'y': @@ -155,10 +171,6 @@ value = tim->tm_sec; break; - case '%': - buf[j] = c; - j ++; - continue; case '0': case '1': case '2': @@ -169,6 +181,7 @@ case '7': case '8': case '9': + // Ascii c = c - '0'; if (fmt[i + 1] >= '0' && fmt[i + 1] <= '9') { c = (c << 3) | (fmt[i + 1] - '0'); @@ -181,23 +194,23 @@ buf[j] = c; j ++; continue; - case '.': - if (fmt[i + 1] >= '0' && fmt[i + 1] <= '9') { - flg = fmt[i + 1] - '0'; - i ++; - } - continue; + default: + buf[j] = c; + j ++; continue; } - if (c < 'a' && flg == 1) { + switch (flg) { + case 1: sprintf(&buf[j], "%.1f", value); - } else - if (c < 'a' && flg == 2) { + break; + case 2: sprintf(&buf[j], "%.2f", value); - } else { + break; + default: sprintf(&buf[j], "%02d", (int)value); + break; } j = strlen(buf); } else {