#include "settings.h" #include #ifdef ENABLE_MEMORY_DIAGNOSTICS // #include #define DISPLAY_FREE_MEMORY() Serial.println(freeMemory(), DEC); #else #define DISPLAY_FREE_MEMORY() // noop #endif #include "random.h" // BAD PRACTICE: For some extremely strange reason, the Arduino IDE doesn't pick up random.cpp like it does our other source files - so we've got to explicitly include it here. If we had control over the build process (which we don't), we've use a Makefile here that handled this better. #include "random.cpp" #include "gps.h" #include "peripheral.h" #include "storage.h" #include "power.h" #include "transmission.h" void setup() { Serial.begin(BAUD_PC); Serial.println(F("[main] Starting")); random_begin(); DISPLAY_FREE_MEMORY(); GPSLocation gps_data = gps_fetch(); DISPLAY_FREE_MEMORY(); Serial.print(F("[main] Location ")); Serial.print(gps_data.lat); Serial.print(F(", ")); Serial.println(gps_data.lng); uint32_t id = random_get(); Serial.print(F("[main] Id ")); Serial.println(id); // Activate microSD card breakout board on the SPI bus peripheral_register(PIN_SPI_CS_RFM95); peripheral_register(PIN_SPI_CS_SD); peripheral_unsilence(PIN_SPI_CS_SD); DISPLAY_FREE_MEMORY(); store_reading(id, gps_data); DISPLAY_FREE_MEMORY(); #ifdef SD_DEBUG_ENABLED store_debug(gps_data.time, 19 - 1); // Don't print the null byte DISPLAY_FREE_MEMORY(); #endif // ------------------------------------------------------------------------ // Activate the RFM95 peripheral_switch(PIN_SPI_CS_SD, PIN_SPI_CS_RFM95); const uint8_t message_size = sizeof(uint32_t) + sizeof(float)*2; uint8_t message[message_size]; const uint8_t* bytes_id = reinterpret_cast(&id); const uint8_t* bytes_lat = reinterpret_cast(&(gps_data.lat)); const uint8_t* bytes_lng = reinterpret_cast(&(gps_data.lat)); // for(int i = 0; i < sizeof(uint32_t); i++) { // } // The size of a float == the size of a uint32_t for(int i = 0; i < sizeof(float); i++) { message[i] = bytes_id[i]; message[sizeof(uint32_t) + i] = bytes_lat[i]; message[sizeof(uint32_t) + sizeof(float) + i] = bytes_lng[i]; } #ifdef ENABLE_RADIO // Serial.println(F("[main] Transmitting")); transmit_init(); transmit_send(message, message_size); #endif power_off(); // Doesn't return } void loop() { }