A sprinkler controller that takes HTTP command for zone and duration.
Dependencies: EthernetNetIf mbed HTTPServer
main.cpp@1:91c2c52b4691, 2011-03-09 (annotated)
- Committer:
- dminear
- Date:
- Wed Mar 09 03:44:43 2011 +0000
- Revision:
- 1:91c2c52b4691
- Parent:
- 0:810ec1936452
Fixed constant setting of time via NTP.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dminear | 0:810ec1936452 | 1 | #include "mbed.h" |
dminear | 0:810ec1936452 | 2 | #include "EthernetNetIf.h" |
dminear | 0:810ec1936452 | 3 | #include "HTTPServer.h" |
dminear | 0:810ec1936452 | 4 | #include "sprinkler_handler.h" |
dminear | 0:810ec1936452 | 5 | #include "share.h" |
dminear | 0:810ec1936452 | 6 | #include "NTPClient.h" |
dminear | 0:810ec1936452 | 7 | |
dminear | 0:810ec1936452 | 8 | NTPClient ntp; |
dminear | 0:810ec1936452 | 9 | |
dminear | 0:810ec1936452 | 10 | DigitalOut led1(LED1, "led1"); |
dminear | 0:810ec1936452 | 11 | DigitalOut led2(LED2, "led2"); |
dminear | 0:810ec1936452 | 12 | DigitalOut led3(LED3, "led3"); |
dminear | 0:810ec1936452 | 13 | DigitalOut led4(LED4, "led4"); |
dminear | 0:810ec1936452 | 14 | DigitalOut ledgreen(p29); |
dminear | 0:810ec1936452 | 15 | DigitalOut ledyellow(p30); |
dminear | 0:810ec1936452 | 16 | |
dminear | 0:810ec1936452 | 17 | LocalFileSystem fs("webfs"); |
dminear | 0:810ec1936452 | 18 | |
dminear | 0:810ec1936452 | 19 | EthernetNetIf eth; |
dminear | 0:810ec1936452 | 20 | HTTPServer svr; |
dminear | 0:810ec1936452 | 21 | Timer activity_timer; |
dminear | 0:810ec1936452 | 22 | |
dminear | 0:810ec1936452 | 23 | DigitalIn bypass(p16); |
dminear | 0:810ec1936452 | 24 | DigitalIn zone1in(p17); |
dminear | 0:810ec1936452 | 25 | DigitalIn zone2in(p18); |
dminear | 0:810ec1936452 | 26 | DigitalIn zone3in(p19); |
dminear | 0:810ec1936452 | 27 | DigitalIn zone4in(p20); |
dminear | 0:810ec1936452 | 28 | |
dminear | 0:810ec1936452 | 29 | DigitalOut zone1out(p24); |
dminear | 0:810ec1936452 | 30 | DigitalOut zone2out(p23); |
dminear | 0:810ec1936452 | 31 | DigitalOut zone3out(p22); |
dminear | 0:810ec1936452 | 32 | DigitalOut zone4out(p21); |
dminear | 0:810ec1936452 | 33 | |
dminear | 0:810ec1936452 | 34 | int compute1out = 0; |
dminear | 0:810ec1936452 | 35 | int compute2out = 0; |
dminear | 0:810ec1936452 | 36 | int compute3out = 0; |
dminear | 0:810ec1936452 | 37 | int compute4out = 0; |
dminear | 0:810ec1936452 | 38 | |
dminear | 0:810ec1936452 | 39 | void lanActivity( void ) { |
dminear | 0:810ec1936452 | 40 | activity_timer.start(); |
dminear | 0:810ec1936452 | 41 | ledgreen = 0; |
dminear | 0:810ec1936452 | 42 | } |
dminear | 0:810ec1936452 | 43 | |
dminear | 0:810ec1936452 | 44 | int main() { |
dminear | 0:810ec1936452 | 45 | //Base::add_rpc_class<DigitalOut>(); |
dminear | 0:810ec1936452 | 46 | ledyellow = 0; |
dminear | 0:810ec1936452 | 47 | ledgreen = 0; |
dminear | 0:810ec1936452 | 48 | activity_timer.reset(); |
dminear | 0:810ec1936452 | 49 | |
dminear | 0:810ec1936452 | 50 | printf("Setting up...\n"); |
dminear | 0:810ec1936452 | 51 | EthernetErr ethErr = eth.setup(); |
dminear | 0:810ec1936452 | 52 | if(ethErr) { |
dminear | 0:810ec1936452 | 53 | printf("Error %d in setup.\n", ethErr); |
dminear | 0:810ec1936452 | 54 | return -1; |
dminear | 0:810ec1936452 | 55 | } else { |
dminear | 0:810ec1936452 | 56 | ledgreen = 1; |
dminear | 0:810ec1936452 | 57 | } |
dminear | 0:810ec1936452 | 58 | |
dminear | 0:810ec1936452 | 59 | printf("Setup OK\n"); |
dminear | 0:810ec1936452 | 60 | |
dminear | 0:810ec1936452 | 61 | FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path |
dminear | 0:810ec1936452 | 62 | FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path |
dminear | 0:810ec1936452 | 63 | |
dminear | 0:810ec1936452 | 64 | svr.addHandler<SimpleHandler>("/check"); |
dminear | 0:810ec1936452 | 65 | // the main url with be http://a.b.c.d/sprinkler |
dminear | 0:810ec1936452 | 66 | // a GET request will return current status |
dminear | 0:810ec1936452 | 67 | // a POST with parameters of zone<n> and duration in seconds will set it |
dminear | 0:810ec1936452 | 68 | svr.addHandler<SprinklerHandler>("/sprinkler"); |
dminear | 0:810ec1936452 | 69 | svr.addHandler<RPCHandler>("/rpc"); |
dminear | 0:810ec1936452 | 70 | svr.addHandler<FSHandler>("/files"); |
dminear | 0:810ec1936452 | 71 | svr.addHandler<FSHandler>("/"); //Default handler |
dminear | 0:810ec1936452 | 72 | //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm |
dminear | 0:810ec1936452 | 73 | |
dminear | 0:810ec1936452 | 74 | svr.bind(80); |
dminear | 0:810ec1936452 | 75 | |
dminear | 0:810ec1936452 | 76 | printf("Listening...\n"); |
dminear | 0:810ec1936452 | 77 | |
dminear | 0:810ec1936452 | 78 | Timer tm; |
dminear | 0:810ec1936452 | 79 | int timesync = 0; |
dminear | 0:810ec1936452 | 80 | tm.start(); |
dminear | 0:810ec1936452 | 81 | time_t initialtime = time(NULL); |
dminear | 0:810ec1936452 | 82 | printf("Time as a basic string = %s\r", ctime(&initialtime)); |
dminear | 0:810ec1936452 | 83 | //Listen indefinitely |
dminear | 0:810ec1936452 | 84 | while(true) { |
dminear | 0:810ec1936452 | 85 | //wait(0.01); |
dminear | 0:810ec1936452 | 86 | Net::poll(); |
dminear | 0:810ec1936452 | 87 | if(tm.read()>0.5) { |
dminear | 0:810ec1936452 | 88 | ledyellow = !ledyellow; //Show that we are alive |
dminear | 0:810ec1936452 | 89 | tm.start(); |
dminear | 0:810ec1936452 | 90 | timesync++; |
dminear | 0:810ec1936452 | 91 | } |
dminear | 0:810ec1936452 | 92 | if(activity_timer > 0.2) { |
dminear | 0:810ec1936452 | 93 | ledgreen = 1; |
dminear | 0:810ec1936452 | 94 | } |
dminear | 0:810ec1936452 | 95 | |
dminear | 0:810ec1936452 | 96 | if (timesync > 3600 * 2) { // every hour |
dminear | 0:810ec1936452 | 97 | printf( "Setting time...\r\n" ); |
dminear | 0:810ec1936452 | 98 | Host server2(IpAddr(), 123, "pool.ntp.org"); |
dminear | 0:810ec1936452 | 99 | ntp.setTime(server2); |
dminear | 0:810ec1936452 | 100 | time_t seconds = time(NULL); |
dminear | 0:810ec1936452 | 101 | printf("Time as a basic string = %s\r", ctime(&seconds)); |
dminear | 1:91c2c52b4691 | 102 | timesync = 0; |
dminear | 0:810ec1936452 | 103 | } |
dminear | 0:810ec1936452 | 104 | |
dminear | 0:810ec1936452 | 105 | if (bypass) { // ignore all other choices other than inputs |
dminear | 0:810ec1936452 | 106 | led1 = zone1out = zone1in; |
dminear | 0:810ec1936452 | 107 | led2 = zone2out = zone2in; |
dminear | 0:810ec1936452 | 108 | led3 = zone3out = zone3in; |
dminear | 0:810ec1936452 | 109 | led4 = zone4out = zone4in; |
dminear | 0:810ec1936452 | 110 | } else { // take computed outputs |
dminear | 0:810ec1936452 | 111 | led1 = zone1out = compute1out; |
dminear | 0:810ec1936452 | 112 | led2 = zone2out = compute2out; |
dminear | 0:810ec1936452 | 113 | led3 = zone3out = compute3out; |
dminear | 0:810ec1936452 | 114 | led4 = zone4out = compute4out; |
dminear | 0:810ec1936452 | 115 | } |
dminear | 0:810ec1936452 | 116 | } |
dminear | 0:810ec1936452 | 117 | } |
dminear | 0:810ec1936452 | 118 |