Nucleo based high altitude balloon computer

Dependencies:   SDFileSystem Venus838 mbed MS5611 TinyGPS

Files at this revision

API Documentation at this revision

Comitter:
matgyver
Date:
Mon Jun 30 04:02:08 2014 +0000
Parent:
6:f91db4a7acf1
Commit message:
Fixed lockup issue and swapped from Timer to Ticker. Moved logging function to separate function. Added more info to debug file and added placeholders for additional information. Other minor bugfixes.

Changed in this revision

Atlas.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r f91db4a7acf1 -r 308ab9062b76 Atlas.cpp
--- a/Atlas.cpp	Thu Jun 26 14:43:31 2014 +0000
+++ b/Atlas.cpp	Mon Jun 30 04:02:08 2014 +0000
@@ -3,7 +3,6 @@
 #include "SDFileSystem.h"
 #include "Venus838.h"
 #include "TinyGPS.h"
-//#include "nmea_parser.h"
 #include "MS5611I2C.h"
 
 DigitalOut grn(LED_GRN);
@@ -14,7 +13,36 @@
 TinyGPS gps;
 MS5611I2C pres(I2C_SDA, I2C_SCL, false);
 SDFileSystem sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, "sd");
-Timer tick;
+Ticker tick;
+
+unsigned int logCount = 0;
+
+//Function to log data
+void datalog(void)  {
+    unsigned long date, time, ttf;
+    double latitude, longitude, altitude;
+    float pressure, temperature, battery;
+    //unsigned int writeCount = 0;
+    //unsigned int logCount = 0;
+    
+    grn = !grn;
+    gps.get_datetime(&date, &time, &ttf);
+    gps.f_get_position(&latitude, &longitude, &ttf);
+    altitude = gps.f_altitude();
+    pressure = pres.getPressure();
+    temperature = pres.getTemperature();
+    battery = (batt.read()*3.3f) * 4.0f;
+    //wait_ms(1); 
+    pc.printf("%u, %u, %u, %f, %f, %f, %f, %f, %f\r\n",
+        logCount, date, time, longitude, latitude, altitude,
+        pressure, temperature, battery);
+    FILE *fp = fopen("/sd/atlas.txt", "a");
+    fprintf(fp, "%u, %u, %u, %f, %f, %f, %f, %f %f\r\n",
+        logCount, date, time, longitude, latitude, altitude,
+        pressure, temperature, battery);
+    logCount++;
+    fclose(fp);    
+}
 
 void init() {
     pc.baud(115200);
@@ -34,28 +62,29 @@
         error("Could not open file for write\r\n");
         ylw = LED_ON;
     }
-    fprintf(fp, "Hooray, we can write to the SD Card.  Go get a cookie.");
-    
+    fprintf(fp, "Atlas Debug File\r\n");
+    fprintf(fp, "====================\r\n");
+    fprintf(fp, "Atlas Firmware: 0.1\r\n");
+    //TODO Add calls to query GPS for fimrware and other info
+    fprintf(fp, "GPS Firmware:   Update rate:   Mode:   \r\n");
+    //fprintf(fp, pres.printCoefficients());
     printf("Closing file...\r\n");
     fclose(fp);
     
     pres.printCoefficients();
     
-    tick.start();
+    //tick.start();
     pc.printf("Atlas Ready!\r\n");
 }
 
 int main() {
-    unsigned long date, time, ttf;
-    double latitude, longitude, altitude;
-    float pressure, temperature, battery;
-    unsigned int writeCount = 0;
     
     init();
+    tick.attach(&datalog,1.0);
     FILE *fp = fopen("/sd/atlas.txt", "a");
     fprintf(fp, "Atlas Logger\r\n");
-    fprintf(fp, "Date   Time    Lon     Lat     Alt     Pressure    Temp    Battery\r\n");
-    fprintf(fp, "------------------------------------------------------------------\r\n");
+    fprintf(fp, "Count  Date   Time    Lon     Lat     Alt     Pressure    Temp    Battery\r\n");
+    fprintf(fp, "-------------------------------------------------------------------------\r\n");
     fclose(fp);
     while(true) {
         if(venus.readable()) {
@@ -63,10 +92,11 @@
             //pc.putc(c);
             gps.encode(c);
         }
+        
+/*
         if(tick.read_ms() >= 500) {
             tick.reset();
             grn = !grn;
-            
             gps.get_datetime(&date, &time, &ttf);
             gps.f_get_position(&latitude, &longitude, &ttf);
             altitude = gps.f_altitude();
@@ -74,22 +104,24 @@
             temperature = pres.getTemperature();
             battery = (batt.read()*3.3f) * 4.0f;
             wait_ms(1); 
-            pc.printf("%u, %u, %f, %f, %f, %f, %f, %f\r\n",
-                date, time, longitude, latitude, altitude,
+            pc.printf("%u %u, %u, %f, %f, %f, %f, %f, %f\r\n",
+                logCount, date, time, longitude, latitude, altitude,
                 pressure, temperature, battery
             );
             FILE *fp = fopen("/sd/atlas.txt", "a");
-            fprintf(fp, "%u, %u, %f, %f, %f, %f, %f %f\r\n",
-                date, time, longitude, latitude, altitude,
+            fprintf(fp, "%u %u, %u, %f, %f, %f, %f, %f %f\r\n",
+                logCount, date, time, longitude, latitude, altitude,
                 pressure, temperature, battery
             );
+            logCount++;
             fclose(fp);
             writeCount++;
-            if(writeCount > 100) {
-                writeCount = 0;
-                fclose(fp);
-                FILE *fp = fopen("/sd/atlas.txt", "a");
-            }
+                if(writeCount > 100) {
+                    writeCount = 0;
+                    fclose(fp);
+                    FILE *fp = fopen("/sd/atlas.txt", "a");
+                }
         }
+*/
     }
 }
\ No newline at end of file