A remote sensor to measure the height of a river and send the data using UDP over 3G.

Dependencies:   HTTPClient RangeFinder VodafoneUSBModem mbed-rtos mbed

Revision:
0:a75ff778bebe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Dec 10 13:18:54 2012 +0000
@@ -0,0 +1,71 @@
+#include "mbed.h"
+#include "RangeFinder.h"
+#include "VodafoneUSBModem.h"
+#include "VodafoneUSBModem/Socket/UDPSocket.h"
+
+void test(void const*) {
+    set_time(0);    // really should set time over network, needed a 
+                    // set_time() or time(NULL) gave -1 for some reason
+    AnalogIn batterymonitor(p19);
+    RangeFinder rf(p21, 10, 5800.0, 100000);
+    float battery;
+    int index = 0;
+    float distances[100];
+    time_t times[100];
+    int loop = 60;
+    UDPSocket sock;
+    VodafoneUSBModem mo;
+    while(1) {
+        distances[index] = rf.read_m();
+        times[index] = time(NULL);
+        printf("%i: d = %f m, t = %d s.\n", index, distances[index], times[index]);
+        wait(1.0);
+        index++;
+        if (index == loop)   {   
+            index = 0;
+            printf("I am attempting to connect...\n");
+            int x = mo.connect("smart");
+            if (x){
+                printf("Failed to connect.\n");
+            }   else    {
+                int bound = sock.bind(87);
+                printf("Bound = %d.\n", bound);
+                Endpoint server;
+                int servercon = server.set_address("someurl.org", 2345);
+                char databuffer[512];
+                for (int i = 0; i < loop; i++)    {
+                    sprintf(databuffer, "id=mbedAA,time=%i,height=%f", times[i], distances[i]);
+                    int len = 0;
+                    for (len = 0; len < 512; len++) {
+                        if (databuffer[len] == '\0')  break;
+                    }
+                    printf("Sending: %s (%d)\n", databuffer, len);
+                    int n = sock.sendTo(server, databuffer, len);
+                    printf("Sent %i bytes.\n", n);
+                }
+                battery = batterymonitor.read() * 3.3 * 3.0;
+                printf("Battery at %f V.\n", battery);
+                sprintf(databuffer, "id=mbedAA,time=%d,battery=%f", time(NULL), battery);
+                int len;
+                for (len = 0; len < 512; len++) {
+                    if (databuffer[len] == '\0') break;
+                }
+                sock.sendTo(server, databuffer, len);
+                mo.disconnect();
+            }
+        }
+    }
+}
+
+int main()
+{
+  Thread testTask(test, NULL, osPriorityNormal, 1024 * 10);
+  DigitalOut led(LED2);
+  while(1)
+  {
+    led=!led;
+    Thread::wait(10000);  
+  }
+
+  return 0;
+}
\ No newline at end of file