Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MMA8451Q mbed xbee_lib
Fork of Programme_course by
Revision 1:4a9196bcf97a, committed 2017-02-08
- 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
--- 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;
