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
main.cpp@0:a75ff778bebe, 2012-12-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |