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

Committer:
NickRyder
Date:
Mon Dec 10 13:18:54 2012 +0000
Revision:
0:a75ff778bebe
Prototype river sensor. Measures and buffers distances and transmits them via UDP.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NickRyder 0:a75ff778bebe 1 #include "mbed.h"
NickRyder 0:a75ff778bebe 2 #include "RangeFinder.h"
NickRyder 0:a75ff778bebe 3 #include "VodafoneUSBModem.h"
NickRyder 0:a75ff778bebe 4 #include "VodafoneUSBModem/Socket/UDPSocket.h"
NickRyder 0:a75ff778bebe 5
NickRyder 0:a75ff778bebe 6 void test(void const*) {
NickRyder 0:a75ff778bebe 7 set_time(0); // really should set time over network, needed a
NickRyder 0:a75ff778bebe 8 // set_time() or time(NULL) gave -1 for some reason
NickRyder 0:a75ff778bebe 9 AnalogIn batterymonitor(p19);
NickRyder 0:a75ff778bebe 10 RangeFinder rf(p21, 10, 5800.0, 100000);
NickRyder 0:a75ff778bebe 11 float battery;
NickRyder 0:a75ff778bebe 12 int index = 0;
NickRyder 0:a75ff778bebe 13 float distances[100];
NickRyder 0:a75ff778bebe 14 time_t times[100];
NickRyder 0:a75ff778bebe 15 int loop = 60;
NickRyder 0:a75ff778bebe 16 UDPSocket sock;
NickRyder 0:a75ff778bebe 17 VodafoneUSBModem mo;
NickRyder 0:a75ff778bebe 18 while(1) {
NickRyder 0:a75ff778bebe 19 distances[index] = rf.read_m();
NickRyder 0:a75ff778bebe 20 times[index] = time(NULL);
NickRyder 0:a75ff778bebe 21 printf("%i: d = %f m, t = %d s.\n", index, distances[index], times[index]);
NickRyder 0:a75ff778bebe 22 wait(1.0);
NickRyder 0:a75ff778bebe 23 index++;
NickRyder 0:a75ff778bebe 24 if (index == loop) {
NickRyder 0:a75ff778bebe 25 index = 0;
NickRyder 0:a75ff778bebe 26 printf("I am attempting to connect...\n");
NickRyder 0:a75ff778bebe 27 int x = mo.connect("smart");
NickRyder 0:a75ff778bebe 28 if (x){
NickRyder 0:a75ff778bebe 29 printf("Failed to connect.\n");
NickRyder 0:a75ff778bebe 30 } else {
NickRyder 0:a75ff778bebe 31 int bound = sock.bind(87);
NickRyder 0:a75ff778bebe 32 printf("Bound = %d.\n", bound);
NickRyder 0:a75ff778bebe 33 Endpoint server;
NickRyder 0:a75ff778bebe 34 int servercon = server.set_address("someurl.org", 2345);
NickRyder 0:a75ff778bebe 35 char databuffer[512];
NickRyder 0:a75ff778bebe 36 for (int i = 0; i < loop; i++) {
NickRyder 0:a75ff778bebe 37 sprintf(databuffer, "id=mbedAA,time=%i,height=%f", times[i], distances[i]);
NickRyder 0:a75ff778bebe 38 int len = 0;
NickRyder 0:a75ff778bebe 39 for (len = 0; len < 512; len++) {
NickRyder 0:a75ff778bebe 40 if (databuffer[len] == '\0') break;
NickRyder 0:a75ff778bebe 41 }
NickRyder 0:a75ff778bebe 42 printf("Sending: %s (%d)\n", databuffer, len);
NickRyder 0:a75ff778bebe 43 int n = sock.sendTo(server, databuffer, len);
NickRyder 0:a75ff778bebe 44 printf("Sent %i bytes.\n", n);
NickRyder 0:a75ff778bebe 45 }
NickRyder 0:a75ff778bebe 46 battery = batterymonitor.read() * 3.3 * 3.0;
NickRyder 0:a75ff778bebe 47 printf("Battery at %f V.\n", battery);
NickRyder 0:a75ff778bebe 48 sprintf(databuffer, "id=mbedAA,time=%d,battery=%f", time(NULL), battery);
NickRyder 0:a75ff778bebe 49 int len;
NickRyder 0:a75ff778bebe 50 for (len = 0; len < 512; len++) {
NickRyder 0:a75ff778bebe 51 if (databuffer[len] == '\0') break;
NickRyder 0:a75ff778bebe 52 }
NickRyder 0:a75ff778bebe 53 sock.sendTo(server, databuffer, len);
NickRyder 0:a75ff778bebe 54 mo.disconnect();
NickRyder 0:a75ff778bebe 55 }
NickRyder 0:a75ff778bebe 56 }
NickRyder 0:a75ff778bebe 57 }
NickRyder 0:a75ff778bebe 58 }
NickRyder 0:a75ff778bebe 59
NickRyder 0:a75ff778bebe 60 int main()
NickRyder 0:a75ff778bebe 61 {
NickRyder 0:a75ff778bebe 62 Thread testTask(test, NULL, osPriorityNormal, 1024 * 10);
NickRyder 0:a75ff778bebe 63 DigitalOut led(LED2);
NickRyder 0:a75ff778bebe 64 while(1)
NickRyder 0:a75ff778bebe 65 {
NickRyder 0:a75ff778bebe 66 led=!led;
NickRyder 0:a75ff778bebe 67 Thread::wait(10000);
NickRyder 0:a75ff778bebe 68 }
NickRyder 0:a75ff778bebe 69
NickRyder 0:a75ff778bebe 70 return 0;
NickRyder 0:a75ff778bebe 71 }