diff --git a/master/master/config.h b/master/master/config.h --- a/master/master/config.h +++ b/master/master/config.h @@ -23,7 +23,7 @@ #define MODULE_ID '1' #define BOARDTEMP_ADDR 0x90 -#define HEATER_THRESHOLD 70 +#define HEATER_THRESHOLD 25 // -------------------------------------------------------------------------- // Error Codes config (led.c, used throughout code) diff --git a/master/master/lib/led.c b/master/master/lib/led.c --- a/master/master/lib/led.c +++ b/master/master/lib/led.c @@ -23,6 +23,12 @@ void led_setup() *(ledList[i].direction) |= (1< +#include #include "sensordata.h" +#include "slavesensors.h" #include "boardtemp.h" +#include "looptime.h" #include "gps.h" int16_t slaves[MAX_NUM_SLAVES][MAX_NUM_SENSORS]; @@ -53,4 +56,54 @@ char commentBuffer[128]; char* slavesensors_getAPRScomment() { snprintf(commentBuffer,128, "T%d S%s V%s H%s", sensors_getBoardTemp(), get_sv(), get_speedKnots(), get_hdop()); return commentBuffer; +} + + +char logbuf[128]; +bool dataWasReady = false; + +void sensordata_logvalues() { + // Generate CSV header after we have queried all slaves once + if(slavesensors_dataReady()) { + + // Only generate/write header the first time data is ready + if(!dataWasReady) { + char csvHeader[128]; + csvHeader[0] = 0x00; + + // Add master data headers + snprintf(csvHeader, 128, "Time,BoardTemp,Lat,Lon,HDOP,Speed,GPS SV,"); + + // Add slave data headers + for(uint8_t i=0; i LEDCYCLE_RATE) { led_spin(); + // Enable GPS serial interrupts if we aren't doing AFSK if(!afsk_busy()) serial1_ion(); + lastLedCycle = time_millis(); } @@ -105,11 +95,6 @@ int main(void) heater_regulateTemp(); - // Print out GPS debug - //snprintf(debugBuf, 128, "GPS> time: %s lat: %s lon: %s speed: %s hdop: %s course: %s\r\n", - //get_timestamp(),get_latitude(),get_longitude(),get_speedKnots(),get_hdop(), get_course()); - //serial0_sendString(debugBuf); - // Turn on sideboard LED if we have a fix if(strcmp("99.99", get_hdop()) == 0) { led_off(LED_SIDEBOARD); @@ -118,54 +103,10 @@ int main(void) led_on(LED_SIDEBOARD); } - sensors_readBoardTemp(); // i2c read, 400k + sensors_readBoardTemp(); - // If we've gotten data from all slaves once, we're ready to make a CSV header and start logging - if(slavesensors_dataReady()) { - if(!dataWasReady) { - char csvHeader[128]; - csvHeader[0] = 0x00; - - // Add master data headers - snprintf(csvHeader, 128, "Time,BoardTemp,Lat,Lon,HDOP,Speed,GPS SV,"); - - for(uint8_t i=0; i "); - //serial0_sendString(logbuf); - #endif + // Write CSV header and log data values + sensordata_logvalues(); led_off(LED_CYCLE); lastLog = time_millis(); @@ -174,10 +115,11 @@ int main(void) // Periodic: Data Request if(time_millis() - lastDataReq > DATAREQUEST_RATE) { + // Start getting values for next transmission if(slavesensors_isrequesting()) { - // TODO: something is terribly wrong + // TODO: something is terribly wrong. Timeout? } else { @@ -191,17 +133,23 @@ int main(void) // Periodic: APRS transmission if(time_millis() - lastAprsBroadcast > APRS_TRANSMIT_PERIOD) { + // Ensure we aren't already transmitting while(afsk_busy()); + + // Turn off interrupts and transmit APRS sentence serial1_ioff(); aprs_send(); // non-blocking lastAprsBroadcast = time_millis(); } - + // Parse any serial data in the XBee software buffer parseResult = serparser_parse(); slavesensors_process(parseResult); + + // Parse any NMEA messages in the GPS software buffer parse_gps_transmission(); + wdt_reset(); } } \ No newline at end of file