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
weather.h@19:69b77f9e0446, 2011-06-03 (annotated)
- Committer:
- okini3939
- Date:
- Fri Jun 03 15:38:22 2011 +0000
- Revision:
- 19:69b77f9e0446
- Parent:
- 18:9286e5010c14
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 18:9286e5010c14 | 1 | /** @file |
okini3939 | 18:9286e5010c14 | 2 | * @brief mbed Weather Platform |
okini3939 | 18:9286e5010c14 | 3 | */ |
okini3939 | 18:9286e5010c14 | 4 | #include "mbed.h" |
okini3939 | 18:9286e5010c14 | 5 | #include "EthernetNetIf.h" |
okini3939 | 18:9286e5010c14 | 6 | #include "I2CLEDDisp.h" |
okini3939 | 18:9286e5010c14 | 7 | #include "I2CLCD.h" |
okini3939 | 18:9286e5010c14 | 8 | #include "Agentbed.h" |
okini3939 | 18:9286e5010c14 | 9 | #include "NTPClient.h" |
okini3939 | 18:9286e5010c14 | 10 | #include "HTTPClient.h" |
okini3939 | 18:9286e5010c14 | 11 | |
okini3939 | 18:9286e5010c14 | 12 | #define DEBUG |
okini3939 | 18:9286e5010c14 | 13 | |
okini3939 | 18:9286e5010c14 | 14 | #define CONFIG_FILE "weather.cfg" |
okini3939 | 18:9286e5010c14 | 15 | #define ACTION_FILE "weather.asm" |
okini3939 | 18:9286e5010c14 | 16 | |
okini3939 | 18:9286e5010c14 | 17 | #define CF_MAXLEN_VALUE 128 |
okini3939 | 18:9286e5010c14 | 18 | #define CF_ACTION_NUM 100 |
okini3939 | 18:9286e5010c14 | 19 | #define CF_TWITTER_NUM 5 |
okini3939 | 18:9286e5010c14 | 20 | |
okini3939 | 18:9286e5010c14 | 21 | #define INPUT_NUM 2 |
okini3939 | 19:69b77f9e0446 | 22 | #define OUTPUT_NUM 10 |
okini3939 | 19:69b77f9e0446 | 23 | #define TIMER_NUM 10 |
okini3939 | 19:69b77f9e0446 | 24 | #define COUNTER_NUM 10 |
okini3939 | 18:9286e5010c14 | 25 | |
okini3939 | 18:9286e5010c14 | 26 | #define LED_FREQ 4 // x 0.1s |
okini3939 | 18:9286e5010c14 | 27 | |
okini3939 | 18:9286e5010c14 | 28 | enum eMNEMONIC { |
okini3939 | 18:9286e5010c14 | 29 | MNE_NULL, |
okini3939 | 19:69b77f9e0446 | 30 | MNE_DEF, |
okini3939 | 18:9286e5010c14 | 31 | MNE_LD, MNE_LDI, MNE_LDP, MNE_LDF, |
okini3939 | 18:9286e5010c14 | 32 | MNE_ALD, MNE_ALDI, MNE_ALDP, MNE_ALDF, |
okini3939 | 18:9286e5010c14 | 33 | MNE_OR, MNE_ORI, MNE_ORP, MNE_ORF, |
okini3939 | 18:9286e5010c14 | 34 | MNE_AND, MNE_ANI, MNE_ANDP, MNE_ANDF, |
okini3939 | 18:9286e5010c14 | 35 | MNE_ORB, MNE_ANB, |
okini3939 | 18:9286e5010c14 | 36 | MNE_INV, |
okini3939 | 18:9286e5010c14 | 37 | MNE_MPS, MNE_MRD, MNE_MPP, |
okini3939 | 18:9286e5010c14 | 38 | MNE_OUT, MNE_SET, MNE_RST, |
okini3939 | 18:9286e5010c14 | 39 | MNE_END, |
okini3939 | 18:9286e5010c14 | 40 | }; |
okini3939 | 18:9286e5010c14 | 41 | |
okini3939 | 18:9286e5010c14 | 42 | enum eEXPRESSION { |
okini3939 | 18:9286e5010c14 | 43 | EXP_NULL, |
okini3939 | 18:9286e5010c14 | 44 | EXP_EQ, EXP_NE, |
okini3939 | 18:9286e5010c14 | 45 | EXP_LE, EXP_LT, |
okini3939 | 18:9286e5010c14 | 46 | EXP_GE, EXP_GT, |
okini3939 | 18:9286e5010c14 | 47 | EXP_MOD, EXP_NMOD, |
okini3939 | 18:9286e5010c14 | 48 | }; |
okini3939 | 18:9286e5010c14 | 49 | |
okini3939 | 18:9286e5010c14 | 50 | enum eINPUTTYPE { |
okini3939 | 18:9286e5010c14 | 51 | INPUT_MOIST = 0, |
okini3939 | 18:9286e5010c14 | 52 | INPUT_FALL = 1, |
okini3939 | 18:9286e5010c14 | 53 | INPUT_RISE = 2, |
okini3939 | 18:9286e5010c14 | 54 | INPUT_CPM = 4, |
okini3939 | 18:9286e5010c14 | 55 | }; |
okini3939 | 18:9286e5010c14 | 56 | |
okini3939 | 18:9286e5010c14 | 57 | struct tAction { |
okini3939 | 18:9286e5010c14 | 58 | enum eMNEMONIC mnemonic; |
okini3939 | 18:9286e5010c14 | 59 | char key; |
okini3939 | 18:9286e5010c14 | 60 | int keynum; |
okini3939 | 18:9286e5010c14 | 61 | enum eEXPRESSION expression; |
okini3939 | 18:9286e5010c14 | 62 | float value; |
okini3939 | 18:9286e5010c14 | 63 | }; |
okini3939 | 18:9286e5010c14 | 64 | |
okini3939 | 18:9286e5010c14 | 65 | struct Sensor { |
okini3939 | 18:9286e5010c14 | 66 | float pres, temp, humi, light, anemo, vane, rain, uv, moist, temp2; |
okini3939 | 18:9286e5010c14 | 67 | time_t sec; |
okini3939 | 19:69b77f9e0446 | 68 | int input[INPUT_NUM], output[OUTPUT_NUM]; |
okini3939 | 19:69b77f9e0446 | 69 | int timer_flg[TIMER_NUM]; |
okini3939 | 19:69b77f9e0446 | 70 | unsigned int timer_set[TIMER_NUM], timer_cnt[TIMER_NUM]; |
okini3939 | 19:69b77f9e0446 | 71 | unsigned int count_set[COUNTER_NUM], count_cnt[COUNTER_NUM], count_rev[COUNTER_NUM]; |
okini3939 | 18:9286e5010c14 | 72 | }; |
okini3939 | 18:9286e5010c14 | 73 | |
okini3939 | 18:9286e5010c14 | 74 | struct Config { |
okini3939 | 18:9286e5010c14 | 75 | int interval; |
okini3939 | 18:9286e5010c14 | 76 | IpAddr ipaddr, netmask, gateway, nameserver; |
okini3939 | 18:9286e5010c14 | 77 | char ntpserver[32]; |
okini3939 | 18:9286e5010c14 | 78 | int filetype, actionscount; |
okini3939 | 18:9286e5010c14 | 79 | struct tAction actions[CF_ACTION_NUM]; |
okini3939 | 18:9286e5010c14 | 80 | char pachube_apikey[70], pachube_feedid[8]; |
okini3939 | 18:9286e5010c14 | 81 | char twitter_user[30], twitter_pwd[30], twitter_mesg[CF_TWITTER_NUM][CF_MAXLEN_VALUE]; |
okini3939 | 18:9286e5010c14 | 82 | char stations_id[8], stations_pin[34]; |
okini3939 | 18:9286e5010c14 | 83 | char snmp_commname[30]; |
okini3939 | 18:9286e5010c14 | 84 | char lcd_mesg[CF_MAXLEN_VALUE]; |
okini3939 | 18:9286e5010c14 | 85 | enum I2CLCDType lcdtype; |
okini3939 | 18:9286e5010c14 | 86 | enum I2CLCDConfig lcdconf; |
okini3939 | 18:9286e5010c14 | 87 | char leddisp_mesg[CF_MAXLEN_VALUE]; |
okini3939 | 18:9286e5010c14 | 88 | enum eINPUTTYPE inputtype; |
okini3939 | 18:9286e5010c14 | 89 | }; |
okini3939 | 18:9286e5010c14 | 90 | |
okini3939 | 18:9286e5010c14 | 91 | |
okini3939 | 18:9286e5010c14 | 92 | extern char filename[]; |
okini3939 | 18:9286e5010c14 | 93 | extern char csv[]; |
okini3939 | 18:9286e5010c14 | 94 | extern AgentbedClass Agentbed; |
okini3939 | 18:9286e5010c14 | 95 | extern volatile uint32_t locUpTime; |
okini3939 | 18:9286e5010c14 | 96 | extern Serial xbee; |
okini3939 | 18:9286e5010c14 | 97 | extern Config conf; |
okini3939 | 18:9286e5010c14 | 98 | extern Sensor sensor, offset, sensor_old; |
okini3939 | 18:9286e5010c14 | 99 | extern Serial pc; |
okini3939 | 18:9286e5010c14 | 100 | extern volatile int seq; |
okini3939 | 18:9286e5010c14 | 101 | extern DigitalOut led1, led2, led3, led4; |
okini3939 | 18:9286e5010c14 | 102 | extern AnalogIn *aimoist; |
okini3939 | 18:9286e5010c14 | 103 | extern DigitalIn swin2; |
okini3939 | 18:9286e5010c14 | 104 | extern DigitalOut swout1, swout2; |
okini3939 | 18:9286e5010c14 | 105 | extern EthernetNetIf *eth; |
okini3939 | 18:9286e5010c14 | 106 | extern NTPClient *ntp; |
okini3939 | 18:9286e5010c14 | 107 | extern HTTPClient *clientP, *clientT; |
okini3939 | 18:9286e5010c14 | 108 | extern DigitalOut led_g2, led_g, led_y; |
okini3939 | 18:9286e5010c14 | 109 | |
okini3939 | 18:9286e5010c14 | 110 | |
okini3939 | 18:9286e5010c14 | 111 | int config (char *); |
okini3939 | 18:9286e5010c14 | 112 | void writefile (char *); |
okini3939 | 18:9286e5010c14 | 113 | void pachube (char *); |
okini3939 | 18:9286e5010c14 | 114 | char *fmtstr (char *, char *, int); |
okini3939 | 18:9286e5010c14 | 115 | void twitter (int); |
okini3939 | 18:9286e5010c14 | 116 | void weatherstations (); |
okini3939 | 18:9286e5010c14 | 117 | void ntpdate (); |
okini3939 | 18:9286e5010c14 | 118 | int check_action (char); |
okini3939 | 18:9286e5010c14 | 119 | void pduReceived (); |
okini3939 | 18:9286e5010c14 | 120 | void int_counter(); |
okini3939 | 18:9286e5010c14 | 121 | int action(char); |
okini3939 | 18:9286e5010c14 | 122 | void load_action (char *); |
okini3939 | 18:9286e5010c14 | 123 |