mbed Weather Platform firmware http://mbed.org/users/okini3939/notebook/mbed-weather-platform-firmware/

Dependencies:   ChaNFSSD EthernetNetIf I2CLEDDisp Agentbed ChaNFSUSB ILinterpreter mbed BMP085 WeatherMeters ConfigFile ChaNFS I2CLCD

Committer:
okini3939
Date:
Mon Jul 04 15:16:45 2011 +0000
Revision:
0:bdb53686c194
Child:
1:6c7141895545

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:bdb53686c194 1 /** @file
okini3939 0:bdb53686c194 2 * @brief mbed Weather Platform
okini3939 0:bdb53686c194 3 */
okini3939 0:bdb53686c194 4 #include "mbed.h"
okini3939 0:bdb53686c194 5 #include "weather.h"
okini3939 0:bdb53686c194 6 #ifdef USE_IL
okini3939 0:bdb53686c194 7 #include "ILinterpreter.h"
okini3939 0:bdb53686c194 8
okini3939 0:bdb53686c194 9 static ILinterpreter ilip;
okini3939 0:bdb53686c194 10 #endif
okini3939 0:bdb53686c194 11 static Serial xbee(p13, p14);
okini3939 0:bdb53686c194 12 static volatile int measure_flg = 0;
okini3939 0:bdb53686c194 13
okini3939 0:bdb53686c194 14 #ifdef USE_IL
okini3939 0:bdb53686c194 15 // input relay
okini3939 0:bdb53686c194 16 float cb_input(char key, int keynum, eEXPRESSION exp, int old) {
okini3939 0:bdb53686c194 17 float value = 0;
okini3939 0:bdb53686c194 18 Sensor *s;
okini3939 0:bdb53686c194 19
okini3939 0:bdb53686c194 20 if (old) {
okini3939 0:bdb53686c194 21 s = &sensor_old;
okini3939 0:bdb53686c194 22 } else {
okini3939 0:bdb53686c194 23 s = &sensor;
okini3939 0:bdb53686c194 24 }
okini3939 0:bdb53686c194 25
okini3939 0:bdb53686c194 26 switch (key) {
okini3939 0:bdb53686c194 27 case 'A': // sensor
okini3939 0:bdb53686c194 28 switch (keynum) {
okini3939 0:bdb53686c194 29 case 0:
okini3939 0:bdb53686c194 30 value = s->pres;
okini3939 0:bdb53686c194 31 break;
okini3939 0:bdb53686c194 32 case 1:
okini3939 0:bdb53686c194 33 value = s->temp;
okini3939 0:bdb53686c194 34 break;
okini3939 0:bdb53686c194 35 case 2:
okini3939 0:bdb53686c194 36 value = s->humi;
okini3939 0:bdb53686c194 37 break;
okini3939 0:bdb53686c194 38 case 3:
okini3939 0:bdb53686c194 39 value = s->anemo;
okini3939 0:bdb53686c194 40 break;
okini3939 0:bdb53686c194 41 case 4:
okini3939 0:bdb53686c194 42 value = s->vane;
okini3939 0:bdb53686c194 43 break;
okini3939 0:bdb53686c194 44 case 5:
okini3939 0:bdb53686c194 45 value = s->rain;
okini3939 0:bdb53686c194 46 break;
okini3939 0:bdb53686c194 47 case 6:
okini3939 0:bdb53686c194 48 value = s->light;
okini3939 0:bdb53686c194 49 break;
okini3939 0:bdb53686c194 50 case 7:
okini3939 0:bdb53686c194 51 value = s->uv;
okini3939 0:bdb53686c194 52 break;
okini3939 0:bdb53686c194 53 case 8:
okini3939 0:bdb53686c194 54 value = s->moist;
okini3939 0:bdb53686c194 55 break;
okini3939 0:bdb53686c194 56 case 99:
okini3939 0:bdb53686c194 57 value = measure_flg;
okini3939 0:bdb53686c194 58 break;
okini3939 0:bdb53686c194 59 }
okini3939 0:bdb53686c194 60 break;
okini3939 0:bdb53686c194 61
okini3939 0:bdb53686c194 62 case 'I': // input
okini3939 0:bdb53686c194 63 if (keynum >= INPUT_NUM) break;
okini3939 0:bdb53686c194 64 value = s->input[keynum];
okini3939 0:bdb53686c194 65 break;
okini3939 0:bdb53686c194 66
okini3939 0:bdb53686c194 67 case 'Q': // output
okini3939 0:bdb53686c194 68 if (keynum >= OUTPUT_NUM) break;
okini3939 0:bdb53686c194 69 value = s->output[keynum];
okini3939 0:bdb53686c194 70 break;
okini3939 0:bdb53686c194 71 }
okini3939 0:bdb53686c194 72
okini3939 0:bdb53686c194 73 return value;
okini3939 0:bdb53686c194 74 }
okini3939 0:bdb53686c194 75
okini3939 0:bdb53686c194 76 // output relay
okini3939 0:bdb53686c194 77 void cb_output(char key, int keynum, int reg, eMNEMONIC mne) {
okini3939 0:bdb53686c194 78
okini3939 0:bdb53686c194 79 #ifdef DEBUG
okini3939 0:bdb53686c194 80 pc.printf("OUT [%c %d] %d %d\r\n", key, keynum, reg, mne);
okini3939 0:bdb53686c194 81 #endif
okini3939 0:bdb53686c194 82 pool_net();
okini3939 0:bdb53686c194 83
okini3939 0:bdb53686c194 84 switch (key) {
okini3939 0:bdb53686c194 85 case 'Q': // output
okini3939 0:bdb53686c194 86 if (keynum >= OUTPUT_NUM) break;
okini3939 0:bdb53686c194 87 if (mne == MNE_OUT) {
okini3939 0:bdb53686c194 88 sensor.output[keynum] = reg;
okini3939 0:bdb53686c194 89 } else
okini3939 0:bdb53686c194 90 if (mne == MNE_SET && reg) {
okini3939 0:bdb53686c194 91 sensor.output[keynum] = 1;
okini3939 0:bdb53686c194 92 } else
okini3939 0:bdb53686c194 93 if (mne == MNE_RST && reg) {
okini3939 0:bdb53686c194 94 sensor.output[keynum] = 0;
okini3939 0:bdb53686c194 95 }
okini3939 0:bdb53686c194 96 break;
okini3939 0:bdb53686c194 97
okini3939 0:bdb53686c194 98 case 'P': // Pachube
okini3939 0:bdb53686c194 99 if (mne == MNE_OUT && reg) {
okini3939 0:bdb53686c194 100 pachube(csv);
okini3939 0:bdb53686c194 101 }
okini3939 0:bdb53686c194 102 break;
okini3939 0:bdb53686c194 103
okini3939 0:bdb53686c194 104 case 'S': // Weather Stations
okini3939 0:bdb53686c194 105 if (mne == MNE_OUT && reg) {
okini3939 0:bdb53686c194 106 weatherstations();
okini3939 0:bdb53686c194 107 }
okini3939 0:bdb53686c194 108 break;
okini3939 0:bdb53686c194 109
okini3939 0:bdb53686c194 110 case 'W': // Twitter
okini3939 0:bdb53686c194 111 if (mne == MNE_OUT && reg) {
okini3939 0:bdb53686c194 112 twitter(keynum);
okini3939 0:bdb53686c194 113 }
okini3939 0:bdb53686c194 114 break;
okini3939 0:bdb53686c194 115
okini3939 0:bdb53686c194 116 case 'X': // XBee
okini3939 0:bdb53686c194 117 if (mne == MNE_OUT && reg) {
okini3939 0:bdb53686c194 118 xbee.printf(csv);
okini3939 0:bdb53686c194 119 }
okini3939 0:bdb53686c194 120 break;
okini3939 0:bdb53686c194 121
okini3939 0:bdb53686c194 122 case 'E': // E-mail
okini3939 0:bdb53686c194 123 if (mne == MNE_OUT && reg) {
okini3939 0:bdb53686c194 124 email(keynum);
okini3939 0:bdb53686c194 125 }
okini3939 0:bdb53686c194 126 break;
okini3939 0:bdb53686c194 127 }
okini3939 0:bdb53686c194 128
okini3939 0:bdb53686c194 129 pool_net();
okini3939 0:bdb53686c194 130 }
okini3939 0:bdb53686c194 131 #endif
okini3939 0:bdb53686c194 132
okini3939 0:bdb53686c194 133 void pool_ilip () {
okini3939 0:bdb53686c194 134 #ifdef USE_IL
okini3939 0:bdb53686c194 135 ilip.pool();
okini3939 0:bdb53686c194 136 #endif
okini3939 0:bdb53686c194 137 }
okini3939 0:bdb53686c194 138
okini3939 0:bdb53686c194 139 // execute IL
okini3939 0:bdb53686c194 140 void exec_ilip (int enable) {
okini3939 0:bdb53686c194 141 Sensor sensor_tmp;
okini3939 0:bdb53686c194 142
okini3939 0:bdb53686c194 143 measure_flg = enable;
okini3939 0:bdb53686c194 144
okini3939 0:bdb53686c194 145 // set input
okini3939 0:bdb53686c194 146 // sensor.input[0] = conf.inputtype ? *aimoist > 0.5 : 0;
okini3939 0:bdb53686c194 147 // sensor.input[1] = swin2;
okini3939 0:bdb53686c194 148
okini3939 0:bdb53686c194 149 sensor_tmp = sensor;
okini3939 0:bdb53686c194 150
okini3939 0:bdb53686c194 151 #ifdef USE_IL
okini3939 0:bdb53686c194 152 // every time
okini3939 0:bdb53686c194 153 if (ilip.exec()) {
okini3939 0:bdb53686c194 154 printf("IL: out of stack\r\n");
okini3939 0:bdb53686c194 155 }
okini3939 0:bdb53686c194 156 #else
okini3939 0:bdb53686c194 157 if (enable) {
okini3939 0:bdb53686c194 158 weatherstations();
okini3939 0:bdb53686c194 159 pachube(csv);
okini3939 0:bdb53686c194 160 email(0);
okini3939 0:bdb53686c194 161 }
okini3939 0:bdb53686c194 162 #endif
okini3939 0:bdb53686c194 163
okini3939 0:bdb53686c194 164 // set output
okini3939 0:bdb53686c194 165 // led3 = swout1 = sensor.output[0];
okini3939 0:bdb53686c194 166 // led4 = swout2 = sensor.output[1];
okini3939 0:bdb53686c194 167
okini3939 0:bdb53686c194 168 sensor_old = sensor_tmp;
okini3939 0:bdb53686c194 169 }
okini3939 0:bdb53686c194 170
okini3939 0:bdb53686c194 171 // init IL
okini3939 0:bdb53686c194 172 int init_ilip (char *dir) {
okini3939 0:bdb53686c194 173 char buf[40];
okini3939 0:bdb53686c194 174
okini3939 0:bdb53686c194 175 if (cfg.getValue("XBEE", buf, sizeof(buf))) {
okini3939 0:bdb53686c194 176 xbee.baud(atoi(chop(buf)));
okini3939 0:bdb53686c194 177 }
okini3939 0:bdb53686c194 178
okini3939 0:bdb53686c194 179 #ifdef USE_IL
okini3939 0:bdb53686c194 180 strcpy(buf, dir);
okini3939 0:bdb53686c194 181 strcat(buf, IL_FILE);
okini3939 0:bdb53686c194 182 if (! ilip.load(buf)) {
okini3939 0:bdb53686c194 183 pc.printf("IL load %s\r\n", buf);
okini3939 0:bdb53686c194 184 ilip.attach(cb_input, cb_output);
okini3939 0:bdb53686c194 185 }
okini3939 0:bdb53686c194 186 #endif
okini3939 0:bdb53686c194 187
okini3939 0:bdb53686c194 188 return 0;
okini3939 0:bdb53686c194 189 }