Ahmed_PFE_Embarq_300415

Dependencies:   C12832 LM75B mbed

Fork of Ahmed_Embarq_Prog by ahmed ahmed

Revision:
1:197b9fed6092
Parent:
0:05a20e3e3179
--- a/Ah_main.cpp	Tue Apr 21 10:16:20 2015 +0000
+++ b/Ah_main.cpp	Thu Apr 30 12:24:33 2015 +0000
@@ -3,370 +3,503 @@
 #include "MSCFileSystem.h"
 //-----------------------
 #include "Define.h"
-#include "RecGPS.h"
+#include "Dec_GPS.h"
 //-----------------------
- MSCFileSystem fsLog("USB");    //  Enregsetement des doonées "Flash Disque USB" 
- FILE    *Fs_Log;
- I2C     _I2C(p28,p27);         //  I2C    SCL,SDA
- Serial  _ComGPS(p13, p14);     //  TX non connecté, pin14 RX.   
- Serial  _ComXbee(p9,p10);      //  Serial tx(p9),rx(10)
- #define  pRST_Xbee   p30       //  pin RST Xbee
- Ticker  _Ticker5ms;
- Timer   _Timer1;               // Timer pour mesurer le temps
- 
- DigitalIn  boutonStart(p13);   // Joystique Left  : Boutton pour pouvoir controler le debut de l'enregistrement
- DigitalIn  boutonEnd(p16);     // Joystique Right : Boutton pour pouvoir controler la fin de l'enregistrement
+MSCFileSystem fsLog("USB");    //  Enregsetement des doonées "Flash Disque USB"
+FILE    *Fs_Log;
+I2C     _I2C(p28,p27);         //  I2C    SCL,SDA
+Serial  _ComGPS(NC, p14);     //  TX non connecté, pin14 RX.
+Serial  _ComXbee(p9,p10);      //  Serial tx(p9),rx(10)
+#define  pRST_Xbee   p30       //  pin RST Xbee
+Ticker  _Ticker1ms;
+Timer   _Timer1;               // Timer pour mesurer le temps
 
- DigitalOut  RSTXbee (p30); 
- DigitalOut  LedGPS  (LED1); 
- DigitalOut  LedLog  (LED2);
- DigitalOut  LedXbee (LED3);
- DigitalOut  LedError(LED4);
+DigitalIn  boutonStart(p13);   // Joystique Left  : Boutton pour pouvoir controler le debut de l'enregistrement
+DigitalIn  boutonEnd(p16);     // Joystique Right : Boutton pour pouvoir controler la fin de l'enregistrement
+
+DigitalOut  RSTXbee (p30);
+DigitalOut  LedGPS  (LED1);
+DigitalOut  LedLog  (LED2);
+DigitalOut  LedXbee (LED3);
+DigitalOut  LedError(LED4);
 //-----------------------
-StructGPS GPS;
+StructGPS GPS,OldGPS;
 unsigned long TimeBtpress=0,TIMER_10ms;
-unsigned long FileIndex;
+unsigned long FileIndex0,FileIndex;
 char          Txt[16],Txt_Log[100],Txt_Tx2GSC[100],DataLogFileName[32];
-unsigned long tk1; // des variables pour stocker les temps de mesure
 //----------------------------------- Reception des données GPS  10Hz
-void AutoMat_GPS(){
-static unsigned char i=0,j=0,GPSDataType=0,ET_AutoMat_GPS=ET_01;
-static char gps_mess;
-  while(_ComGPS.readable()){
-        gps_mess=_ComGPS.getc();      
- 
-        switch(ET_AutoMat_GPS){
-           case ET_01:  if(gps_mess==prompt$GP[i]){
-                            i++;
-                            if(i==3){
-                                i=0;
-                                j=0;
-                                ET_AutoMat_GPS=ET_02;                            
-                            }
-                        }else i=0;                        
+
+void AutoMat_GPS()
+{
+    static unsigned char i=0,j=0,GPSDataType=0,ET_AutoMat_GPS=ET_01;
+    static char gps_mess;
+    while(_ComGPS.readable()) {
+        gps_mess=_ComGPS.getc();
+
+        switch(ET_AutoMat_GPS) {
+            case ET_01:
+                if(gps_mess==prompt$GP[i]) {
+                    i++;
+                    if(i==3) {
+                        i=0;
+                        j=0;
+                        ET_AutoMat_GPS=ET_02;
+                    }
+                } else i=0;
+                break;
+            case ET_02:
+                if(gps_mess==promptGGA[i]) {
+                    i++;
+                    if(i==3) {
+                        i=0;
+                        j=0;
+                        ET_AutoMat_GPS = ET_03;
+                        GPSDataType = GGA;
+                    }
+                    break;
+                } else i=0;
+
+                if(gps_mess==promptRMC[j]) {
+                    j++;
+                    if(j==3) {
+                        j=0;
+                        ET_AutoMat_GPS=ET_03;
+                        GPSDataType=RMC;
+                    }
+                    break;
+                } else j=0;
+
+                ET_AutoMat_GPS=ET_01;
+                break;
+
+            case ET_03:
+                _MsgGPSRx[i]=gps_mess;
+                i++;
+                if((i<NData_GPS_Max)&&(gps_mess!=0x0D))break;
+
+                switch(GPSDataType) {
+
+                    case GGA:
+                        DecodageGPGGA(MsgGPSRx,i-1,&OldGPS);// l'appel de la fonction de decodage du message GPGGA                        
+                        if (OldGPS.GGA_Valid == 0x01) {                            
+                            OldGPS.GGA_Valid = 0x00;                            
+                            LedGPS = !LedGPS;
+                        }
                         break;
-           case ET_02:  if(gps_mess==promptGGA[i]){
-                            i++;
-                            if(i==3){
-                                i=0;
-                                j=0;
-                                ET_AutoMat_GPS = ET_03;
-                                GPSDataType = GGA;                                
-                               }
-                            break;
-                        }else i=0;
-                     
-                        if(gps_mess==promptRMC[j]){
-                            j++;                            
-                            if(j==3){
-                                 j=0;
-                                 ET_AutoMat_GPS=ET_03;
-                                 GPSDataType=RMC;                               
-                            }
-                            break;
-                        }else j=0;
-                        
-                        ET_AutoMat_GPS=ET_01;
+                    case RMC: //DecodageGPRMC(i-1);// l'appel de la fonction de decodage du message GPGGA  //DecodageGPRMC(i-1);
+                        break;
+                    default:
                         break;
-             
-           case ET_03:  _MsgGPSRx[i]=gps_mess;
-                        i++;
-                        if((i<NData_GPS_Max)&&(gps_mess!=0x0D))break;
-                           
-                        switch(GPSDataType){
-                             
-                                case GGA: DecodageGPGGA(i-1);// l'appel de la fonction de decodage du message GPGGA  
-                                          LedGPS=!LedGPS;
-                                          if (GpsData.GGA_Valid==0x01){
-                                                GpsData.GGA_Valid=0x00;                                            
-                                                GPS=GpsData;                  
-                                          }
-                                          break;
-                                case RMC: //DecodageGPRMC(i-1);// l'appel de la fonction de decodage du message GPGGA  //DecodageGPRMC(i-1);                                    
-                                          break;
-                                default:  break;                         
-                               }
-                        ET_AutoMat_GPS=ET_01;                        
-                        GPSDataType=0;
-           default : break;
+                }
+                ET_AutoMat_GPS=ET_01;
+                GPSDataType = NULL;
+            default :
+                break;
         }
-   }
-}    
+    }
+}
 //----------------------------------- Transmission données au sol 10 packet/s
-void AutoMat_Xbee_Tx(){
-             switch  (ET_AutoMat_Xbee_Tx) { 
-                    case ET_01:
-                           LedXbee = !LedXbee;
-                           sprintf(Txt_Tx2GSC,"$GPS;%lu;%lu;",OldTimer_10ms,GPS.Qual);                         
-                           _ComXbee.printf("%s",Txt_Tx2GSC);                     
-                           ET_AutoMat_Xbee_Tx = ET_02;
-                           break;                  
-                    case ET_02 : 
-                           sprintf(Txt_Tx2GSC,"%2u:%2u:%2u;",GPS.hh,GPS.mm,GPS.ss);
-                           _ComXbee.printf("%s",Txt_Tx2GSC);                           
-                           ET_AutoMat_Xbee_Tx = ET_03;
-                           break;
-                    case ET_03 :
-                           sprintf(Txt_Tx2GSC,"%2u;%2u.%u;%c;",GPS.LatDeg,GPS.LatMin,GPS.Latmmmm,GPS.LatDir);
-                           _ComXbee.printf("%s",Txt_Tx2GSC);                
-                           ET_AutoMat_Xbee_Tx = ET_04;
-                           break;
-                    case ET_04 :
-                           sprintf(Txt_Tx2GSC,"%3u;%2u.%u;%c;",GPS.LongDeg,GPS.LongMin,GPS.Longmmmm,GPS.LongDir);
-                           _ComXbee.printf("%s",Txt_Tx2GSC);
-                           ET_AutoMat_Xbee_Tx = ET_05;                                                     
-                          break;
-                    case ET_05 :
-                           sprintf(Txt_Tx2GSC,"%c%u\r\n",GPS.SignHMSL,GPS.HMSL);
-                           _ComXbee.printf("%s",Txt_Tx2GSC);
-                           ET_AutoMat_Xbee_Tx = ET_06;
-                          break;
-                    //------------       
-                    case ET_06 :                          
-                           sprintf(Txt_Tx2GSC,"$PDV;%lu;%4u;%4u;%4u;%4d\r\n",OldTimer_10ms,OldCAP,OldALT,OldTAS,OldTEMPRE);
-                           _ComXbee.printf("%s",Txt_Tx2GSC);
-                           ET_AutoMat_Xbee_Tx = ET_00;
-                          break;                                        
-                   default: ET_AutoMat_Xbee_Tx=ET_00; break;       
-           }  
+void AutoMat_Xbee_Tx()
+{
+   static char LIndex=0;
+    switch  (ET_AutoMat_Xbee_Tx) {
+        case ET_01:
+             LIndex++;                    
+             ET_AutoMat_Xbee_Tx = ET_00;
+             if(LIndex>=5) ET_AutoMat_Xbee_Tx = ET_02;
+            break;
+        case ET_02:            
+            LIndex = 0;
+            LedXbee = !LedXbee;
+            sprintf(Txt_Tx2GSC,"$TIME:%lu\r\n",OldTIMER_10ms);
+            _ComXbee.printf("%s",Txt_Tx2GSC);
+            ET_AutoMat_Xbee_Tx = ET_03;
+            break;
+        case ET_03 :
+            sprintf(Txt_Tx2GSC,"!!!UTC:%2u%2u%2u,***\r\n",GPS.hh,GPS.mm,GPS.ss);
+            _ComXbee.printf("%s",Txt_Tx2GSC);
+            ET_AutoMat_Xbee_Tx = ET_04;
+            break;
+        case ET_04 :           
+            //delay 10ms
+            ET_AutoMat_Xbee_Tx = ET_05;
+            break;
+        case ET_05 :                   
+            sprintf(Txt_Tx2GSC,"!!!LAT:%ld,LON:%ld,***\r\n",GPS.LatDeg,GPS.LonDeg);
+            _ComXbee.printf("%s",Txt_Tx2GSC);
+            ET_AutoMat_Xbee_Tx = ET_06;
+            break;
+        case ET_06 :
+            //delay 10ms
+            ET_AutoMat_Xbee_Tx = ET_07;
+            break;
+        case ET_07 :                   
+            sprintf(Txt_Tx2GSC,"!!!PCH:%.2f,RLL:%.2f,CRS:%.2f,SPD:%.2f,ALT:%.2f,***\r\n",HK_PCH,HK_RLL,HK_CRS,HK_SPD,HK_ALT);  
+            _ComXbee.printf("%s",Txt_Tx2GSC);
+            ET_AutoMat_Xbee_Tx = ET_08;       
+            break;
+        case ET_08 :
+            ET_AutoMat_Xbee_Tx = ET_00;
+            break;        
+        default:
+            ET_AutoMat_Xbee_Tx=ET_00;
+            break;
+    }
 }
 //----------------------------------- LogData 100Hz,  LogGPS 10Hz
-void AutoMat_DataLog(){
-        switch  (ET_AutoMat_DataLog){ 
-                                           
-         case ET_01:
-                LedLog=!LedLog;
-                //--------------
-                OldTimer_10ms = TIMER_10ms;
-                // au max 100us    (0.1ms)
-                sprintf(Txt_Log,"PDV;%lu;%5d;%5d;%5d;%5d\r\n",TIMER_10ms,CAP,ALT,TAS,TEMPRE);           
-                // au max 5000 us  (5ms)
-                fprintf(Fs_Log,Txt_Log);                 
-                // 100us
-                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);
-                // au max 5 ms
-                fprintf(Fs_Log,Txt_Log);                 
-                //------------------                  
-                ET_AutoMat_DataLog++;                 
-                break;                                
-         case ET_02:
-         case ET_03:
-         case ET_04:
-         case ET_05:
-         case ET_06:                
-         case ET_07:
-         case ET_08:
-         case ET_09:                                                    
-         case ET_10: 
-                // au max 100us    (0.1ms)
-                sprintf(Txt_Log,"PDV;%lu;%5d;%5d;%5d;%5d\r\n",TIMER_10ms,CAP,ALT,TAS,TEMPRE);            
-                // au max 5000 us  (5ms)
-                fprintf(Fs_Log,Txt_Log);                                                                                          
-                break;
-                
-         default: break ;
-      }    
-}
-//------------------------------------------ Sansors
-void AutoMat_ALT_EAGLE_V4(){      
-    static char     L_i2c_Data[2],error;    
-    switch (ET_AutoMat_ALT) {
-        case ET_01 : 
-                    L_i2c_Data[0] = 0x07; // Send "register number" command to sensor 
-                    error = _I2C.write(Add_Sensor_ALT_EG4, L_i2c_Data, 1,true); // Send command string
-                    if (error==0) ET_AutoMat_ALT = ET_02;                
-                    break;
-        case ET_02 : 
-                    error = _I2C.read(Add_Sensor_ALT_EG4, L_i2c_Data, 2, true);
-                    if (error==0) {
-                    ALT = *((unsigned short*)L_i2c_Data)&0xffff; //altitude en décimètre
-                    ALT = ALT-3000;
-                    }
-                    ET_AutoMat_ALT = ET_01;
-                    break;
-        default : break;
+#ifdef EN_AutoMat_DataLog
+void AutoMat_DataLog()
+{
+    static char ET_Sub_AutoMat = ET_00;
+    switch  (ET_AutoMat_DataLog) {
+
+        case ET_01:
+            LedLog=!LedLog;
+            //--------------
+            // au max 100us    (0.1ms)
+            sprintf(Txt_Log,"%lu;GPS;%1u;%2u:%2u:%2u;%10ld;%10ld;%ld;",TIMER_10ms,GPS.Qual,GPS.hh,GPS.mm,GPS.ss,GPS.LatDeg,GPS.LonDeg,GPS.HMSL);
+            // au max 5000 us  (5ms)
+            fprintf(Fs_Log,Txt_Log);
+            // 100us
+            sprintf(Txt_Log,"P;%5d;%5d;%5d;%5d\r\n",CRS,ALT,SPD,TEM);
+            // au max 5 ms
+            fprintf(Fs_Log,Txt_Log);
+            //------------------
+            ET_Sub_AutoMat     = ET_01;
+            ET_AutoMat_DataLog = ET_02;
+            break;
+        case ET_02:
+            // au max 100us    (0.1ms)
+            sprintf(Txt_Log,"%lu;;;;;;;",TIMER_10ms);
+            // au max 5000 us  (5ms)
+            fprintf(Fs_Log,Txt_Log);
+            // au max 100us    (0.1ms)
+            sprintf(Txt_Log,"P;%5d;%5d;%5d;%5d\r\n",CRS,ALT,SPD,TEM);
+            // au max 5000 us  (5ms)
+            fprintf(Fs_Log,Txt_Log);
+            ET_Sub_AutoMat++;
+            if(ET_Sub_AutoMat>=ET_10) ET_AutoMat_DataLog = ET_00;
+            break;
+
+        default:  break ;
     }
-} 
-
-void AutoMat_TAS_EAGLE_V4(){      
-    static char     L_i2c_Data[2],error;    
-    switch (ET_AutoMat_TAS) {
-        case ET_01 : 
-                    L_i2c_Data[0] = 0x07; // Send "register number" command to sensor 
-                    error = _I2C.write(Add_Sensor_TAS_EG4, L_i2c_Data, 1,true); // Send command string
-                    if (error==0) ET_AutoMat_TAS = ET_02;                
-                    break;
+}
+#endif
+//------------------------------------------ Sansors
+void AutoMat_ALT_EAGLE_V4()
+{
+    static char  L_i2c_Data[2],LIndex,Lerror;
+    switch (ET_AutoMat_ALT) {
+        case ET_01 :
+            L_i2c_Data[0] = 0x07; // Send "register number" command to sensor
+            Lerror = _I2C.write(Add_Sensor_ALT_EG4, L_i2c_Data, 1,true); // Send command string
+            if (Lerror==0) ET_AutoMat_ALT = ET_02;
+            LIndex = 1;
+            break;
+            
         case ET_02 : 
-                    error = _I2C.read(Add_Sensor_TAS_EG4, L_i2c_Data, 2, true);
-                    if (error==0) {
-                    TAS = *((unsigned short*)L_i2c_Data)&0xffff; //altitude en décimètre
-                    TAS = sqrt((float)(TAS-offset_TAS)*5.87755102);
-                    }
-                    ET_AutoMat_TAS = ET_01;
-                    break;
-        default : break;
+             LIndex++;
+             if(LIndex>=Wait_Time1_ms) ET_AutoMat_ALT = ET_03;
+             break;
+                            
+        case ET_03 :
+            Lerror = _I2C.read(Add_Sensor_ALT_EG4, L_i2c_Data, 2, true);
+            if (Lerror==0) {
+                ALT = *((unsigned short*)L_i2c_Data)&0xffff; //altitude en décimètre
+                ALT = ALT-3000;
+            }
+            ET_AutoMat_ALT = ET_01;
+            break;
+        default :  break;
     }
-} 
-void AutoMat_CAP_HMC(){      
-    static char     L_i2c_Data[2],error;    
+}
+
+void AutoMat_TAS_EAGLE_V4()
+{
+    static char  L_i2c_Data[2],LIndex,Lerror;
+    unsigned short SPD_short;
+    float SPD_float;
+    switch (ET_AutoMat_TAS) {
+        case ET_01 :
+            L_i2c_Data[0] = 0x07; // Send "register number" command to sensor
+            Lerror = _I2C.write(Add_Sensor_TAS_EG4, L_i2c_Data, 1,true); // Send command string
+            if (Lerror==0) ET_AutoMat_TAS = ET_02;
+            LIndex = 1;
+            break;
+            
+        case ET_02 : 
+             LIndex++;
+             if(LIndex>=Wait_Time1_ms) ET_AutoMat_TAS = ET_03;
+             break;
+                            
+        case ET_03 :
+            Lerror = _I2C.read(Add_Sensor_TAS_EG4, L_i2c_Data, 2, true);
+            if (Lerror==0) {
+                SPD_short = *((unsigned short*)L_i2c_Data)&0xffff; 
+                SPD_float = 10*sqrt((float)(SPD_short-Offset_SPD)*5.87755102);
+                SPD = 10*SPD_float; // mph*10
+            }
+            ET_AutoMat_TAS = ET_01;
+            break;
+        default :
+            break;
+    }
+}
+void AutoMat_CAP_HMC()
+{
+    static char  L_i2c_Data[2],LIndex,Lerror;
     switch (ET_AutoMat_CAP) {
-        case ET_01 : 
-                    L_i2c_Data[0] = 0x07; // Send "register number" command to sensor 
-                    error = _I2C.write(Add_Sensor_CAP_HMC, L_i2c_Data, 1,true); // Send command string
-                    if (error==0) ET_AutoMat_CAP = ET_02;                
-                    break;
+        case ET_01 :
+            L_i2c_Data[0] = 0x07; // Send "register number" command to sensor
+            Lerror = _I2C.write(Add_Sensor_CAP_HMC, L_i2c_Data, 1,true); // Send command string
+            if (Lerror==0) ET_AutoMat_CAP = ET_02;
+            LIndex = 1;
+            break;
+            
         case ET_02 : 
-                    error = _I2C.read(Add_Sensor_CAP_HMC , L_i2c_Data, 2, true);
-                    if (error==0) {
-                    CAP = *((unsigned short*)L_i2c_Data)&0xffff; //altitude en décimètre                    
-                    }
-                    ET_AutoMat_CAP = ET_01;
-                    break;
-        default : break;
+             LIndex++;
+             if(LIndex>=Wait_Time1_ms) ET_AutoMat_CAP = ET_03;
+             break;
+                            
+        case ET_03 :
+            Lerror = _I2C.read(Add_Sensor_CAP_HMC , L_i2c_Data, 2, true);
+            if (Lerror==0) {
+                CRS = *((unsigned short*)L_i2c_Data)&0xffff; //Cap en deg*10
+            }
+            ET_AutoMat_CAP = ET_01;
+            break;
+        default :
+            break;
     }
-} 
-//------------------- 
-void Sansors_Init(){ 
-    char  L_i2c_Data[3];        
-     //------------ init Compass HMC //Continuous mode, periodic set/reset, 20Hz measurement rate.
-     L_i2c_Data[0] = HMC6352_CONTINUOUS;
-     L_i2c_Data[1] = 0x01;
-     L_i2c_Data[2] = 20;  
-     _I2C.write(Add_Sensor_CAP_HMC,L_i2c_Data,3); // Send command          
-     //----------------------------
-     wait_ms(1);         //attendre 1mS 
-     //------------- Get Offset TAS
-     L_i2c_Data[0] = 0x01; // Send "read data" command to sensor 
-     _I2C.write(Add_Sensor_TAS_EG4,L_i2c_Data,1); // Send command string
-     wait_ms(1);         //attendre 400µS avant de relancer
-     _I2C.read(Add_Sensor_TAS_EG4,L_i2c_Data, 2);
-     offset_TAS = *((unsigned short*)L_i2c_Data)&0xffff; // Altitude en décimètre      
 }
 
-void Irq05ms(){
-static unsigned char L_Flag_Timer=0, LTIMER005ms=0,LTIMER010ms=0;
-     LTIMER005ms++;       
-     L_Flag_Timer  = 1;
-     //-----------------------------
-     if(LTIMER005ms >= 2){
-          //-----------------                  
-          TIMER_10ms  = TIMER_10ms+1;
-          LTIMER005ms = 0;          
-          LTIMER010ms++;
-          L_Flag_Timer  = 2;
-          //-----------------
-          if(LTIMER010ms >= 10){
-               LTIMER010ms   = 0;
-               L_Flag_Timer  = 3;                           
-          }
-          //-----------------
-     }
-     
-     AutoMat_ALT_EAGLE_V4();
-     AutoMat_TAS_EAGLE_V4();
-     AutoMat_CAP_HMC();
-                
-     if (Flag_Timer != 0xFF) Flag_Timer = L_Flag_Timer;
-     //-----------------------------
- }
-     
-int main() {
+void AutoMat_TEM_LM75B()
+{
+    static char  L_i2c_Data[2],LIndex,Lerror;
+    switch (ET_AutoMat_TEM) {
+        case ET_01 :
+            L_i2c_Data[0] = 0x07; // Send "register number" command to sensor
+            Lerror = _I2C.write(Add_Sensor_TEM_LM75B, L_i2c_Data, 1,true); // Send command string
+            if (Lerror==0) ET_AutoMat_TEM = ET_02;
+            LIndex = 1;
+            break;
+            
+        case ET_02 : 
+             LIndex++;
+             if(LIndex>=Wait_Time1_ms) ET_AutoMat_TEM = ET_03;
+             break;
+                            
+        case ET_03 :
+            Lerror = _I2C.read(Add_Sensor_TEM_LM75B, L_i2c_Data, 2, true);
+            if (Lerror==0) {
+               // CRS = *((unsigned short*)L_i2c_Data)&0xffff; //Cap en deg*10
+            }
+            ET_AutoMat_TEM = ET_01;
+            break;
+        default :
+            break;
+    }
+}
+//----------------- LCD ------------
+void AutoMat_LCD_Ext()
+{
+    static char Lerror;
+    switch (ET_AutoMat_LCD) {
+        case ET_01 :            
+            Lerror = _I2C.write(Add_LCD_Ext, NULL, 0,true);
+            if (Lerror==0) ET_AutoMat_LCD = ET_02;
+            break;
+        case ET_02 :
+            // Code ici 
+            ET_AutoMat_LCD = ET_01;
+            break; 
+        default :
+            break;
+    }
+}
+//---------------------------------
+
+void Sansors_Init()
+{
+    char  L_i2c_Data[3];
+    //------------ init Compass HMC //Continuous mode, periodic set/reset, 20Hz measurement rate.
+    L_i2c_Data[0] = HMC6352_CONTINUOUS;
+    L_i2c_Data[1] = 0x01;
+    L_i2c_Data[2] = 20;
+    _I2C.write(Add_Sensor_CAP_HMC,L_i2c_Data,3); // Send command
+    //----------------------------
+    wait_ms(1);         //attendre 1mS
+    //------------- Get Offset TAS
+    L_i2c_Data[0] = 0x01; // Send "read data" command to sensor
+    _I2C.write(Add_Sensor_TAS_EG4,L_i2c_Data,1); // Send command string
+    wait_ms(1);         //attendre 400µS avant de relancer
+    _I2C.read(Add_Sensor_TAS_EG4,L_i2c_Data, 2);
+    Offset_SPD = *((unsigned short*)L_i2c_Data)&0xffff; // Altitude en décimètre
+}
+
+void Irq01ms()
+{
+    static unsigned char LFlag_Timer=0, LTIMER001ms=0,LTIMER010ms=0;
+    LTIMER001ms++;
+    LFlag_Timer  = 1;
+    //-----------------------------
+    if(LTIMER001ms >= 10) {
+        //-----------------
+        LTIMER001ms = 0; 
+        LFlag_Timer = 3;
+        LTIMER010ms = LTIMER010ms+1;        
+        //-----------------
+        if(LTIMER010ms >= 10) {
+            LTIMER010ms  = 0;
+            LFlag_Timer  = 7;
+        }
+        //-----------------
+        TIMER_10ms  = TIMER_10ms+1;  
+    }
+    AutoMat_ALT_EAGLE_V4();
+    AutoMat_TAS_EAGLE_V4();
+    AutoMat_CAP_HMC();
+    AutoMat_TEM_LM75B();// temperateur LM75B
     
-     CAP = 0;
-     TAS = 0;
-     ALT = 0;
-     LedError = 0;           
-     //-------------------- 
-     _I2C.frequency(100000);             
-     _ComGPS.baud(38400); //GPS V4 EAGLE
-     _ComGPS.attach(&AutoMat_GPS,Serial::RxIrq); // defini une interruption chaque foix que le recepteur GPS envoi un charactere   
-     _ComXbee.baud(38400); 
-     RSTXbee=0;
-     wait(0.5);
-     RSTXbee=1;          
-     Sansors_Init();
-     //--------------------
-     //-------------- File Creat RGPSLogX.csv and DataLogX.csv          X=FileIndex
-     FileIndex = 5;
-     //--------------------
-     sprintf(DataLogFileName,"/USB/DataLog%lu.csv",FileIndex);
-     Fs_Log = fopen(DataLogFileName, "w");//ajouter un nouveau fichier et écraser l'ancien     
-     //-------------------- Verification de la creations des fichers 
-     if(Fs_Log==NULL) goto LabError;     
-     fprintf(Fs_Log,"LogData\r\n");    
-     fprintf(Fs_Log,"GPS;TIMER1;Qual;Heur;LatD;LatMin;LatDir;LongD;LongMin;LongDir;HMSL\r\n"); 
-     fprintf(Fs_Log,"PDV;TIMER1;CAP;ALT;TAS;Tem\r\n");      
-     //--------------------
-     // Active les Automat
-     ET_AutoMat_ALT = ET_01;
-     ET_AutoMat_TAS = ET_01;
-     ET_AutoMat_CAP = ET_01;
-     _Ticker5ms.attach_us(&Irq05ms,5000);   
-     // la variable  un nom de 1ms mais on fait ca sur 5ms ce n'est pas cohérent !!!!!!!
-     // Samir
-     //--------------------
-     CAP    = 9991;
-     ALT    = 9992;
-     TAS    = 9993;
-     TEMPRE = 9994;   
-     TimeBtpress=0;  
-     while(TimeBtpress<100){
+    if (Flag_Timer != 0xFF) Flag_Timer = LFlag_Timer;
+    //-----------------------------
+}
+
+int main()
+{
+    
+    CRS = 0;
+    SPD = 0;
+    ALT = 0;
+    LedError = 0;
+    //--------------------
+    _I2C.frequency(100000);
+    _ComGPS.baud(38400); //GPS V4 EAGLE
+    _ComGPS.attach(&AutoMat_GPS,Serial::RxIrq); // defini une interruption chaque foix que le recepteur GPS envoi un charactere
+    _ComXbee.baud(38400);
+    RSTXbee=0;
+    wait(0.5);
+    RSTXbee=1;
+    Sansors_Init();
+    //--------------------
+    //-------------- File Creat RGPSLogX.csv and DataLogX.csv          X=FileIndex
+#ifdef EN_AutoMat_DataLog  
+    FileIndex = 0;
+Started:
+    FileIndex++;
+  
+    //--------------------
+    sprintf(DataLogFileName,"/USB/DataLog%4lu.csv",FileIndex);
+    Fs_Log = fopen(DataLogFileName, "r");//ajouter un nouveau fichier et écraser l'ancien
+    if (Fs_Log!=NULL) goto Started;
+
+    Fs_Log = fopen(DataLogFileName, "w");//ajouter un nouveau fichier et écraser l'ancien
+    //-------------------- Verification de la creations des fichers
+    if(Fs_Log==NULL) goto LabError;
+    fprintf(Fs_Log,"LogData\r\n");
+    fprintf(Fs_Log,"TIMER;GPS;Qual;Heur;LatD;LongD;HMSL;");
+    fprintf(Fs_Log,"PDV;CRS;ALT;SPD;TEM\r\n");
+#endif      
+    //--------------------
+    // Active les Automat
+    ET_AutoMat_ALT = ET_01;
+    ET_AutoMat_TAS = ET_01;
+    ET_AutoMat_CAP = ET_01;
+    ET_AutoMat_TEM = ET_01;
+    ET_AutoMat_LCD = ET_01;
+    _Ticker1ms.attach_us(&Irq01ms,Irq_Time_us);
+    // la variable  un nom de 1ms mais on fait ca sur 5ms ce n'est pas cohérent !!!!!!!
+    // Samir
+    //--------------------
+    CRS    = 9991;// initialisation
+    ALT    = 9992;// initialisation
+    SPD    = 9993;// initialisation
+    TEM    = 9994;// initialisation
+    Flag_Timer = 0;
+    //-------------------
+    TimeBtpress=0;
+    while(TimeBtpress<100) { // Boutton pour pouvoir controler le debut de l'enregistrement
         if(boutonStart == 1)TimeBtpress++;
-        if(boutonStart == 0)TimeBtpress=0; 
-        wait(0.005);
-     }    
-     //while(boutonStart==0); // Boutton pour pouvoir controler le debut de l'enregistrement
-     Flag_Timer = 0;
-     TimeBtpress=0; 
-     while(boutonEnd==0){   // Boutton pour pouvoir controler la fin de l'enregistrement
-       
-       switch  (Flag_Timer) {                                     
+        else TimeBtpress=0;
+        wait_ms(10);
+    }
+    //-------------------
+    TimeBtpress=0;
+    while(TimeBtpress<0xFFFF) {
+
+        switch  (Flag_Timer) {
 
-         case 0x01:
+            case 0x01:// 05 ms
+                Flag_Timer = 0;
+                // Boutton pour pouvoir controler la fin de l'enregistrement
+                if(boutonEnd == 1)TimeBtpress++;
+                else TimeBtpress=0; 
+                //------------------
+                break;
+            case 0x03:// 10 ms
+                Flag_Timer = 0xFF;
+                #ifdef EN_AutoMat_DataLog
+                AutoMat_DataLog();
+                #endif
+                AutoMat_Xbee_Tx();
                 Flag_Timer = 0;
                 break;
-         case 0x02:               
-                Flag_Timer = 0xFF;              
-                AutoMat_DataLog(); 
-                AutoMat_Xbee_Tx();
+            case 0x07:// 100 ms
+                Flag_Timer = 0xFF;     
+
+                GPS    = OldGPS;
+                OldTIMER_10ms = TIMER_10ms;
+                OldALT = ALT;
+                OldSPD = SPD;
+                OldCRS = CRS;
+                OldTEM = TEM;
+                
+                HK_ALT = OldALT/10.0;
+                HK_SPD = OldSPD/10.0;
+                HK_CRS = OldCRS/10.0;
                 
-                Flag_Timer = 0;
-                break;
-         case 0x03:
-                Flag_Timer = 0xFF;             
-         
-                GPS    = GpsData;
-                OldALT = ALT;
-                OldTAS = TAS;
-                OldCAP = CAP;
-                OldTEMPRE = TEMPRE;
+                ET_AutoMat_Xbee_Tx = ET_01;
+                ET_AutoMat_DataLog = ET_01;
                 
-                ET_AutoMat_Xbee_Tx = ET_01; 
-                ET_AutoMat_DataLog = ET_01;                  
+                //------------------ vérification si le Bt de fin est press pendent un Dt=100 ms
+                if(TimeBtpress>100) {
+                    TimeBtpress = 0xFFFF;
+                    ET_AutoMat_Xbee_Tx = ET_00;
+                    ET_AutoMat_DataLog = ET_00;
+                }
+                //------------------
+                #ifdef EN_AutoMat_DataLog
                 AutoMat_DataLog();
-                AutoMat_Xbee_Tx();       
-    
+                #endif
+                AutoMat_Xbee_Tx();
+
                 Flag_Timer = 0x00;
                 break;
-                                
-         default: break;    
-        }// fin switch 
-      } 
-      _Ticker5ms.detach(); 
-      _ComGPS.attach(NULL,Serial::RxIrq);
-      LedXbee = 0;
-      LedGPS  = 0;      
-      LedLog  = 1;
-      fclose(Fs_Log);
-      wait(1);
-      LedLog  = 0;       
-      while(1){
+
+            default:
+                break;
+        }// fin switch
+    }// fin while
+    _Ticker1ms.detach(); // ticker detach
+    _ComGPS.attach(NULL,Serial::RxIrq); // detach Com GPS
+    LedXbee = 0;
+    LedGPS  = 0;
+#ifdef EN_AutoMat_DataLog
+    LedLog  = 1;
+     fprintf(Fs_Log,"END\r\n");
+     fclose(Fs_Log);
+    wait(1);
+    LedLog  = 0;
+#endif
+    while(1) {
         LedError=!LedError;
         wait(0.5);
-      }   
+    }
 //----------------
-LabError:    
+#ifdef EN_AutoMat_DataLog
+LabError:
     LedError=1;
+#endif    
 //----------------
 
 }