/* * Slave Firmware * * Wireless Observational Modular Aerial Network * * Kyle Ripperger * Ethan Zonca * Matthew Kanning * Matthew Kroening * */ #include "config.h" #include #include #include #include #include #include #include #include "modules.h" #include "lib/serial.h" #include "lib/serparser.h" #include "lib/led.h" #include "lib/inputOutput.h" #include "lib/i2c.h" #include "lib/spi.h" #include "lib/geiger.h" #include "lib/sensors.h" #include "lib/cameras.h" #include "lib/loopTimer.h" #include "lib/masterComm.h" void micro_setup() { // Generic microcontroller config options sei(); // Enable interrupts } int main(void) { // Writes ID to EEPROM, change for all modules and delete after programming // 0 is for generic setup, 1 is for sensors, 2 is for Geiger, 3 is for cameras // Initialize micro_setup(); // Generic microcontroller config options time_setup(); // Setup loop timer and interrupts (TIMER0) led_configure(); // Configure ports and registers for LED operation io_configure(); // Configure IO ports and registers i2c_init(); // Setup I2C serial0_setup(); // Config serial port io_readModuleId(); modules_setup(io_getModuleId()); // Run setup functions for specific module // Serial output //DEBUG char buff[128]; //Buffer for serial output //DEBUG serial0_sendString("Starting Slave\r\n"); //DEBUG while(1) { // Master communication masterComm_checkParser(); //Checks parser for data requests from master // Main slave operations if ((time_millis() % SENSOR_LOOP) == 0) // Uses program timer to run every so often. Time interval defined in config.h { led_on(0); sensors_readBatt(); // Read Battery level sensors_readBoardTemp(); // Read board temperature sensor (Common on all slaves) (Data Read) modules_run(io_getModuleId()); // Runs specific module functions (like data reading) i2c_write(EEPROM_ADDR, 0x05, 0x01); io_regulateTemp(); // Gets board temperature and enables heater if below threshold //snprintf(buff,128,"|ModuleID: %u |BoardTemp: %i |Millis: %lu |Lux: %lu |Pressure: %lu |Altitude: %lu |Battery: %u \r\n ",io_getModuleId(),sensors_getBoardTemp(),time_millis(),sensors_getLux(),sensors_getPressure(),sensors_getAltitude(),sensors_getBatt()); //DEBUG //serial0_sendString(buff); //DEBUG _delay_ms(1); // Delay to prevent the sensor loop from running again before time_millis changes led_off(0); led_off(2); led_output(i2c_read(EEPROM_ADDR, 0x05)); } } return 0; } /********Examples of data reading and getting****************** x = geiger_getCpm(); //Data get x = sensors_getSpiTemp(); //Data get x = sensors_getBoardTemp(); //Data get sensors_readSpiTemp(); //Data Read sensors_readBoardTemp(); //Data Read led_output(0xFF); //Output value to LED array i2c_write(RTC_ADDR, 0x05, 0x3A); //i2c Write Example PORTA &= ~(1 << PA1); //OFF PORTA |= (1 << PA1); //ON PORTB ^= (1 << PB0); //Toggle sprintf(buff, "log: %u,%u,%u,%u\r\n", temp,temp2,temp3,temp4); serial0_sendString(buff); **************************************************************/