GDP group 24 node core
Dependencies: EthernetInterface SDFileSystem mbed-rtos mbed snail MbedJSONValue
Diff: main.cpp
- Revision:
- 0:fcab3b154e49
- Child:
- 1:27b35752c5d0
diff -r 000000000000 -r fcab3b154e49 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Nov 11 17:33:41 2014 +0000 @@ -0,0 +1,116 @@ +#include "mbed.h" +#include "snail.h" +#include "sensorinterface.h" +#include "sdcard.h" + +#define DEBUG + +time_t lastPollTime = 0; +time_t pollInterval = 30; + +bool isBasenode = false; + +Serial pc(USBTX, USBRX); + +char* getBasenodeAddress(snail* xbee) +{ + snail::baseaddressrequest request; + xbee->send(request); + + //TODO: only continue if type is base address reply + while(!xbee->isMessageWaiting()) + {} + + //snail::message reply = xbee->readMessage(); + + return ""; +} + +int main() +{ + #ifdef DEBUG + pc.printf("[MAIN] Starting up...\r\n"); + printf(" . .\r\n"); + printf(" / `. .' \\\r\n"); + printf(" .---. < > < > .---.\r\n"); + printf(" | \\ \\ - ~ ~ - / / |\r\n"); + printf(" ~-..-~ ~-..-~\r\n"); + printf(" \\~~~\\.' `./~~~/\r\n"); + printf(" .-~~^-. \\__/ \\__/\r\n"); + printf(" .' O \\ / / \\ \\\r\n"); + printf("(_____, `._.' | } \\/~~~/\r\n"); + printf(" `----. / } | / \\__/\r\n"); + printf(" `-. | / | / `. ,~~|\r\n"); + printf(" ~-.__| /_ - ~ ^| /- _ `..-' f: f:\r\n"); + printf(" | / | / ~-. `-. _||_||_\r\n"); + printf(" |_____| |_____| ~ - . _ _ _ _ _>\r\n"); + printf("\r\n"); + printf("\r\n"); + printf(" Sensorsaurus | Team 24 GDP | Southampton | 2014\r\n"); + printf("\r\n"); + printf("\r\n"); + #endif + + sensorinterface sensors = sensorinterface(); + sdcard sd = sdcard(); + snail xbee = snail(); + + //TODO: read basenode pin + #ifdef DEBUG + pc.printf("[MAIN] Basenode switch: %i\r\n", isBasenode); + #endif + + time_t timestamp = 0; + //if (isBasenode) + //TODO: get timestamp from API + //TODO: be ready to broadcast as the basenode + //else + //TODO: request timestamp from base node + //TODO: find out who basenode is + + set_time(timestamp); + + //TODO: load configuration from SD + + if (isBasenode) + while(1) + { + #ifdef DEBUG + pc.printf("[MAIN] Basenode is idle\r\n"); + #endif + + wait(5); + } + else + while(1) + { + //if xbee interrupt has woken us up + //transmit 10 latest readings + + //check if it's time to poll TODO: add check to see if sensorinterface is ready + if (time(NULL) - lastPollTime > 10) + { + #ifdef DEBUG + pc.printf("[MAIN] Requesting data...\r\n"); + #endif + sensors.requestData(); + lastPollTime = time(NULL); + } + + //if there is data waiting for us... + if (sensors.isDataWaiting()) + { + #ifdef DEBUG + pc.printf("[MAIN] Data waiting, reading data...\r\n"); + #endif + d_reply data = sensors.readData(); + #ifdef DEBUG + for (int i = 0; i < data.readings.size(); i++) + pc.printf("0x%.4X|", data.readings[i]); + #endif + //log + sd.write(static_cast<long int>(time(NULL)), data); + } + + } +} \ No newline at end of file