Aerodyne / Mbed 2 deprecated Atlas

Dependencies:   SDFileSystem Venus838 mbed MS5611 TinyGPS

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Atlas.cpp Source File

Atlas.cpp

00001 #include "mbed.h"
00002 #include "Atlas.h"
00003 #include "SDFileSystem.h"
00004 #include "Venus838.h"
00005 #include "TinyGPS.h"
00006 #include "MS5611I2C.h"
00007 
00008 DigitalOut grn(LED_GRN);
00009 DigitalOut ylw(LED_YLW);
00010 AnalogIn    batt(PC_2);
00011 Serial pc(USBTX, USBRX);
00012 Venus838 venus(GPS_TX, GPS_RX);
00013 TinyGPS gps;
00014 MS5611I2C pres(I2C_SDA, I2C_SCL, false);
00015 SDFileSystem sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, "sd");
00016 Ticker tick;
00017 
00018 unsigned int logCount = 0;
00019 
00020 //Function to log data
00021 void datalog(void)  {
00022     unsigned long date, time, ttf;
00023     double latitude, longitude, altitude;
00024     float pressure, temperature, battery;
00025     //unsigned int writeCount = 0;
00026     //unsigned int logCount = 0;
00027     
00028     grn = !grn;
00029     gps.get_datetime(&date, &time, &ttf);
00030     gps.f_get_position(&latitude, &longitude, &ttf);
00031     altitude = gps.f_altitude();
00032     pressure = pres.getPressure();
00033     temperature = pres.getTemperature();
00034     battery = (batt.read()*3.3f) * 4.0f;
00035     //wait_ms(1); 
00036     pc.printf("%u, %u, %u, %f, %f, %f, %f, %f, %f\r\n",
00037         logCount, date, time, longitude, latitude, altitude,
00038         pressure, temperature, battery);
00039     FILE *fp = fopen("/sd/atlas.txt", "a");
00040     fprintf(fp, "%u, %u, %u, %f, %f, %f, %f, %f %f\r\n",
00041         logCount, date, time, longitude, latitude, altitude,
00042         pressure, temperature, battery);
00043     logCount++;
00044     fclose(fp);    
00045 }
00046 
00047 void init() {
00048     pc.baud(115200);
00049     grn = LED_OFF;
00050     ylw = LED_OFF;
00051     printf("Configuring Venus GPS...\r\n");
00052     //venus.setUpdateRate(1);
00053     venus.setNavigationMode(4);
00054     venus.setNmeaMessages(true, false, false, false, true, false);
00055     
00056     printf("Attempting to open SD card...\r\n");
00057     mkdir("/sd/debug", 0777);
00058     
00059     printf("Attempting to open file...\r\n");
00060     FILE *fp = fopen("/sd/debug/debug.txt", "w");
00061     if(fp == NULL) {
00062         error("Could not open file for write\r\n");
00063         ylw = LED_ON;
00064     }
00065     fprintf(fp, "Atlas Debug File\r\n");
00066     fprintf(fp, "====================\r\n");
00067     fprintf(fp, "Atlas Firmware: 0.1\r\n");
00068     //TODO Add calls to query GPS for fimrware and other info
00069     fprintf(fp, "GPS Firmware:   Update rate:   Mode:   \r\n");
00070     //fprintf(fp, pres.printCoefficients());
00071     printf("Closing file...\r\n");
00072     fclose(fp);
00073     
00074     pres.printCoefficients();
00075     
00076     //tick.start();
00077     pc.printf("Atlas Ready!\r\n");
00078 }
00079 
00080 int main() {
00081     
00082     init();
00083     tick.attach(&datalog,1.0);
00084     FILE *fp = fopen("/sd/atlas.txt", "a");
00085     fprintf(fp, "Atlas Logger\r\n");
00086     fprintf(fp, "Count  Date   Time    Lon     Lat     Alt     Pressure    Temp    Battery\r\n");
00087     fprintf(fp, "-------------------------------------------------------------------------\r\n");
00088     fclose(fp);
00089     while(true) {
00090         if(venus.readable()) {
00091             char c = venus.getc();
00092             //pc.putc(c);
00093             gps.encode(c);
00094         }
00095         
00096 /*
00097         if(tick.read_ms() >= 500) {
00098             tick.reset();
00099             grn = !grn;
00100             gps.get_datetime(&date, &time, &ttf);
00101             gps.f_get_position(&latitude, &longitude, &ttf);
00102             altitude = gps.f_altitude();
00103             pressure = pres.getPressure();
00104             temperature = pres.getTemperature();
00105             battery = (batt.read()*3.3f) * 4.0f;
00106             wait_ms(1); 
00107             pc.printf("%u %u, %u, %f, %f, %f, %f, %f, %f\r\n",
00108                 logCount, date, time, longitude, latitude, altitude,
00109                 pressure, temperature, battery
00110             );
00111             FILE *fp = fopen("/sd/atlas.txt", "a");
00112             fprintf(fp, "%u %u, %u, %f, %f, %f, %f, %f %f\r\n",
00113                 logCount, date, time, longitude, latitude, altitude,
00114                 pressure, temperature, battery
00115             );
00116             logCount++;
00117             fclose(fp);
00118             writeCount++;
00119                 if(writeCount > 100) {
00120                     writeCount = 0;
00121                     fclose(fp);
00122                     FILE *fp = fopen("/sd/atlas.txt", "a");
00123                 }
00124         }
00125 */
00126     }
00127 }