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

Committer:
okini3939
Date:
Sat Mar 19 21:24:01 2011 +0000
Revision:
13:20c0f845df68
Parent:
12:d9264218a5e9
Child:
14:ee6cc1632166

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:4265d973a98f 1 /*
okini3939 0:4265d973a98f 2 * mbed Weather Platform
okini3939 6:060cb9725ce3 3 * Copyright (c) 2011 Hiroshi Suga
okini3939 0:4265d973a98f 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:4265d973a98f 5 */
okini3939 1:86d4b7431fbe 6
okini3939 1:86d4b7431fbe 7 /** @file
okini3939 1:86d4b7431fbe 8 * @brief mbed Weather Platform
okini3939 0:4265d973a98f 9 */
okini3939 3:60f5f6d5f765 10
okini3939 10:848a2205aed1 11 #define VERSION "mbed Weather Platform 0.2.0 (C) 2011 Suga koubou Co.,Ltd."
okini3939 10:848a2205aed1 12
okini3939 3:60f5f6d5f765 13 //#define NONBLOCKING // ethernet function non-bloking
okini3939 3:60f5f6d5f765 14
okini3939 0:4265d973a98f 15 #include "mbed.h"
okini3939 0:4265d973a98f 16 #include "BMP085.h"
okini3939 0:4265d973a98f 17 #include "SHT.h"
okini3939 0:4265d973a98f 18 #include "WeatherMeters.h"
okini3939 0:4265d973a98f 19 #include "SDFileSystem.h"
okini3939 2:4125fe2283ef 20 #include "MSCFileSystem.h"
okini3939 0:4265d973a98f 21 #include "EthernetNetIf.h"
okini3939 0:4265d973a98f 22 #include "NTPClient.h"
okini3939 0:4265d973a98f 23 #include "HTTPClient.h"
okini3939 5:9fa79cb5ec98 24 #include "Agentbed.h"
okini3939 7:0d3484dc13a9 25 #include "conf.h"
okini3939 3:60f5f6d5f765 26 #include "I2CLEDDisp.h"
okini3939 10:848a2205aed1 27 #include "I2CLCD.h"
okini3939 0:4265d973a98f 28
okini3939 9:8c63e4f3edab 29 Serial pc(USBTX, USBRX), xbee(p13, p14);
okini3939 0:4265d973a98f 30 int seq = 0;
okini3939 0:4265d973a98f 31 char filename[20];
okini3939 7:0d3484dc13a9 32 Config conf;
okini3939 1:86d4b7431fbe 33 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
okini3939 0:4265d973a98f 34 SDFileSystem sd(p5, p6, p7, p8, "sd");
okini3939 2:4125fe2283ef 35 MSCFileSystem *usb;
okini3939 0:4265d973a98f 36
okini3939 0:4265d973a98f 37 // Sensors
okini3939 0:4265d973a98f 38 float pres, temp, humi, light, anemo, vane, rain, uv, moist, temp2;
okini3939 0:4265d973a98f 39 I2C i2c(p9, p10);
okini3939 0:4265d973a98f 40 BMP085 bmp085(i2c, BMP085_oss4);
okini3939 0:4265d973a98f 41 SHT sht15(p12, p11, SHT_high); // sclock, data
okini3939 0:4265d973a98f 42 WeatherMeters wmeters(p21, p15, p22); // anemo, vane, rain
okini3939 11:c6356e5949cd 43 AnalogIn ailight(p16), aiuv(p17);
okini3939 11:c6356e5949cd 44 AnalogIn *aimoist;
okini3939 11:c6356e5949cd 45 InterruptIn *intcounter;
okini3939 13:20c0f845df68 46 int count_counter;
okini3939 11:c6356e5949cd 47 unsigned long lastCountTime;
okini3939 0:4265d973a98f 48
okini3939 8:bab92fb7ef97 49 DigitalOut swout1(p29), swout2(p30);
okini3939 10:848a2205aed1 50 I2CLEDDisp *leddisp;
okini3939 10:848a2205aed1 51 I2CLCD *lcd;
okini3939 10:848a2205aed1 52 int ledpos, ledflg;
okini3939 10:848a2205aed1 53 char ledbuf[200];
okini3939 8:bab92fb7ef97 54 Ticker ticker;
okini3939 8:bab92fb7ef97 55
okini3939 0:4265d973a98f 56 // Ethernet
okini3939 0:4265d973a98f 57 EthernetNetIf *eth;
okini3939 0:4265d973a98f 58 NTPClient *ntp;
okini3939 1:86d4b7431fbe 59 HTTPClient *clientP, *clientT;
okini3939 13:20c0f845df68 60 DigitalOut led_g2(p24),led_g(p25), led_y(p26);
okini3939 0:4265d973a98f 61 DigitalIn eth_link(P1_25), eth_speed(P1_26);
okini3939 0:4265d973a98f 62
okini3939 5:9fa79cb5ec98 63 extern AgentbedClass Agentbed;
okini3939 5:9fa79cb5ec98 64 extern uint32_t locUpTime;
okini3939 5:9fa79cb5ec98 65
okini3939 1:86d4b7431fbe 66 void writefile (char *);
okini3939 1:86d4b7431fbe 67 void pachube (char *);
okini3939 10:848a2205aed1 68 char *fmtstr (char *, char *, int);
okini3939 1:86d4b7431fbe 69 void twitter ();
okini3939 5:9fa79cb5ec98 70 void weatherstations ();
okini3939 1:86d4b7431fbe 71 void ntpdate ();
okini3939 1:86d4b7431fbe 72 int check_action (char);
okini3939 5:9fa79cb5ec98 73 void pduReceived ();
okini3939 0:4265d973a98f 74
okini3939 0:4265d973a98f 75 float get_photo (AnalogIn &ain) {
okini3939 0:4265d973a98f 76 float f;
okini3939 0:4265d973a98f 77
okini3939 0:4265d973a98f 78 f = ain * 5.0 / 1000; // A
okini3939 0:4265d973a98f 79 return f / 0.0000026; // lx
okini3939 0:4265d973a98f 80 }
okini3939 0:4265d973a98f 81
okini3939 0:4265d973a98f 82 float get_moist (AnalogIn &ain) {
okini3939 0:4265d973a98f 83 float f;
okini3939 0:4265d973a98f 84
okini3939 0:4265d973a98f 85 f = ain * 5.0; // V
okini3939 2:4125fe2283ef 86 f = f / ((3.3 - f) / 10.0); // k ohm
okini3939 2:4125fe2283ef 87 if (f < 0) f = 0;
okini3939 2:4125fe2283ef 88 return f;
okini3939 0:4265d973a98f 89 }
okini3939 0:4265d973a98f 90
okini3939 0:4265d973a98f 91 float get_uv (AnalogIn &ain) {
okini3939 0:4265d973a98f 92 float f;
okini3939 0:4265d973a98f 93
okini3939 0:4265d973a98f 94 f = ain * 5.0 / 100000; // A
okini3939 2:4125fe2283ef 95 f = f / 0.000384; // mW/cm2
okini3939 2:4125fe2283ef 96 if (f < 0) f = 0;
okini3939 2:4125fe2283ef 97 return f;
okini3939 0:4265d973a98f 98 }
okini3939 0:4265d973a98f 99
okini3939 11:c6356e5949cd 100 void int_counter () {
okini3939 11:c6356e5949cd 101 count_counter ++;
okini3939 11:c6356e5949cd 102 }
okini3939 11:c6356e5949cd 103
okini3939 11:c6356e5949cd 104 float get_counter (char flg) {
okini3939 11:c6356e5949cd 105 float t;
okini3939 11:c6356e5949cd 106
okini3939 11:c6356e5949cd 107 if (flg) {
okini3939 11:c6356e5949cd 108 t = (float)count_counter;
okini3939 11:c6356e5949cd 109 } else {
okini3939 11:c6356e5949cd 110 if (locUpTime > lastCountTime) {
okini3939 13:20c0f845df68 111 t = (float)(locUpTime - lastCountTime) / 6000.0;
okini3939 11:c6356e5949cd 112 } else {
okini3939 13:20c0f845df68 113 t = (float)(0xffffffff - lastCountTime + locUpTime) / 6000.0;
okini3939 11:c6356e5949cd 114 }
okini3939 11:c6356e5949cd 115 t = (float)count_counter / t;
okini3939 11:c6356e5949cd 116 }
okini3939 11:c6356e5949cd 117 lastCountTime = locUpTime;
okini3939 11:c6356e5949cd 118 count_counter = 0;
okini3939 11:c6356e5949cd 119 return t;
okini3939 11:c6356e5949cd 120 }
okini3939 11:c6356e5949cd 121
okini3939 11:c6356e5949cd 122
okini3939 8:bab92fb7ef97 123 void ledscroll () {
okini3939 3:60f5f6d5f765 124
okini3939 10:848a2205aed1 125 if (conf.leddisp_mesg[0]) {
okini3939 10:848a2205aed1 126 int i, addr, len;
okini3939 10:848a2205aed1 127
okini3939 10:848a2205aed1 128 len = strlen(ledbuf);
okini3939 10:848a2205aed1 129 leddisp->locate(0, 0);
okini3939 10:848a2205aed1 130 for (i = 0; i < 4; i ++) {
okini3939 10:848a2205aed1 131 addr = ledpos + i;
okini3939 10:848a2205aed1 132 if (addr >= 0 && addr < len) {
okini3939 10:848a2205aed1 133 leddisp->putc(ledbuf[addr]);
okini3939 10:848a2205aed1 134 } else {
okini3939 10:848a2205aed1 135 leddisp->putc(' ');
okini3939 10:848a2205aed1 136 }
okini3939 10:848a2205aed1 137 }
okini3939 10:848a2205aed1 138 ledpos ++;
okini3939 10:848a2205aed1 139 if (ledpos >= len + 4) {
okini3939 10:848a2205aed1 140 ledpos = -4;
okini3939 3:60f5f6d5f765 141 }
okini3939 3:60f5f6d5f765 142 }
okini3939 3:60f5f6d5f765 143
okini3939 8:bab92fb7ef97 144 locUpTime = locUpTime + 40; // 0.4s
okini3939 9:8c63e4f3edab 145 led_y = 1;
okini3939 8:bab92fb7ef97 146 }
okini3939 8:bab92fb7ef97 147
okini3939 1:86d4b7431fbe 148 void action (char *buf) {
okini3939 8:bab92fb7ef97 149 if (check_action('h')) {
okini3939 8:bab92fb7ef97 150 swout1 = 1;
okini3939 9:8c63e4f3edab 151 led3 = 1;
okini3939 8:bab92fb7ef97 152 }
okini3939 8:bab92fb7ef97 153 if (check_action('l')) {
okini3939 8:bab92fb7ef97 154 swout1 = 0;
okini3939 9:8c63e4f3edab 155 led3 = 0;
okini3939 8:bab92fb7ef97 156 }
okini3939 1:86d4b7431fbe 157 if (check_action('H')) {
okini3939 8:bab92fb7ef97 158 swout2 = 1;
okini3939 1:86d4b7431fbe 159 led4 = 1;
okini3939 0:4265d973a98f 160 }
okini3939 1:86d4b7431fbe 161 if (check_action('L')) {
okini3939 8:bab92fb7ef97 162 swout2 = 0;
okini3939 1:86d4b7431fbe 163 led4 = 0;
okini3939 0:4265d973a98f 164 }
okini3939 1:86d4b7431fbe 165 if (check_action('P')) {
okini3939 1:86d4b7431fbe 166 if (conf.ipaddr[0] && conf.pachube_apikey[0] && conf.pachube_feedid[0]) {
okini3939 1:86d4b7431fbe 167 pachube(buf);
okini3939 1:86d4b7431fbe 168 }
okini3939 0:4265d973a98f 169 }
okini3939 1:86d4b7431fbe 170 if (check_action('T')) {
okini3939 1:86d4b7431fbe 171 if (conf.ipaddr[0] && conf.twitter_user[0] && conf.twitter_pwd[0]) {
okini3939 1:86d4b7431fbe 172 twitter();
okini3939 1:86d4b7431fbe 173 }
okini3939 1:86d4b7431fbe 174 }
okini3939 5:9fa79cb5ec98 175 if (check_action('S')) {
okini3939 5:9fa79cb5ec98 176 if (conf.ipaddr[0] && conf.stations_id[0] && conf.stations_pin[0]) {
okini3939 5:9fa79cb5ec98 177 weatherstations();
okini3939 5:9fa79cb5ec98 178 }
okini3939 5:9fa79cb5ec98 179 }
okini3939 9:8c63e4f3edab 180 if (check_action('X')) {
okini3939 9:8c63e4f3edab 181 xbee.printf(buf);
okini3939 9:8c63e4f3edab 182 }
okini3939 0:4265d973a98f 183 }
okini3939 0:4265d973a98f 184
okini3939 0:4265d973a98f 185 void init () {
okini3939 0:4265d973a98f 186 FILE *fp;
okini3939 0:4265d973a98f 187
okini3939 7:0d3484dc13a9 188 config(CONFIG_FILE);
okini3939 0:4265d973a98f 189
okini3939 2:4125fe2283ef 190 pc.printf("Interval: %d sec\r\n", conf.interval);
okini3939 2:4125fe2283ef 191
okini3939 0:4265d973a98f 192 if (conf.ipaddr[0]) {
okini3939 0:4265d973a98f 193 // use ethernet
okini3939 0:4265d973a98f 194
okini3939 0:4265d973a98f 195 eth_link.mode(PullUp);
okini3939 0:4265d973a98f 196 eth_speed.mode(PullUp);
okini3939 0:4265d973a98f 197 led_g = eth_link ? 1 : 0;
okini3939 13:20c0f845df68 198 led_g2 = 1;
okini3939 9:8c63e4f3edab 199 led_y = 0;
okini3939 0:4265d973a98f 200 if (conf.ipaddr[0] == 255) {
okini3939 0:4265d973a98f 201 // dhcp
okini3939 0:4265d973a98f 202 eth = new EthernetNetIf;
okini3939 0:4265d973a98f 203 } else {
okini3939 0:4265d973a98f 204 // static
okini3939 0:4265d973a98f 205 eth = new EthernetNetIf(conf.ipaddr, conf.netmask, conf.gateway, conf.nameserver);
okini3939 0:4265d973a98f 206 }
okini3939 0:4265d973a98f 207
okini3939 0:4265d973a98f 208 EthernetErr ethErr = eth->setup();
okini3939 0:4265d973a98f 209 if(ethErr) {
okini3939 0:4265d973a98f 210 // error
okini3939 0:4265d973a98f 211 conf.ipaddr = IpAddr(0, 0, 0, 0);
okini3939 0:4265d973a98f 212 } else
okini3939 0:4265d973a98f 213 if (conf.ipaddr[0] == 255) {
okini3939 0:4265d973a98f 214 // succeed dhcp
okini3939 0:4265d973a98f 215 conf.ipaddr = eth->getIp();
okini3939 0:4265d973a98f 216 }
okini3939 0:4265d973a98f 217 pc.printf("Ethernet: %d.%d.%d.%d\r\n", eth->getIp()[0], eth->getIp()[1], eth->getIp()[2], eth->getIp()[3]);
okini3939 0:4265d973a98f 218
okini3939 5:9fa79cb5ec98 219 if (conf.ipaddr[0]) {
okini3939 5:9fa79cb5ec98 220
okini3939 5:9fa79cb5ec98 221 if (conf.ntpserver[0]) {
okini3939 5:9fa79cb5ec98 222 // ntp
okini3939 5:9fa79cb5ec98 223 pc.printf("Ntp: %s\r\n", conf.ntpserver);
okini3939 5:9fa79cb5ec98 224 ntpdate();
okini3939 5:9fa79cb5ec98 225 }
okini3939 0:4265d973a98f 226
okini3939 0:4265d973a98f 227 clientP = new HTTPClient;
okini3939 1:86d4b7431fbe 228 clientT = new HTTPClient;
okini3939 5:9fa79cb5ec98 229
okini3939 5:9fa79cb5ec98 230 if (conf.snmp_commname[0]) {
okini3939 5:9fa79cb5ec98 231 Agentbed.begin(conf.snmp_commname, "None", SNMP_DEFAULT_PORT, eth);
okini3939 5:9fa79cb5ec98 232 Agentbed.onPduReceive(pduReceived);
okini3939 5:9fa79cb5ec98 233 pc.printf("Snmp community name: %s\r\n", conf.snmp_commname);
okini3939 5:9fa79cb5ec98 234 }
okini3939 0:4265d973a98f 235 }
okini3939 0:4265d973a98f 236 }
okini3939 0:4265d973a98f 237
okini3939 0:4265d973a98f 238 if (conf.filetype) {
okini3939 0:4265d973a98f 239 // seq num
okini3939 2:4125fe2283ef 240
okini3939 2:4125fe2283ef 241 if (conf.filetype == 1) {
okini3939 2:4125fe2283ef 242 strcpy(filename, "/sd");
okini3939 2:4125fe2283ef 243 } else
okini3939 2:4125fe2283ef 244 if (conf.filetype == 2) {
okini3939 2:4125fe2283ef 245 usb = new MSCFileSystem("usb");
okini3939 2:4125fe2283ef 246 strcpy(filename, "/usb");
okini3939 2:4125fe2283ef 247 }
okini3939 2:4125fe2283ef 248 strcat(filename, "/weather.seq");
okini3939 2:4125fe2283ef 249
okini3939 2:4125fe2283ef 250 // load
okini3939 2:4125fe2283ef 251 fp = fopen(filename, "r");
okini3939 0:4265d973a98f 252 if (fp) {
okini3939 0:4265d973a98f 253 fscanf(fp, "%d", &seq);
okini3939 0:4265d973a98f 254 fclose(fp);
okini3939 0:4265d973a98f 255 }
okini3939 0:4265d973a98f 256 seq ++;
okini3939 2:4125fe2283ef 257 // save
okini3939 2:4125fe2283ef 258 fp = fopen(filename, "w");
okini3939 0:4265d973a98f 259 if (fp) {
okini3939 0:4265d973a98f 260 fprintf(fp, "%d", seq);
okini3939 0:4265d973a98f 261 fclose(fp);
okini3939 2:4125fe2283ef 262 // csv filename
okini3939 0:4265d973a98f 263 if (conf.filetype == 1) {
okini3939 0:4265d973a98f 264 sprintf(filename, "/sd/w%05d.csv", seq);
okini3939 0:4265d973a98f 265 } else
okini3939 0:4265d973a98f 266 if (conf.filetype == 2) {
okini3939 0:4265d973a98f 267 sprintf(filename, "/usb/w%05d.csv", seq);
okini3939 0:4265d973a98f 268 }
okini3939 0:4265d973a98f 269 pc.printf("Filename: %s\r\n", filename);
okini3939 0:4265d973a98f 270 led2 = 1;
okini3939 0:4265d973a98f 271 }
okini3939 0:4265d973a98f 272 }
okini3939 13:20c0f845df68 273
okini3939 13:20c0f845df68 274 pc.printf("Actions: %d\r\n", conf.actionscount);
okini3939 13:20c0f845df68 275
okini3939 13:20c0f845df68 276 if (! conf.ipaddr[0]) {
okini3939 13:20c0f845df68 277 led_g = eth_link ? 0 : 1;
okini3939 13:20c0f845df68 278 led_g2 = 0;
okini3939 13:20c0f845df68 279 }
okini3939 13:20c0f845df68 280
okini3939 13:20c0f845df68 281 count_counter = 0;
okini3939 13:20c0f845df68 282 lastCountTime = 0;
okini3939 0:4265d973a98f 283 }
okini3939 0:4265d973a98f 284
okini3939 0:4265d973a98f 285 int main () {
okini3939 0:4265d973a98f 286 Timer timer;
okini3939 0:4265d973a98f 287 time_t sec;
okini3939 0:4265d973a98f 288 char buf[100];
okini3939 0:4265d973a98f 289
okini3939 8:bab92fb7ef97 290 swout1 = 0;
okini3939 8:bab92fb7ef97 291 swout2 = 0;
okini3939 0:4265d973a98f 292 led1 = 1;
okini3939 10:848a2205aed1 293 ledpos = -4;
okini3939 3:60f5f6d5f765 294 ledflg = 0;
okini3939 3:60f5f6d5f765 295 strcpy(ledbuf, VERSION);
okini3939 3:60f5f6d5f765 296 ticker.attach(&ledscroll, 0.4);
okini3939 0:4265d973a98f 297 init();
okini3939 10:848a2205aed1 298 pc.printf("%s\r\n\r\n", VERSION);
okini3939 0:4265d973a98f 299
okini3939 0:4265d973a98f 300 if (conf.filetype) {
okini3939 0:4265d973a98f 301 strcpy(buf, "date,pres(hPa),temp(`C),humi(%%),anemo(m/s),vane(`),rain(mm),light(lx),uv(mW/cm2),moist(kohm),\r\n");
okini3939 0:4265d973a98f 302 writefile(buf);
okini3939 0:4265d973a98f 303 }
okini3939 0:4265d973a98f 304
okini3939 10:848a2205aed1 305 if (conf.leddisp_mesg[0]) {
okini3939 10:848a2205aed1 306 ledpos = -4;
okini3939 10:848a2205aed1 307 sec = time(NULL);
okini3939 10:848a2205aed1 308 strftime(ledbuf, sizeof(ledbuf), "%H:%M", localtime(&sec));
okini3939 10:848a2205aed1 309 sprintf(&ledbuf[5], " %ds %s", conf.interval, filename);
okini3939 10:848a2205aed1 310 if (conf.ipaddr[0]) {
okini3939 10:848a2205aed1 311 sprintf(&ledbuf[strlen(ledbuf)], " %d.%d.%d.%d", conf.ipaddr[0], conf.ipaddr[1], conf.ipaddr[2], conf.ipaddr[3]);
okini3939 10:848a2205aed1 312 if (conf.pachube_apikey[0] && conf.pachube_feedid[0]) {
okini3939 10:848a2205aed1 313 strcat(ledbuf, " P");
okini3939 10:848a2205aed1 314 }
okini3939 10:848a2205aed1 315 if (conf.twitter_user[0] && conf.twitter_pwd[0]) {
okini3939 10:848a2205aed1 316 strcat(ledbuf, " T");
okini3939 10:848a2205aed1 317 }
okini3939 3:60f5f6d5f765 318 }
okini3939 3:60f5f6d5f765 319 }
okini3939 3:60f5f6d5f765 320
okini3939 0:4265d973a98f 321 timer.start();
okini3939 0:4265d973a98f 322 #ifdef NONBLOCKING
okini3939 0:4265d973a98f 323 while (timer.read() < 5) {
okini3939 13:20c0f845df68 324 wait_ms(1);
okini3939 0:4265d973a98f 325 Net::poll();
okini3939 0:4265d973a98f 326 }
okini3939 0:4265d973a98f 327 timer.reset();
okini3939 0:4265d973a98f 328 #endif
okini3939 3:60f5f6d5f765 329
okini3939 0:4265d973a98f 330 while(1) {
okini3939 0:4265d973a98f 331 led1 = 0;
okini3939 0:4265d973a98f 332
okini3939 0:4265d973a98f 333 sec = time(NULL);
okini3939 0:4265d973a98f 334 strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&sec));
okini3939 0:4265d973a98f 335
okini3939 0:4265d973a98f 336 // sensors
okini3939 9:8c63e4f3edab 337 __disable_irq();
okini3939 0:4265d973a98f 338 bmp085.update();
okini3939 0:4265d973a98f 339 pres = bmp085.get_pressure();
okini3939 0:4265d973a98f 340 temp2 = bmp085.get_temperature();
okini3939 0:4265d973a98f 341
okini3939 0:4265d973a98f 342 sht15.update(SHT_high);
okini3939 0:4265d973a98f 343 temp = sht15.get_temperature();
okini3939 0:4265d973a98f 344 humi = sht15.get_humidity();
okini3939 0:4265d973a98f 345
okini3939 0:4265d973a98f 346 anemo = wmeters.get_windspeed();
okini3939 0:4265d973a98f 347 vane = wmeters.get_windvane();
okini3939 0:4265d973a98f 348 rain = wmeters.get_raingauge();
okini3939 0:4265d973a98f 349
okini3939 0:4265d973a98f 350 light = get_photo(ailight);
okini3939 11:c6356e5949cd 351 if (conf.inputtype == INPUT_MOIST) {
okini3939 11:c6356e5949cd 352 moist = get_moist(*aimoist);
okini3939 11:c6356e5949cd 353 } else {
okini3939 13:20c0f845df68 354 moist = get_counter(0);
okini3939 11:c6356e5949cd 355 }
okini3939 0:4265d973a98f 356 uv = get_uv(aiuv);
okini3939 0:4265d973a98f 357
okini3939 0:4265d973a98f 358 sprintf(&buf[strlen(buf)], ",%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f\r\n", pres, temp, humi, anemo, vane, rain, light, uv, moist, temp2);
okini3939 0:4265d973a98f 359 if (conf.filetype) {
okini3939 0:4265d973a98f 360 // csv
okini3939 0:4265d973a98f 361 writefile(buf);
okini3939 0:4265d973a98f 362 }
okini3939 9:8c63e4f3edab 363 __enable_irq();
okini3939 9:8c63e4f3edab 364 pc.printf(buf);
okini3939 3:60f5f6d5f765 365
okini3939 1:86d4b7431fbe 366 action(&buf[20]);
okini3939 3:60f5f6d5f765 367
okini3939 10:848a2205aed1 368 if (conf.leddisp_mesg[0]) {
okini3939 10:848a2205aed1 369 if (ledflg) {
okini3939 10:848a2205aed1 370 ledpos = -4;
okini3939 10:848a2205aed1 371 fmtstr(conf.leddisp_mesg, ledbuf, sizeof(ledbuf));
okini3939 10:848a2205aed1 372 }
okini3939 10:848a2205aed1 373 ledflg = 1;
okini3939 0:4265d973a98f 374 }
okini3939 10:848a2205aed1 375 if (conf.lcd_mesg[0]) {
okini3939 10:848a2205aed1 376 fmtstr(conf.lcd_mesg, buf, sizeof(buf));
okini3939 10:848a2205aed1 377 lcd->cls();
okini3939 10:848a2205aed1 378 lcd->puts(buf);
okini3939 10:848a2205aed1 379 }
okini3939 10:848a2205aed1 380
okini3939 0:4265d973a98f 381 led1 = 1;
okini3939 0:4265d973a98f 382
okini3939 0:4265d973a98f 383 while (timer.read() < conf.interval) {
okini3939 0:4265d973a98f 384 // wait(1);
okini3939 0:4265d973a98f 385 // pc.putc('.');
okini3939 13:20c0f845df68 386 wait_ms(1);
okini3939 13:20c0f845df68 387 if (conf.ipaddr[0]) {
okini3939 13:20c0f845df68 388 led_g = eth_link ? 1 : 0;
okini3939 13:20c0f845df68 389 led_g2 = 1;
okini3939 13:20c0f845df68 390 } else {
okini3939 13:20c0f845df68 391 led_g = eth_link ? 0 : 1;
okini3939 13:20c0f845df68 392 led_g2 = 0;
okini3939 13:20c0f845df68 393 }
okini3939 0:4265d973a98f 394 Net::poll();
okini3939 13:20c0f845df68 395
okini3939 13:20c0f845df68 396 if (pc.readable()) {
okini3939 13:20c0f845df68 397 int i;
okini3939 13:20c0f845df68 398 i = pc.getc();
okini3939 13:20c0f845df68 399 if (i == ' ') {
okini3939 13:20c0f845df68 400 break;
okini3939 13:20c0f845df68 401 } else {
okini3939 13:20c0f845df68 402 pc.printf("( %d )\r\n", (int)timer.read());
okini3939 13:20c0f845df68 403 }
okini3939 13:20c0f845df68 404 }
okini3939 0:4265d973a98f 405 }
okini3939 0:4265d973a98f 406 timer.reset();
okini3939 0:4265d973a98f 407 }
okini3939 0:4265d973a98f 408 }