Freescale_Cachan / Mbed 2 deprecated Programme_course_30Tr

Dependencies:   MMA8451Q mbed

Fork of Programme_course_vir_am_2 by Freescale_Cachan

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Mlib.cpp Source File

Mlib.cpp

00001 #include "Mlib.h"
00002 
00003 /***********AUTRES_FCT***************/
00004 
00005 char middle_3(char *tab)
00006 {
00007     tri_a_bulle(tab, 3);
00008     return tab[1];
00009 }
00010 
00011 int middle_3U(int *tab)
00012 {
00013     tri_a_bulleU(tab, 3);
00014     return tab[1];
00015 }
00016 
00017 float middle_3F(float *tab)
00018 {
00019     
00020     return tri_a_bulleF(tab, 3);
00021 }
00022 
00023 
00024 void tri_a_bulle(char* t, int const size) 
00025 {
00026     int en_desordre = 1;
00027     int i,j;
00028 
00029     for (i = 0; (i < size) && en_desordre; ++i)
00030     {
00031         en_desordre = 0;
00032         for (j = 1; j < (size - i); ++j)
00033         {
00034             if (t[j-1] > t[j])
00035             {
00036                 int temp = t[j-1];
00037                 t[j-1] = t[j];
00038                 t[j] = temp;
00039                 en_desordre = 1;
00040             }
00041         }
00042     }
00043 }
00044 void tri_a_bulleU(int* t, int const size) 
00045 {
00046     int en_desordre = 1;
00047     int i,j;
00048 
00049     for (i = 0; (i < size) && en_desordre; ++i)
00050     {
00051         en_desordre = 0;
00052         for (j = 1; j < (size - i); ++j)
00053         {
00054             if (t[j-1] > t[j])
00055             {
00056                 int temp = t[j-1];
00057                 t[j-1] = t[j];
00058                 t[j] = temp;
00059                 en_desordre = 1;
00060             }
00061         }
00062     }
00063 }
00064 float tri_a_bulleF(float* t2, int const size) 
00065 {
00066     float t[3];
00067     t[0] = t2[0];
00068     t[1] = t2[1];
00069     t[2] = t2[2];
00070     
00071         
00072     int en_desordre = 1;
00073     int i,j;
00074 
00075     for (i = 0; (i < size) && en_desordre; ++i)
00076     {
00077         en_desordre = 0;
00078         for (j = 1; j < (size - i); ++j)
00079         {
00080             if (t[j-1] > t[j])
00081             {
00082                 float temp = t[j-1];
00083                 t[j-1] = t[j];
00084                 t[j] = temp;
00085                 en_desordre = 1;
00086             }
00087         }
00088     }
00089     return t[1];
00090 }
00091 
00092 unsigned char Moyenne(unsigned char *tab)
00093 {
00094     int i = 0;
00095     int somme = 0;
00096     for(i = 0; i < 128;i++)
00097     {
00098         somme+=tab[i];
00099     }
00100     return somme/128.0;
00101 }
00102 char Moyenne2(char *tab, int nb)
00103 {
00104     int i = 0;
00105     int somme = 0;
00106     for(i = 0; i < nb;i++)
00107     {
00108         somme+=tab[i];
00109     }
00110     return float(somme/nb);
00111 }
00112 
00113 void menu()
00114 {
00115     static int p = 0;
00116     p++;
00117         wait(0.1);
00118         if(BP2)
00119         {
00120             seuil_der++;
00121             if(seuil_der == 2) seuil_der = -1;
00122             led1 = 0;
00123             wait(0.5);
00124         }
00125         if(seuil_der == 0)
00126         {
00127             led1 = p%2;
00128         }
00129         else if(seuil_der == 1)
00130         {
00131             led1 = 1;
00132         }
00133         else
00134         {
00135             led1 = 0;
00136         }
00137         if(S1 == 1)
00138         {
00139             led2 = 1;
00140         }
00141         else led2 = 0;
00142         if(S2 == 1)
00143         {
00144             led3 = 1;
00145         }
00146         else led3= 0;
00147 }
00148 
00149 void fin_course()
00150 {
00151     static int arr = 0;
00152     static char moy_inter, moy_mem_a,moy_mem_b;
00153     static char tab_mem_b[TAILLE_TAB_INT]={0,0,0};
00154     static char tab_mem_a[TAILLE_TAB_INT]={0,0,0};
00155           
00156     if (t_debut.read_ms()>2000){
00157         moy_inter=Moyenne2(Interval, TAILLE_TAB_INT);
00158         moy_mem_a=Moyenne2(tab_mem_a, TAILLE_TAB_INT);
00159         moy_mem_b=Moyenne2(tab_mem_b, TAILLE_TAB_INT);
00160         
00161         //pc.printf("%d\n",moy_inter);
00162         if(S1&&(arr!=0))                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           {//delai apres l'arret
00163             if (t_debut.read_ms()-arr>200)VIT=0;
00164             }
00165         else if((moy_mem_a>20)&&(moy_mem_b>20)){  // si la voiture n'est pas trop sur l'exterieur de la piste
00166             if(S1 && (moy_inter<75) && (moy_inter>50)){  //si l'espace entre les deux lignes est plus petit que la normale (arret)
00167              
00168                 //for(int i=0;i<5;i++)  pc.printf("%d ",Interval[i]);
00169                 //pc.printf("\n");
00170                 //VIT=0;
00171                 //pc.printf("\narret ");
00172                 //pc.printf("\n%d ",moy_inter);
00173                 led1=1;
00174                 led2=1;
00175                 arr=t_debut.read_ms();
00176         
00177                 }   
00178         }
00179         else {
00180             led1=0;
00181             led2=0;
00182             
00183         }
00184             
00185     }
00186         
00187     for(int j = TAILLE_TAB_INT-1; j > 0; j--)
00188     {
00189         Interval[j] = Interval[j-1];
00190         tab_mem_b[j]=tab_mem_b[j-1];
00191         tab_mem_a[j]=tab_mem_a[j-1];
00192     } 
00193     tab_mem_b[0]=mem_b;
00194     tab_mem_a[0]=mem_a; 
00195 }
00196 
00197 
00198 void Gestion_bosse()
00199 {
00200     if(BOSSE_ACTIVE)//Si on active la détection de la bosse
00201     {
00202     
00203         //pc.printf("bosse: %d , X: %1.2f , ajustement : %hi\n ",bosse,middle_3F(last_three),ajust_vit_bosse);
00204         
00205         
00206         last_three[2] = last_three[1]; // les 3 dernieres valeurs de X sont stockées dans un tableau
00207         last_three[1] = last_three[0];
00208         last_three[0] = acc.getAccX();
00209         
00210         if(bosse == 1)
00211         {
00212             ajust_vit_bosse = 60; 
00213             led3=1;
00214             led4=0;
00215             
00216         }
00217         else if(bosse == 3){
00218             ajust_vit_bosse = -80;
00219             led3=0;
00220             led4=1;
00221         
00222         }
00223         else 
00224         {
00225             ajust_vit_bosse = 0;
00226             led3=0;
00227             led4=0;
00228             
00229         }
00230         
00231         if((abs(middle_3F(last_three)) > 0.13 ) && (bosse == 0)) // si montée détectée
00232         {
00233             bosse = 1;
00234             //tep = (int)t_debut.read_ms();
00235         }
00236         else if(bosse == 1 && (middle_3F(last_three) > -0.1)) 
00237         {
00238             bosse = 2;
00239         }
00240         else if(bosse == 2 && (middle_3F(last_three) > 0.19)) 
00241         {
00242             bosse = 3;
00243             
00244         }
00245         else if(bosse==3 && (middle_3F(last_three) > 0.19))
00246         {
00247                  ajust_vit_bosse = -50;
00248                  
00249                  pc.printf("bosse: %d , X: %1.2f , ajustement : %hi\n",bosse,middle_3F(last_three),ajust_vit_bosse);
00250          }
00251                  
00252         else if (bosse==3 && (middle_3F(last_three) < 0.19)) 
00253         {
00254             bosse=0;
00255             ajust_vit_bosse=0;
00256         }
00257     }
00258 }
00259 
00260 
00261 //void F_BalanceBlancs()
00262 //{
00263 //    unsigned char moy = 0;
00264 //    moy = Moyenne(cam_data);
00265 //    if(moy > LUMI_MOYENNE && tempsInte >= MIN_INTE) tempsInte-=INCREM_BALANCE;
00266 //    else if(tempsInte <= MAX_INTE) tempsInte+=INCREM_BALANCE;
00267 //}
00268 
00269 
00270