Rough Draft, still some debugging to be done. Considering getting rubber ducky

Dependencies:   mbed SDFileSystem DS1820 ExtendedTimer

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //////////////////////////////
00002 //Main Code for Themal Wake //
00003 //Jonathan Zelaya           //
00004 //April 11, 2019            //
00005 //////////////////////////////
00006 
00007 #define MULTIPLE_PROBES
00008 #define ARM1_DATA_PIN p25
00009 #define ARM2_DATA_PIN p19
00010 #define TAIL_DATA_PIN p23
00011 #define MAX_PROBES 25
00012 
00013 #include "mbed.h"
00014 #include "DS1820.h"
00015 #include "ExtendedTimer.h"
00016 #include "SDFileSystem.h"
00017 
00018 DS1820* probe1[MAX_PROBES];
00019 DS1820* probe2[MAX_PROBES];
00020 DS1820* probeTail[MAX_PROBES];
00021 SDFileSystem fs(p5, p6, p7, p8, "fs");
00022 ExtendedTimer t;
00023 Ticker sampleTime;
00024 Ticker saveTime;
00025 DigitalOut led1(LED1);
00026 DigitalOut led2(LED2);
00027 DigitalOut led3(LED3);
00028 DigitalOut led4(LED4);
00029 DigitalOut ledOn(p15);
00030 DigitalOut ledError(p16);
00031 
00032 
00033 
00034 int main(){
00035     int num_arm1 = 0;
00036     int num_arm2 = 0;
00037     int num_tail = 0;
00038     //mount filesystem
00039     bool mountFailure = fs.mount();//will let user know if SD mounting was successful
00040     if(mountFailure != 0){
00041         ledError = 1;
00042         return -1;//end program with error status
00043         }
00044         else
00045             ledOn = 1;
00046             
00047     unsigned long long fullName; //DS1820 is 64 bits( a long long)
00048     FILE* out1 = fopen("/fs/arm1.txt","a");//will create a different file for each sensor
00049     FILE* out2 = fopen("/fs/arm2.txt","a");
00050     FILE* out3 = fopen("/fs/tail.txt","a");
00051     
00052     //arm 1 set up
00053     while(DS1820::unassignedProbe(ARM1_DATA_PIN)){
00054         probe1[num_arm1] = new DS1820(ARM1_DATA_PIN);
00055         num_arm1++;
00056         if(num_arm1 == MAX_PROBES){
00057             break;
00058             }
00059         }
00060       
00061     //arm2 set up   
00062     while(DS1820::unassignedProbe(ARM2_DATA_PIN)){
00063         probe2[num_arm2] = new DS1820(ARM2_DATA_PIN);
00064         num_arm2++;
00065         if(num_arm2 == MAX_PROBES){
00066             break;
00067             }
00068         }
00069     
00070     //arm3 set up
00071     while(DS1820::unassignedProbe(TAIL_DATA_PIN)){
00072         probeTail[num_tail] = new DS1820(TAIL_DATA_PIN);
00073         num_tail++;
00074         if(num_tail == MAX_PROBES){
00075             break;
00076             }
00077         }
00078     
00079     //Writing headers for each file!
00080     fprintf(out1, "Found %d device(s)\r\n", num_arm1);//lets user know how many sensors were read during the actual flight
00081     fprintf(out2, "Found %d device(s)\r\n", num_arm2);
00082     fprintf(out3, "Found %d device(s)\r\n", num_tail);
00083     for(int i = 0; i < num_arm1; i++){//reads out the ID numbers to each file and numbers them
00084         fullName = probe1[i]->whoAmI();
00085         fprintf(out1, "\tID%d = ", i);
00086         fprintf(out1, "%llX\r\n", fullName);
00087         }
00088     for(int i = 0; i < num_arm2; i++){
00089         fullName = probe2[i]->whoAmI();
00090         fprintf(out2, "\tID%d = ", i);
00091         fprintf(out2, "%llX\r\n", fullName);
00092         }
00093     for(int i = 0; i < num_tail; i++){
00094         fullName = probeTail[i]->whoAmI();
00095         fprintf(out3, "\tID%d = ", i);
00096         fprintf(out3, "%llX\r\n", fullName);
00097         }
00098 //Formatting of Data 
00099 
00100     fprintf(out1, "Sensors:    ");
00101     fprintf(out2, "Sensors:    ");    
00102     fprintf(out3, "Sensors:    ");    
00103     for(int i = 0; i < num_arm1; i++){
00104         fprintf(out1, "%d    ", i);
00105         }
00106     for(int i = 0; i < num_arm2; i++){
00107         fprintf(out2, "%d    ", i);
00108         }
00109     for(int i = 0; i < num_tail; i++){
00110         fprintf(out3, "%d    ", i);
00111         }   
00112     fprintf(out1, "\r\n");
00113     fprintf(out2, "\r\n");
00114     fprintf(out3, "\r\n");
00115         
00116 //timer starts
00117     t.start();  
00118     
00119     while(t.read() < (60*60*4)){ //4 hours of data
00120             led1 = 1;
00121             probe1[0]-> convertTemperature(true, DS1820::all_devices);//convert all the temperature sensors
00122             probe2[0]-> convertTemperature(true, DS1820::all_devices);
00123             probeTail[0]-> convertTemperature(true, DS1820::all_devices); 
00124             led4 = 1;
00125         //print data from arm 1
00126             fprintf(out1, "%3.1f(s)    ", t.read());
00127             //get temp from sensors
00128             for(int i = 0; i < num_arm1; i++){
00129                 fprintf(out1, "%3.1f ", probe1[i]->temperature());
00130                 }
00131             fprintf(out1, "\r\n");    
00132                 
00133             fprintf(out2, "%3.1f(s)    ", t.read());
00134             for(int i = 0; i < num_arm2; i++){
00135                 fprintf(out2, "%3.1f ", probe2[i]->temperature());
00136                 }
00137             fprintf(out2, "\r\n");    
00138             fprintf(out3, "%3.1f(s)    ", t.read());
00139             for(int i = 0; i < num_tail; i++){
00140                 fprintf(out3, "%3.1f ", probeTail[i]->temperature());
00141                 }
00142             fprintf(out3, "\r\n");    
00143                 
00144         led3 = 1;
00145         fclose(out1);
00146         fclose(out2);
00147         fclose(out3);
00148         out1 = fopen("fs/arm1.txt","a");
00149         out2 = fopen("fs/arm2.txt","a");
00150         out3 = fopen("fs/armTail.txt","a");
00151         led3 = 0;
00152         wait(10);
00153     }
00154     
00155 //close the file and unmount the file system 
00156     fclose(out1);
00157     fclose(out2);
00158     fclose(out3);
00159     fs.unmount();
00160     led2 = 1;//turn on LED to let user know its safe to remove SD card
00161     ledOn = 0;
00162     ledError = 1;
00163     }