dd
Dependencies: C12832 LM75B mbed
Ah_main.cpp
00001 #include "mbed.h" 00002 #include "C12832.h" 00003 #include "MSCFileSystem.h" 00004 //----------------------- 00005 #include "Define.h" 00006 #include "RecGPS.h" 00007 //----------------------- 00008 MSCFileSystem fsLog("USB"); // Enregsetement des doonées "Flash Disque USB" 00009 FILE *Fs_Log; 00010 I2C _I2C(p28,p27); // I2C SCL,SDA 00011 Serial _ComGPS(p13, p14); // TX non connecté, pin14 RX. 00012 Serial _ComXbee(p9,p10); // Serial tx(p9),rx(10) 00013 #define pRST_Xbee p30 // pin RST Xbee 00014 Ticker _Ticker5ms; 00015 Timer _Timer1; // Timer pour mesurer le temps 00016 00017 DigitalIn boutonStart(p13); // Joystique Left : Boutton pour pouvoir controler le debut de l'enregistrement 00018 DigitalIn boutonEnd(p16); // Joystique Right : Boutton pour pouvoir controler la fin de l'enregistrement 00019 00020 DigitalOut RSTXbee (p30); 00021 DigitalOut LedGPS (LED1); 00022 DigitalOut LedLog (LED2); 00023 DigitalOut LedXbee (LED3); 00024 DigitalOut LedError(LED4); 00025 //----------------------- 00026 StructGPS GPS; 00027 unsigned long TimeBtpress=0,TIMER_10ms; 00028 unsigned long FileIndex; 00029 char Txt[16],Txt_Log[100],Txt_Tx2GSC[100],DataLogFileName[32]; 00030 unsigned long tk1; // des variables pour stocker les temps de mesure 00031 //----------------------------------- Reception des données GPS 10Hz 00032 void AutoMat_GPS(){ 00033 static unsigned char i=0,j=0,GPSDataType=0,ET_AutoMat_GPS=ET_01; 00034 static char gps_mess; 00035 while(_ComGPS.readable()){ 00036 gps_mess=_ComGPS.getc(); 00037 00038 switch(ET_AutoMat_GPS){ 00039 case ET_01: if(gps_mess==prompt$GP[i]){ 00040 i++; 00041 if(i==3){ 00042 i=0; 00043 j=0; 00044 ET_AutoMat_GPS=ET_02; 00045 } 00046 }else i=0; 00047 break; 00048 case ET_02: if(gps_mess==promptGGA[i]){ 00049 i++; 00050 if(i==3){ 00051 i=0; 00052 j=0; 00053 ET_AutoMat_GPS = ET_03; 00054 GPSDataType = GGA; 00055 } 00056 break; 00057 }else i=0; 00058 00059 if(gps_mess==promptRMC[j]){ 00060 j++; 00061 if(j==3){ 00062 j=0; 00063 ET_AutoMat_GPS=ET_03; 00064 GPSDataType=RMC; 00065 } 00066 break; 00067 }else j=0; 00068 00069 ET_AutoMat_GPS=ET_01; 00070 break; 00071 00072 case ET_03: _MsgGPSRx[i]=gps_mess; 00073 i++; 00074 if((i<NData_GPS_Max)&&(gps_mess!=0x0D))break; 00075 00076 switch(GPSDataType){ 00077 00078 case GGA: DecodageGPGGA(i-1);// l'appel de la fonction de decodage du message GPGGA 00079 LedGPS=!LedGPS; 00080 if (GpsData.GGA_Valid==0x01){ 00081 GpsData.GGA_Valid=0x00; 00082 GPS=GpsData; 00083 } 00084 break; 00085 case RMC: //DecodageGPRMC(i-1);// l'appel de la fonction de decodage du message GPGGA //DecodageGPRMC(i-1); 00086 break; 00087 default: break; 00088 } 00089 ET_AutoMat_GPS=ET_01; 00090 GPSDataType=0; 00091 default : break; 00092 } 00093 } 00094 } 00095 //----------------------------------- Transmission données au sol 10 packet/s 00096 void AutoMat_Xbee_Tx(){ 00097 switch (ET_AutoMat_Xbee_Tx) { 00098 case ET_01: 00099 LedXbee = !LedXbee; 00100 sprintf(Txt_Tx2GSC,"$GPS;%lu;%lu;",OldTimer_10ms,GPS.Qual); 00101 _ComXbee.printf("%s",Txt_Tx2GSC); 00102 ET_AutoMat_Xbee_Tx = ET_02; 00103 break; 00104 case ET_02 : 00105 sprintf(Txt_Tx2GSC,"%2u:%2u:%2u;",GPS.hh,GPS.mm,GPS.ss); 00106 _ComXbee.printf("%s",Txt_Tx2GSC); 00107 ET_AutoMat_Xbee_Tx = ET_03; 00108 break; 00109 case ET_03 : 00110 sprintf(Txt_Tx2GSC,"%2u;%2u.%u;%c;",GPS.LatDeg,GPS.LatMin,GPS.Latmmmm,GPS.LatDir); 00111 _ComXbee.printf("%s",Txt_Tx2GSC); 00112 ET_AutoMat_Xbee_Tx = ET_04; 00113 break; 00114 case ET_04 : 00115 sprintf(Txt_Tx2GSC,"%3u;%2u.%u;%c;",GPS.LongDeg,GPS.LongMin,GPS.Longmmmm,GPS.LongDir); 00116 _ComXbee.printf("%s",Txt_Tx2GSC); 00117 ET_AutoMat_Xbee_Tx = ET_05; 00118 break; 00119 case ET_05 : 00120 sprintf(Txt_Tx2GSC,"%c%u\r\n",GPS.SignHMSL,GPS.HMSL); 00121 _ComXbee.printf("%s",Txt_Tx2GSC); 00122 ET_AutoMat_Xbee_Tx = ET_06; 00123 break; 00124 //------------ 00125 case ET_06 : 00126 sprintf(Txt_Tx2GSC,"$PDV;%lu;%4u;%4u;%4u;%4d\r\n",OldTimer_10ms,OldCAP,OldALT,OldTAS,OldTEMPRE); 00127 _ComXbee.printf("%s",Txt_Tx2GSC); 00128 ET_AutoMat_Xbee_Tx = ET_00; 00129 break; 00130 default: ET_AutoMat_Xbee_Tx=ET_00; break; 00131 } 00132 } 00133 //----------------------------------- LogData 100Hz, LogGPS 10Hz 00134 void AutoMat_DataLog(){ 00135 switch (ET_AutoMat_DataLog){ 00136 00137 case ET_01: 00138 LedLog=!LedLog; 00139 //-------------- 00140 OldTimer_10ms = TIMER_10ms; 00141 // au max 100us (0.1ms) 00142 sprintf(Txt_Log,"PDV;%lu;%5d;%5d;%5d;%5d\r\n",TIMER_10ms,CAP,ALT,TAS,TEMPRE); 00143 // au max 5000 us (5ms) 00144 fprintf(Fs_Log,Txt_Log); 00145 // 100us 00146 sprintf(Txt_Log,"GPS;%lu;%1u;%2u:%2u:%2u;%2u;%2u.%u;%c;%3u;%2u.%u;%c;%c%u\r\n",TIMER_10ms,GPS.Qual,GPS.hh,GPS.mm,GPS.ss,GPS.LatDeg,GPS.LatMin,GPS.Latmmmm,GPS.LatDir,GPS.LongDeg,GPS.LongMin,GPS.Longmmmm,GPS.LongDir,GPS.SignHMSL,GPS.HMSL); 00147 // au max 5 ms 00148 fprintf(Fs_Log,Txt_Log); 00149 //------------------ 00150 ET_AutoMat_DataLog++; 00151 break; 00152 case ET_02: 00153 case ET_03: 00154 case ET_04: 00155 case ET_05: 00156 case ET_06: 00157 case ET_07: 00158 case ET_08: 00159 case ET_09: 00160 case ET_10: 00161 // au max 100us (0.1ms) 00162 sprintf(Txt_Log,"PDV;%lu;%5d;%5d;%5d;%5d\r\n",TIMER_10ms,CAP,ALT,TAS,TEMPRE); 00163 // au max 5000 us (5ms) 00164 fprintf(Fs_Log,Txt_Log); 00165 break; 00166 00167 default: break ; 00168 } 00169 } 00170 //------------------------------------------ Sansors 00171 void AutoMat_ALT_EAGLE_V4(){ 00172 static char L_i2c_Data[2],error; 00173 switch (ET_AutoMat_ALT) { 00174 case ET_01 : 00175 L_i2c_Data[0] = 0x07; // Send "register number" command to sensor 00176 error = _I2C.write(Add_Sensor_ALT_EG4, L_i2c_Data, 1,true); // Send command string 00177 if (error==0) ET_AutoMat_ALT = ET_02; 00178 break; 00179 case ET_02 : 00180 error = _I2C.read(Add_Sensor_ALT_EG4, L_i2c_Data, 2, true); 00181 if (error==0) { 00182 ALT = *((unsigned short*)L_i2c_Data)&0xffff; //altitude en décimètre 00183 ALT = ALT-3000; 00184 } 00185 ET_AutoMat_ALT = ET_01; 00186 break; 00187 default : break; 00188 } 00189 } 00190 00191 void AutoMat_TAS_EAGLE_V4(){ 00192 static char L_i2c_Data[2],error; 00193 switch (ET_AutoMat_TAS) { 00194 case ET_01 : 00195 L_i2c_Data[0] = 0x07; // Send "register number" command to sensor 00196 error = _I2C.write(Add_Sensor_TAS_EG4, L_i2c_Data, 1,true); // Send command string 00197 if (error==0) ET_AutoMat_TAS = ET_02; 00198 break; 00199 case ET_02 : 00200 error = _I2C.read(Add_Sensor_TAS_EG4, L_i2c_Data, 2, true); 00201 if (error==0) { 00202 TAS = *((unsigned short*)L_i2c_Data)&0xffff; //altitude en décimètre 00203 TAS = sqrt((float)(TAS-offset_TAS)*5.87755102); 00204 } 00205 ET_AutoMat_TAS = ET_01; 00206 break; 00207 default : break; 00208 } 00209 } 00210 void AutoMat_CAP_HMC(){ 00211 static char L_i2c_Data[2],error; 00212 switch (ET_AutoMat_CAP) { 00213 case ET_01 : 00214 L_i2c_Data[0] = 0x07; // Send "register number" command to sensor 00215 error = _I2C.write(Add_Sensor_CAP_HMC, L_i2c_Data, 1,true); // Send command string 00216 if (error==0) ET_AutoMat_CAP = ET_02; 00217 break; 00218 case ET_02 : 00219 error = _I2C.read(Add_Sensor_CAP_HMC , L_i2c_Data, 2, true); 00220 if (error==0) { 00221 CAP = *((unsigned short*)L_i2c_Data)&0xffff; //altitude en décimètre 00222 } 00223 ET_AutoMat_CAP = ET_01; 00224 break; 00225 default : break; 00226 } 00227 } 00228 //------------------- 00229 void Sansors_Init(){ 00230 char L_i2c_Data[3]; 00231 //------------ init Compass HMC //Continuous mode, periodic set/reset, 20Hz measurement rate. 00232 L_i2c_Data[0] = HMC6352_CONTINUOUS; 00233 L_i2c_Data[1] = 0x01; 00234 L_i2c_Data[2] = 20; 00235 _I2C.write(Add_Sensor_CAP_HMC,L_i2c_Data,3); // Send command 00236 //---------------------------- 00237 wait_ms(1); //attendre 1mS 00238 //------------- Get Offset TAS 00239 L_i2c_Data[0] = 0x01; // Send "read data" command to sensor 00240 _I2C.write(Add_Sensor_TAS_EG4,L_i2c_Data,1); // Send command string 00241 wait_ms(1); //attendre 400µS avant de relancer 00242 _I2C.read(Add_Sensor_TAS_EG4,L_i2c_Data, 2); 00243 offset_TAS = *((unsigned short*)L_i2c_Data)&0xffff; // Altitude en décimètre 00244 } 00245 00246 void Irq05ms(){ 00247 static unsigned char L_Flag_Timer=0, LTIMER005ms=0,LTIMER010ms=0; 00248 LTIMER005ms++; 00249 L_Flag_Timer = 1; 00250 //----------------------------- 00251 if(LTIMER005ms >= 2){ 00252 //----------------- 00253 TIMER_10ms = TIMER_10ms+1; 00254 LTIMER005ms = 0; 00255 LTIMER010ms++; 00256 L_Flag_Timer = 2; 00257 //----------------- 00258 if(LTIMER010ms >= 10){ 00259 LTIMER010ms = 0; 00260 L_Flag_Timer = 3; 00261 } 00262 //----------------- 00263 } 00264 00265 AutoMat_ALT_EAGLE_V4(); 00266 AutoMat_TAS_EAGLE_V4(); 00267 AutoMat_CAP_HMC(); 00268 00269 if (Flag_Timer != 0xFF) Flag_Timer = L_Flag_Timer; 00270 //----------------------------- 00271 } 00272 00273 int main() { 00274 00275 CAP = 0; 00276 TAS = 0; 00277 ALT = 0; 00278 LedError = 0; 00279 //-------------------- 00280 _I2C.frequency(100000); 00281 _ComGPS.baud(38400); //GPS V4 EAGLE 00282 _ComGPS.attach(&AutoMat_GPS,Serial::RxIrq); // defini une interruption chaque foix que le recepteur GPS envoi un charactere 00283 _ComXbee.baud(38400); 00284 RSTXbee=0; 00285 wait(0.5); 00286 RSTXbee=1; 00287 Sansors_Init(); 00288 //-------------------- 00289 //-------------- File Creat RGPSLogX.csv and DataLogX.csv X=FileIndex 00290 FileIndex = 5; 00291 //-------------------- 00292 sprintf(DataLogFileName,"/USB/DataLog%lu.csv",FileIndex); 00293 Fs_Log = fopen(DataLogFileName, "w");//ajouter un nouveau fichier et écraser l'ancien 00294 //-------------------- Verification de la creations des fichers 00295 if(Fs_Log==NULL) goto LabError; 00296 fprintf(Fs_Log,"LogData\r\n"); 00297 fprintf(Fs_Log,"GPS;TIMER1;Qual;Heur;LatD;LatMin;LatDir;LongD;LongMin;LongDir;HMSL\r\n"); 00298 fprintf(Fs_Log,"PDV;TIMER1;CAP;ALT;TAS;Tem\r\n"); 00299 //-------------------- 00300 // Active les Automat 00301 ET_AutoMat_ALT = ET_01; 00302 ET_AutoMat_TAS = ET_01; 00303 ET_AutoMat_CAP = ET_01; 00304 _Ticker5ms.attach_us(&Irq05ms,5000); 00305 // la variable un nom de 1ms mais on fait ca sur 5ms ce n'est pas cohérent !!!!!!! 00306 // Samir 00307 //-------------------- 00308 CAP = 9991; 00309 ALT = 9992; 00310 TAS = 9993; 00311 TEMPRE = 9994; 00312 TimeBtpress=0; 00313 while(TimeBtpress<100){ 00314 if(boutonStart == 1)TimeBtpress++; 00315 if(boutonStart == 0)TimeBtpress=0; 00316 wait(0.005); 00317 } 00318 //while(boutonStart==0); // Boutton pour pouvoir controler le debut de l'enregistrement 00319 Flag_Timer = 0; 00320 TimeBtpress=0; 00321 while(boutonEnd==0){ // Boutton pour pouvoir controler la fin de l'enregistrement 00322 00323 switch (Flag_Timer) { 00324 00325 case 0x01: 00326 Flag_Timer = 0; 00327 break; 00328 case 0x02: 00329 Flag_Timer = 0xFF; 00330 AutoMat_DataLog(); 00331 AutoMat_Xbee_Tx(); 00332 00333 Flag_Timer = 0; 00334 break; 00335 case 0x03: 00336 Flag_Timer = 0xFF; 00337 00338 GPS = GpsData; 00339 OldALT = ALT; 00340 OldTAS = TAS; 00341 OldCAP = CAP; 00342 OldTEMPRE = TEMPRE; 00343 00344 ET_AutoMat_Xbee_Tx = ET_01; 00345 ET_AutoMat_DataLog = ET_01; 00346 AutoMat_DataLog(); 00347 AutoMat_Xbee_Tx(); 00348 00349 Flag_Timer = 0x00; 00350 break; 00351 00352 default: break; 00353 }// fin switch 00354 } 00355 _Ticker5ms.detach(); 00356 _ComGPS.attach(NULL,Serial::RxIrq); 00357 LedXbee = 0; 00358 LedGPS = 0; 00359 LedLog = 1; 00360 fclose(Fs_Log); 00361 wait(1); 00362 LedLog = 0; 00363 while(1){ 00364 LedError=!LedError; 00365 wait(0.5); 00366 } 00367 //---------------- 00368 LabError: 00369 LedError=1; 00370 //---------------- 00371 00372 }
Generated on Tue Jul 12 2022 19:00:26 by 1.7.2