Example of a simple website hits/signup traffic monitor to drive a display (e.g. servo or panel meter) and indicator (e.g. bell, solenoid) based on responses from a webserver
Dependencies: EthernetNetIf mbed Servo
WebTrafficMonitor.cpp@0:3c13cc3b4e30, 2011-01-10 (annotated)
- Committer:
- simon
- Date:
- Mon Jan 10 18:10:05 2011 +0000
- Revision:
- 0:3c13cc3b4e30
First simple example
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
simon | 0:3c13cc3b4e30 | 1 | // Example of a simple website hits/signup traffic monitor to drive |
simon | 0:3c13cc3b4e30 | 2 | // a display (e.g. servo or panel meter) and indicator (e.g. bell, solenoid) |
simon | 0:3c13cc3b4e30 | 3 | // based on responses from a webserver |
simon | 0:3c13cc3b4e30 | 4 | // http://mbed.org |
simon | 0:3c13cc3b4e30 | 5 | |
simon | 0:3c13cc3b4e30 | 6 | #include "mbed.h" |
simon | 0:3c13cc3b4e30 | 7 | #include "EthernetNetIf.h" |
simon | 0:3c13cc3b4e30 | 8 | #include "HTTPClient.h" |
simon | 0:3c13cc3b4e30 | 9 | #include "Servo.h" |
simon | 0:3c13cc3b4e30 | 10 | |
simon | 0:3c13cc3b4e30 | 11 | #define SIGNUPS_URL "http://url-returning-signups-int" // number of signups since last checked |
simon | 0:3c13cc3b4e30 | 12 | #define HITS_URL "http://url-returning-hits-int" // number of hits/sec since last checked |
simon | 0:3c13cc3b4e30 | 13 | #define HITS_MAX 1000 // scale max hits/sec |
simon | 0:3c13cc3b4e30 | 14 | |
simon | 0:3c13cc3b4e30 | 15 | EthernetNetIf eth; |
simon | 0:3c13cc3b4e30 | 16 | HTTPClient http; |
simon | 0:3c13cc3b4e30 | 17 | |
simon | 0:3c13cc3b4e30 | 18 | DigitalOut bell(p12); |
simon | 0:3c13cc3b4e30 | 19 | Servo meter(p21); |
simon | 0:3c13cc3b4e30 | 20 | |
simon | 0:3c13cc3b4e30 | 21 | // ding a bell (fire a digital out driving a solenoid) |
simon | 0:3c13cc3b4e30 | 22 | void ding() { |
simon | 0:3c13cc3b4e30 | 23 | bell = 1; |
simon | 0:3c13cc3b4e30 | 24 | wait(0.25); |
simon | 0:3c13cc3b4e30 | 25 | bell = 0; |
simon | 0:3c13cc3b4e30 | 26 | } |
simon | 0:3c13cc3b4e30 | 27 | |
simon | 0:3c13cc3b4e30 | 28 | // fetch a integer from a url |
simon | 0:3c13cc3b4e30 | 29 | int get_result(char *url) { |
simon | 0:3c13cc3b4e30 | 30 | HTTPText txt; |
simon | 0:3c13cc3b4e30 | 31 | HTTPResult r = http.get(url, &txt); |
simon | 0:3c13cc3b4e30 | 32 | |
simon | 0:3c13cc3b4e30 | 33 | if(r != HTTP_OK) { |
simon | 0:3c13cc3b4e30 | 34 | printf("Error [%d] fetching url [%s]\n", r, url); |
simon | 0:3c13cc3b4e30 | 35 | return -1; |
simon | 0:3c13cc3b4e30 | 36 | } |
simon | 0:3c13cc3b4e30 | 37 | |
simon | 0:3c13cc3b4e30 | 38 | printf("Response [%s] from url [%s]\n", txt.gets(), url); |
simon | 0:3c13cc3b4e30 | 39 | int v = 0; |
simon | 0:3c13cc3b4e30 | 40 | if(sscanf(txt.gets(), "%d", &v) != 1) { |
simon | 0:3c13cc3b4e30 | 41 | printf("Could not convert value to int\n"); |
simon | 0:3c13cc3b4e30 | 42 | } |
simon | 0:3c13cc3b4e30 | 43 | |
simon | 0:3c13cc3b4e30 | 44 | return v; |
simon | 0:3c13cc3b4e30 | 45 | } |
simon | 0:3c13cc3b4e30 | 46 | |
simon | 0:3c13cc3b4e30 | 47 | int main() { |
simon | 0:3c13cc3b4e30 | 48 | printf("Setup the network...\n"); |
simon | 0:3c13cc3b4e30 | 49 | EthernetErr ethErr = eth.setup(); |
simon | 0:3c13cc3b4e30 | 50 | if (ethErr) { |
simon | 0:3c13cc3b4e30 | 51 | error("Error %d in setup\n", ethErr); |
simon | 0:3c13cc3b4e30 | 52 | } |
simon | 0:3c13cc3b4e30 | 53 | printf("OK!\n"); |
simon | 0:3c13cc3b4e30 | 54 | |
simon | 0:3c13cc3b4e30 | 55 | while (1) { |
simon | 0:3c13cc3b4e30 | 56 | int hits = get_result(HITS_URL); |
simon | 0:3c13cc3b4e30 | 57 | int signups = get_result(SIGNUPS_URL); |
simon | 0:3c13cc3b4e30 | 58 | |
simon | 0:3c13cc3b4e30 | 59 | printf("hits = %d, signups = %d\n", hits, signups); |
simon | 0:3c13cc3b4e30 | 60 | |
simon | 0:3c13cc3b4e30 | 61 | // ding for every signup since last request |
simon | 0:3c13cc3b4e30 | 62 | for(int i=0; i<signups; i++) { |
simon | 0:3c13cc3b4e30 | 63 | ding(); |
simon | 0:3c13cc3b4e30 | 64 | wait(0.5); |
simon | 0:3c13cc3b4e30 | 65 | } |
simon | 0:3c13cc3b4e30 | 66 | |
simon | 0:3c13cc3b4e30 | 67 | // set the servo based on hits/sec |
simon | 0:3c13cc3b4e30 | 68 | meter = (float)hits / (float)HITS_MAX; |
simon | 0:3c13cc3b4e30 | 69 | } |
simon | 0:3c13cc3b4e30 | 70 | } |