Freescale_Cachan / Mbed 2 deprecated Programme_course_base

Dependencies:   MMA8451Q mbed xbee_lib

Fork of Programme_course by Freescale_Cachan

Files at this revision

API Documentation at this revision

Comitter:
inesmas3
Date:
Wed Feb 08 15:16:04 2017 +0000
Parent:
0:3ec7fc598e48
Child:
2:ddf9879f0e25
Commit message:
modif de ines updated au 8 fev 17

Changed in this revision

Mlib.cpp Show annotated file Show diff for this revision Revisions of this file
Mlib.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
shield.cpp Show annotated file Show diff for this revision Revisions of this file
traitement_image.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Mlib.cpp	Thu Jan 26 07:37:45 2017 +0000
+++ b/Mlib.cpp	Wed Feb 08 15:16:04 2017 +0000
@@ -1,8 +1,69 @@
 #include "Mlib.h"
 
+void Gestion_bosse()
+{
+    if(BOSSE_ACTIVE)//Si on active la détection de la bosse
+    {
+        led5=0;
+        led6=0;
+        led7=0;
+    
+        pc.printf("bosse: %d , X: %1.2f , ajustement : %hi\n ",bosse,middle_3F(last_three),ajust_vit_bosse);
+        
+        
+        last_three[2] = last_three[1]; // les 3 dernieres valeurs de X sont stockées daans un tableau
+        last_three[1] = last_three[0];
+        last_three[0] = acc.getAccX();
+        
+        if(bosse == 1)
+        {
+            ajust_vit_bosse = 60; 
+            led6=1;
+            led4=1;
+        }
+        else if(bosse == 3)
+        ajust_vit_bosse = -80;
+        
+        else 
+        {
+            ajust_vit_bosse = 0;
+            led7=1;
+            led1=1;
+        }
+        
+        if((abs(middle_3F(last_three)) > 0.13 ) && (bosse == 0)) // si montée détectée
+        {
+            bosse = 1;
+            //tep = (int)t_debut.read_ms();
+        }
+        else if(bosse == 1 && (middle_3F(last_three) > -0.1)) 
+        {
+            bosse = 2;
+        }
+        else if(bosse == 2 && (middle_3F(last_three) > 0.19)) 
+        {
+            bosse = 3;
+            
+        }
+        else if(bosse==3 && (middle_3F(last_three) > 0.19))
+        {
+                 ajust_vit_bosse = -50;
+                 led5=1;
+                 led2=1;
+                 pc.printf("bosse: %d , X: %1.2f , ajustement : %hi\n",bosse,middle_3F(last_three),ajust_vit_bosse);
+         }
+                 
+        else if (bosse==3 && (middle_3F(last_three) < 0.19)) 
+        {
+            bosse=0;
+            ajust_vit_bosse=0;
+            }
+    }
+}
+
 /***********AUTRES_FCT***************/
 
-char middle_3(char *tab)
+char middle_3(char *tab) // prend la valeur du milieu quand les valeurs sont rangées
 {
     tri_a_bulle(tab, 3);
     return tab[1];
@@ -21,7 +82,7 @@
 }
 
 
-void tri_a_bulle(char* t, int const size) 
+void tri_a_bulle(char* t, int const size) // permet de trier les valeurs du tableau dans l'ordre croissant
 {
     int en_desordre = 1;
     int i,j;
@@ -115,7 +176,7 @@
     static int p = 0;
     p++;
         wait(0.1);
-        if(BP2)
+        if(BP2) // bouton B
         {
             seuil_der++;
             if(seuil_der == 2) seuil_der = -1;
--- a/Mlib.h	Thu Jan 26 07:37:45 2017 +0000
+++ b/Mlib.h	Wed Feb 08 15:16:04 2017 +0000
@@ -73,6 +73,7 @@
 /***************SHIELD*****************/
 extern char bosse;
 extern int ajust_vitesse;
+extern int ajust_vit_bosse;
 extern int vitesse_virage;
 extern DigitalOut BP1;
 extern DigitalOut BP2;
@@ -80,8 +81,8 @@
 extern DigitalOut led2;
 extern DigitalOut led3;
 extern DigitalOut led4;
-extern DigitalIn S1;
-extern DigitalIn S2;
+extern DigitalIn S1; // switch 1
+extern DigitalIn S2; // switch 2
 extern DigitalIn S3;
 extern DigitalIn S4;
 extern AnalogIn pot1;
@@ -116,6 +117,10 @@
 extern int ligne_droite;
 
 
+extern DigitalOut led5;
+extern DigitalOut led6;
+extern DigitalOut led7;
+
 
 
 
--- a/main.cpp	Thu Jan 26 07:37:45 2017 +0000
+++ b/main.cpp	Wed Feb 08 15:16:04 2017 +0000
@@ -9,6 +9,10 @@
 DigitalOut led3(PTB10);
 DigitalOut led4(PTB11);
 
+DigitalOut led5(PTB18);
+DigitalOut led6(PTB19);
+DigitalOut led7(PTD1);
+
 AnalogIn pot1 (PTB3);
 AnalogIn pot2 (PTB2);
 
@@ -20,12 +24,6 @@
 Timer timer;
 int ralentire = 0;
 
-/*
-AnalogIn pot1 (PTB3);
-AnalogIn pot2 (PTB2);
-
-printf("%f", pot1.read());
-*/
 
 int tempsInte = MAX_INTE;
 unsigned char cam_data[128];
@@ -44,6 +42,7 @@
 int KP = 80;
 int seuil_der = 0;
 int ajust_vitesse = 0;
+int ajust_vit_bosse = 0;
 int new_bari = 0;
 int vitesse_virage = 0;
 int ligne_droite = 0;
@@ -69,17 +68,6 @@
     flag = 1;
 }
 
-void arret()
-{
-    PWM_motor(MOTEUR_A, 0);
-    PWM_motor(MOTEUR_B, 0);
-    while(BP1);
-    while(!BP1);
-    while(BP1);
-    t_debut.reset();
-}
-
-
 
 
 void Init_car()
@@ -100,8 +88,23 @@
    angle_servo_moteur(0);//on met les roues droite pour commencer
 }
 
+void arret()
+{
+    PWM_motor(MOTEUR_A, 0);
+    PWM_motor(MOTEUR_B, 0);
+    while(BP1);
+    while(!BP1){menu();};
+    while(BP1);
+    Init_car();
+    t_debut.reset();
+}
+
+
 int main() {
     
+/*while(1)
+{ Gestion_bosse();
+wait(0.1);}*/
     Init_car();
     
     while(!BP1)//tant que l'on appuie pas sur BP1
@@ -110,15 +113,15 @@
     }
     while(BP1);//on attends le relachement de BP1
 
-/***************Début de la course***************/   
+//***************Début de la course***************   
 
     t_debut.start();//Timer du début de la course
     t_ligne.start();
     
 
-/************************************************/ 
+//************************************************
    
-/**********On demarre les moteurs****************/
+//*********On demarre les moteurs****************
     PWM_motor(MOTEUR_A, VIT);
     PWM_motor(MOTEUR_B, VIT);
     
@@ -131,38 +134,39 @@
         {
             flag = 0;
 
-            /***************Récupération données*****************/
+            //**************Récupération données*****************
             
             F_GetData();
             
-            /*****************Traitement Image*******************/
+            //***************Traitement Image*******************
             
             T_image();
             
-            /****************Gestion des Moteurs*****************/
+            //***************Gestion des Moteurs*****************
             
             angle_servo_moteur(new_bari);
             
+            //*****************Gestion_bosse*********************
+            
+            Gestion_bosse();
+            
             moteurs_arriere();
 
-            /****************Balance des blancs******************/
+            //***************Balance des blancs******************
             
             F_BalanceBlancs();
             
-            /******************Gestion_bosse*********************/
             
-            Gestion_bosse();
-            
-            /****************Detection_arrivee*******************/
+            //***************Detection_arrivee*******************
             
             fin_course();
 
         }
         
     }
-} 
+ 
 
 
 
 
-
+}
--- a/shield.cpp	Thu Jan 26 07:37:45 2017 +0000
+++ b/shield.cpp	Wed Feb 08 15:16:04 2017 +0000
@@ -7,7 +7,14 @@
 {
     vitesse_virage = new_bari/2;
     
-    ajust_vitesse = (ligne_droite*5)/2;
+    ajust_vitesse = ajust_vit_bosse +((ligne_droite*5)/2);
+    
+    pc.printf("%hi\n", ajust_vit_bosse);
+    
+    while(bosse==1) {PWM_motor(100,100);} // acceleration à diminuer pour la competition
+    
+    while(bosse==3) {PWM_motor(30,30);}
+    
     if(VIT == 0)
     {
         PWM_motor(0,0);
@@ -16,23 +23,17 @@
     {
         if(vitesse_virage > 0)
         {
-            PWM_motor((VIT+ajust_vitesse) - vitesse_virage,(VIT)+ 4*vitesse_virage); 
+            PWM_motor((VIT+ajust_vitesse) - vitesse_virage,(VIT+ajust_vitesse)+ 4*vitesse_virage);  // ajust_vitesse seulemnt sur le moteur  gauche?????
         }
         else
         { 
-            PWM_motor((VIT)- 4*vitesse_virage, (VIT+ajust_vitesse) + vitesse_virage);
+            PWM_motor((VIT+ajust_vitesse)- 4*vitesse_virage, (VIT+ajust_vitesse) + vitesse_virage);
         }
     }
     else
     {
-        if(vitesse_virage > 0)
-        {
-            PWM_motor((VIT) - vitesse_virage, (VIT) + vitesse_virage);
-        }
-        else
-        { 
-            PWM_motor((VIT)- vitesse_virage,  (VIT) + vitesse_virage);
-        }
+            PWM_motor((VIT+ajust_vitesse)- vitesse_virage,  (VIT+ajust_vitesse) + vitesse_virage);
+        
     }
     
 }
@@ -66,4 +67,5 @@
         KP += ((pot2.read()+1)*100); 
     }
     VIT /= 10;
+    pc.printf("VIT=%d\nKP=%d\n",VIT,KP); 
 }
--- a/traitement_image.cpp	Thu Jan 26 07:37:45 2017 +0000
+++ b/traitement_image.cpp	Wed Feb 08 15:16:04 2017 +0000
@@ -11,7 +11,7 @@
     char mem_a, mem_b;
     char tab[3];
     char tab2[3];
-    mem_a = 100;
+    mem_a = 100;            
     mem_b = 100;
     save_b = MARGE_LIGNE;
     save_a = MARGE_LIGNE;
@@ -84,54 +84,6 @@
 }
 
 
-void Gestion_bosse()
-{
-    if(BOSSE_ACTIVE)//Si on active la détection de la bosse
-    {
-        static int tep = 0;
-        switch(bosse)
-        {
-            case 0:
-            led1 = 1;
-            led2 = 0;
-            break;
-            case 1:
-            led2 = 1;
-            led1= 0;
-            break;
-            case 2:
-            led3 = 1;
-            led2 = 0;
-            break;
-        }
-    
-        
-        last_three[2] = last_three[1];
-        last_three[1] = last_three[0];
-        last_three[0] = acc.getAccX();
-        
-        if(bosse == 1)
-        ajust_vitesse = 20;
-        else if(bosse == 2)
-        ajust_vitesse = -10;
-        else ajust_vitesse = 0;
-        
-        if((middle_3F(last_three) > 0.2 ) && (bosse == 0 && t_debut.read() > 2))
-        {
-            bosse = 1;
-            tep = (int)t_debut.read_ms();
-        }
-        else if(bosse == 1 && (int)t_debut.read_ms() > (tep+1000))
-        {
-            bosse = 2;
-        }
-        else if(bosse == 2 && middle_3F(last_three) > 0.98)
-        {
-            bosse = 3;
-        }
-    }
-}
-
 void T_image()
 {
     static int  last_bari = 0, bari_bis = 0;
@@ -165,7 +117,7 @@
         }
         if(abs(new_bari) >= 15 && ligne_droite > 0 && ralentire == 0)
         {
-            ralentire = 1;
+            ralentire = 1; // ralentire????????
             retiens = t_ligne.read_ms();
             t_ligne.reset();
             if(retiens > 3000) retiens = 3000;