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

Revision:
0:3c13cc3b4e30
diff -r 000000000000 -r 3c13cc3b4e30 WebTrafficMonitor.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebTrafficMonitor.cpp	Mon Jan 10 18:10:05 2011 +0000
@@ -0,0 +1,70 @@
+// 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
+// http://mbed.org
+
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPClient.h"
+#include "Servo.h"
+
+#define SIGNUPS_URL "http://url-returning-signups-int"  // number of signups since last checked
+#define HITS_URL "http://url-returning-hits-int"        // number of hits/sec since last checked
+#define HITS_MAX 1000                                   // scale max hits/sec
+
+EthernetNetIf eth;
+HTTPClient http;
+
+DigitalOut bell(p12);
+Servo meter(p21);
+
+// ding a bell (fire a digital out driving a solenoid)
+void ding() {
+    bell = 1;
+    wait(0.25);
+    bell = 0;
+}
+
+// fetch a integer from a url
+int get_result(char *url) {
+    HTTPText txt;
+    HTTPResult r = http.get(url, &txt);
+
+    if(r != HTTP_OK) {
+        printf("Error [%d] fetching url [%s]\n", r, url);
+        return -1;
+    }
+    
+    printf("Response [%s] from url [%s]\n", txt.gets(), url);
+    int v = 0;
+    if(sscanf(txt.gets(), "%d", &v) != 1) {
+        printf("Could not convert value to int\n");
+    }
+    
+    return v;
+}
+
+int main() {
+    printf("Setup the network...\n");
+    EthernetErr ethErr = eth.setup();
+    if (ethErr) {
+        error("Error %d in setup\n", ethErr);
+    }
+    printf("OK!\n");
+
+    while (1) {
+        int hits = get_result(HITS_URL);
+        int signups = get_result(SIGNUPS_URL);
+
+        printf("hits = %d, signups = %d\n", hits, signups);
+        
+        // ding for every signup since last request
+        for(int i=0; i<signups; i++) {
+            ding();
+            wait(0.5);
+        }
+    
+        // set the servo based on hits/sec
+        meter = (float)hits / (float)HITS_MAX;            
+   }
+}