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

Committer:
simon
Date:
Mon Jan 10 18:10:05 2011 +0000
Revision:
0:3c13cc3b4e30
First simple example

Who changed what in which revision?

UserRevisionLine numberNew 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 }