Nucleo based high altitude balloon computer
Dependencies: SDFileSystem Venus838 mbed MS5611 TinyGPS
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 }
Generated on Thu Jul 14 2022 22:44:28 by
1.7.2