Files
@ e26676bc539c
Branch filter:
Location: seniordesign-firmware/master/master/master.c
e26676bc539c
2.4 KiB
text/plain
Optimization (temp sense)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | /*
* Master Firmware
*
* Wireless Observational Modular Aerial Network
*
* Ethan Zonca
* Matthew Kanning
* Kyle Ripperger
* Matthew Kroening
*
*/
#include "config.h"
#include <avr/io.h>
#include <util/delay.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdbool.h>
#include "lib/serial.h"
#include "lib/aprs.h"
#include "lib/afsk.h"
#include "lib/led.h"
#include "lib/logger.h"
#include "lib/watchdog.h"
#include "lib/sd/sd_raw_config.h"
#include "lib/looptime.h"
#include "lib/slavesensors.h"
void micro_setup() {
}
int main(void)
{
// Initialize libraries
time_setup();
micro_setup();
watchdog_setup();
led_setup();
serial0_setup();
serial1_setup();
slavesensors_setup();
logger_setup();
afsk_setup();
serial0_sendString("\r\n\r\n---------------------------------\r\nHAB Controller 1.0 - Initialized!\r\n---------------------------------\r\n\r\n");
led_on(POWER);
// Buffer for string operations
char logbuf[32];
const char* logBufPtr = logbuf;
// Software timers
uint32_t lastAprsBroadcast = 0;
uint32_t lastLog = 0;
// If we are currently processing sensor data
bool isProcessing = false;
// Write CSV header to SD card
logger_log("ProgramTime,LastAprsBroadcast,LastLog\n");
while(1)
{
// Periodic: Logging
if(time_millis() - lastLog > LOGGER_RATE) {
// TODO: Acquire data from daughterboards
// This will be complicated because we need timeouts / unreliable transmission, etc
//
// For each daughterboard...
// 1. Send request to daughterboard for sensor data
// 2. Wait for response from daughterboard (timeout!)
// 3. Put data into local variables for transmission / logging
led_on(STAT);
snprintf(logbuf, 32, "%lu,%lu,%lu,\r\n", time_millis(), lastAprsBroadcast,lastLog);
logger_log(logbuf);
serial0_sendString("SD Logger: ");
serial0_sendString(logBufPtr);
led_off(STAT);
lastLog = time_millis();
}
// Periodic: APRS transmission
if(time_millis() - lastAprsBroadcast > APRS_TRANSMIT_PERIOD) {
while(afsk_busy());
aprs_send(); // non-blocking
serial0_sendString("Initiating APRS transmission...\r\n");
// Start getting values for next transmission
isProcessing = true;
lastAprsBroadcast = time_millis();
}
// keep calling processSensors until it is finished
if(isProcessing)
{
isProcessing = slavesensors_process();
}
wdt_reset();
}
}
|