Index: branch/decroux/Emb_App/programme_principal_etud.c
===================================================================
--- branch/decroux/Emb_App/programme_principal_etud.c	(revision 475)
+++ branch/decroux/Emb_App/programme_principal_etud.c	(revision 476)
@@ -127,9 +127,9 @@
 unsigned int capt=0x0000;
 unsigned int Mode;
 int cpt=0;
+unsigned int stop;
 
 
-
 // Tache qui met la tourelle a 45degres
 void asservissement_tourelle()
 {
@@ -137,17 +137,23 @@
 		CanFrame commTourel;
 		CanFrame requeteTourel; 
 		// Lectre de l'angle
-		requeteTourel.data.id='R'; //Lecture de l'angle effecif de la tourelle portant le télémtre
-    	requeteTourel.data.rtr=1; // Indiquation d'une requête de lecture
-    	snd_dtq (CanTx,requeteTourel.msg); // Interrogation du peripherique
-		alpha=periph[ADDR('R')].val; //Contient la derniere valeur renvoyee par le simulateur
-		periph[ADDR('R')].maj; // Incremente a chaque reception
-		//Corection de l'angle	
-		commTourel.data.id='T'; //Commade en vitesse de la tourelle poant le télémetre
-		commTourel.data.rtr=0; 
-   		commTourel.data.val=kt*(450-alpha); //Corecteur propotionel
-		snd_dtq (CanTx,commTourel.msg);
-			
+		if(Bp_M==1)
+		{
+			alpha=kt*((2*(ad01-512))-alpha); // si bouton poussoir du milieu activer
+		}
+		else
+		{
+			requeteTourel.data.id='R'; //Lecture de l'angle effecif de la tourelle portant le télémtre
+    		requeteTourel.data.rtr=1; // Indiquation d'une requête de lecture
+    		snd_dtq (CanTx,requeteTourel.msg); // Interrogation du peripherique
+			alpha=periph[ADDR('R')].val; //Contient la derniere valeur renvoyee par le simulateur
+			periph[ADDR('R')].maj; // Incremente a chaque reception
+			//Corection de l'angle	
+			commTourel.data.id='T'; //Commade en vitesse de la tourelle poant le télémetre
+			commTourel.data.rtr=0; 
+   			commTourel.data.val=kt*(450-alpha); //Corecteur propotionel
+			snd_dtq (CanTx,commTourel.msg);
+		}
 		dly_tsk(10);
 	}
 }
@@ -167,7 +173,7 @@
 		periph[ADDR('U')].maj; // Incremente a chaque reception
 
 		//Assevicement 
-		if(Mode==0x8304 || Mode==0x0304)//On est sur la piste noir
+		if(Mode==0x8204 || Mode==0x0104)//On est sur la piste noir
 		{
 			if(capt==0x7608)// Aprés le saut 
 			{
@@ -176,10 +182,11 @@
 				commRoues.data.val=kr*(dis-700); // Correction de la disance
 				snd_dtq(CanTx,commRoues.msg);
 			}
-			else if(dis>5000 || dis<400 || capt==0x7210) //Pour passer les trous et les tonneau 
+			else if(dis>5000 || dis<500 || capt==0x7210) //Pour passer les trous et les tonneau 
 			{
 				LED_J=1;
 				dly_tsk(100);
+				LED_J=0;
 				commRoues.data.id='D'; // Commande de l'angle des roues 
 				commRoues.data.rtr=0; //Indique une requete d'écriture
 				commRoues.data.val= 0; // Correction de la disance
@@ -218,12 +225,20 @@
 				snd_dtq(CanTx,commRoues.msg);
 			}
 		}
-		else 
+		else if(Mode==0x8203 || Mode==0x0103) //On est sur la piste rouge
 		{	
-			if(dis>1000 ) //Pour passer les trous 
+			if(capt==0x6a08)
 			{
+				commRoues.data.id='D'; // Commande de l'angle des roues 
+				commRoues.data.rtr=0; //Indique une requete d'écriture
+				commRoues.data.val= 0; // Correction de la disance
+				snd_dtq(CanTx,commRoues.msg);
+			}
+			else if(dis>1000 ) //Pour passer les trous 
+			{
 				LED_J=1;
 				dly_tsk(100);
+				LED_J=0;
 				commRoues.data.id='D'; // Commande de l'angle des roues 
 				commRoues.data.rtr=0; //Indique une requete d'écriture
 				commRoues.data.val= 0; // Correction de la disance
@@ -237,13 +252,50 @@
 				snd_dtq(CanTx,commRoues.msg);
 			}
 		}
+		else
+		{
+			if(dis>2000 ) //Pour passer les trous 
+			{
+				LED_J=1;
+				dly_tsk(100);
+				LED_J=0;
+				commRoues.data.id='D'; // Commande de l'angle des roues 
+				commRoues.data.rtr=0; //Indique une requete d'écriture
+				commRoues.data.val= 0; // Correction de la disance
+				snd_dtq(CanTx,commRoues.msg);
+			}
+			else
+			{
+				commRoues.data.id='D'; // Commande de l'angle des roues 
+				commRoues.data.rtr=0; //Indique une requete d'écriture
+				commRoues.data.val=kr*(dis-700); // Correction de la disance
+				snd_dtq(CanTx,commRoues.msg);
+			}
+		}
 		dly_tsk(10);	
 	}
 		
 }
 
+//Fonction d'arret urgence
+void arreturgence(void)
+{
+	CanFrame commVit;
+	stop=Bp_G;
+	LED_R=0;
+	while (stop==1)
+	{
+		stop=Bp_G;
+		commVit.data.id='V';
+		commVit.data.rtr=0;
+		commVit.data.val=0;
+		snd_dtq(CanTx, commVit.msg);
+		LED_R=1;
+	}
+}
+
 //Fonctin vitesse noir
-void vitesse4(unsigned int valcapt)
+int vitesse4(unsigned int valcapt)
 {
 		CanFrame commVit;
 	 	if( capt==0x4a01||capt==0x6208 ||capt==0x7608 ||capt==0x7620) // Rallentissement prés du tonneau, pour la bosse et aprés le saut
@@ -259,6 +311,17 @@
 			commVit.data.rtr=0;
 			commVit.data.val=42; 
 			snd_dtq (CanTx,commVit.msg);
+		}
+		else if(Bp_M==1)//Réglage avec les potentiomète si touche milieu est appuyé
+		{
+			commVit.data.id='V';
+			commVit.data.rtr=0;
+			commVit.data.val=ad01/10; 
+			snd_dtq (CanTx,commVit.msg);
+		}
+		else if(valcapt==0x5605)
+		{
+			cpt=cpt+1;
 		}	
 		else 
 		{	commVit.data.id='V';
@@ -265,13 +328,14 @@
 			commVit.data.rtr=0;
 			commVit.data.val=25; //Reprise de vitesse une fois la voiture stabilisé piste rouge
 			snd_dtq (CanTx,commVit.msg);
-		}		
+		}	
+	return cpt;	
 }
 //Fonction vitesse rouge
-void vitesse3(unsigned int valcapt)
+int vitesse3(unsigned int valcapt)
 {
 	CanFrame commVit;
-	//vitesse pour passer le tramplin piste rouge
+	//vitesse pour passer le tramplin piste rouge 
 	if(valcapt== 0x6a08)
 	{
 		commVit.data.id='V';
@@ -278,7 +342,7 @@
 		commVit.data.rtr=0;
 		commVit.data.val=45; 
 		snd_dtq (CanTx,commVit.msg);
-	} 
+	}
 	//Ralentissemet après tramplin piste rouge
 	else if(valcapt==0x7608||valcapt==0x4203) 
 	{
@@ -286,7 +350,18 @@
 		commVit.data.rtr=0;
 		commVit.data.val=15;
 		snd_dtq (CanTx,commVit.msg);
-	}	
+	}
+	else if(Bp_M==1)//Réglage avec les potentiomète si touche milieu est appuyé
+	{
+		commVit.data.id='V';
+		commVit.data.rtr=0;
+		commVit.data.val=ad01/10; 
+		snd_dtq (CanTx,commVit.msg);
+	}
+	else if(valcapt==0x5605)
+	{
+		cpt=cpt+1;
+	}		
 	else
 	{
 		commVit.data.id='V';
@@ -293,7 +368,8 @@
 		commVit.data.rtr=0;
 		commVit.data.val=30; //Reprise de vitesse une fois la voiture stabilisé piste rouge
 		snd_dtq (CanTx,commVit.msg);
-	}	
+	}
+	return cpt;
 }	
 			
 		
@@ -312,10 +388,17 @@
 			snd_dtq (CanTx,commVit.msg);
 			return cpt;
 		}
+		else if(Bp_M==1)//Réglage avec les potentiomète si touche milieu est appuyé
+		{
+			commVit.data.id='V';
+			commVit.data.rtr=0;
+			commVit.data.val=ad01/10; 
+			snd_dtq (CanTx,commVit.msg);
+		}	
 		else
 		{
 			commVit.data.id='V';
-			commVit	.data.rtr=0;
+ 			commVit	.data.rtr=0;
 			commVit.data.val=30; 
 			snd_dtq (CanTx,commVit.msg);
 		}
@@ -322,10 +405,20 @@
 	}
 	else
 	{
-		commVit.data.id='V';
-		commVit	.data.rtr=0;
-		commVit.data.val=30; 
-		snd_dtq (CanTx,commVit.msg);
+		if(Bp_M==1)//Réglage avec les potentiomète si touche milieu est appuyé
+		{
+			commVit.data.id='V';
+			commVit.data.rtr=0;
+			commVit.data.val=ad01/10; 
+			snd_dtq (CanTx,commVit.msg);
+		}
+		else
+		{	
+			commVit.data.id='V';
+			commVit	.data.rtr=0;
+			commVit.data.val=30; 
+			snd_dtq (CanTx,commVit.msg);
+		}
 	}
 	return cpt;
 	
@@ -338,22 +431,15 @@
 	if(capt==0x5605)
 	{
 		cpt=cpt+1;
-		if(cpt==9)
-		{
-			commVit.data.id='V';
-			commVit	.data.rtr=0;
-			commVit.data.val=0; 
-			snd_dtq (CanTx,commVit.msg);
-			return cpt;
-		}
-		else
-		{
-			commVit.data.id='V';
-			commVit	.data.rtr=0;
-			commVit.data.val=42; 
-			snd_dtq (CanTx,commVit.msg);
-		}
 	}
+	
+	else if(Bp_M==1)//Réglage avec les potentiomète si touche milieu est appuyé
+	{
+		commVit.data.id='V';
+		commVit.data.rtr=0;
+		commVit.data.val=ad01/10; 
+		snd_dtq (CanTx,commVit.msg);
+	}	
 	else
 	{
 		commVit.data.id='V';
@@ -361,6 +447,7 @@
 		commVit.data.val=42; 
 		snd_dtq (CanTx,commVit.msg);
 	}
+	
 	return cpt;
 }
 
@@ -400,8 +487,7 @@
 
 void main()
 {
-	
-	
+	CanFrame commVit;
 	ports_mcu();
     lcd_init();
 	periph_init();
@@ -418,19 +504,37 @@
 	sta_tsk(ID_asservissement_roues);
 	
     while(1)
-    {	
+    {
+		arreturgence();
 		Mode= lecture_piste();
-		if(Mode==0x8304 || Mode==0x0304)//On est sur la piste noir
+		if(Mode==0x8204)//On est sur la piste noir
 		{
 			capt=lecture_Capteur();
 			vitesse4(capt);
+			if(cpt==24)
+			{
+				commVit.data.id='V';
+				commVit	.data.rtr=0;
+				commVit.data.val=0; 
+				snd_dtq (CanTx,commVit.msg);
+				return;
+			}
 		}
-		else if(Mode==0x8303 || Mode==0x0303) //O est sur la piste rouge
+		else if(Mode==0x8203) //O est sur la piste rouge
 		{
 			capt=lecture_Capteur();
-			vitesse3(capt);
+			cpt=vitesse3(capt);	
+			if(cpt==24)
+			{
+				commVit.data.id='V';
+				commVit	.data.rtr=0;
+				commVit.data.val=0; 
+				snd_dtq (CanTx,commVit.msg);
+				return;
+			}
+				
 		}
-		else if(Mode==0x8302 || Mode==0x0302) //On est dur la piste bleu
+		else if(Mode==0x8202) //On est dur la piste bleu
 		{
 			capt=lecture_Capteur();
 			cpt=vitesse2(capt);
@@ -439,20 +543,27 @@
 				return ;
 			}
 		}
-		else if(Mode==0x8301 || Mode==0x0301)//On est sur la piste verte
+		else if(Mode==0x8201)//On est sur la piste verte
 		{
 			capt=lecture_Capteur();
 			cpt=vitesse1(capt);
-			if (cpt==9)//Compteur pour arreter la voiture a 3 eme tour
-			{
-				return ;
+			if (cpt==16)//Compteur pour arreter la voiture a 3 eme tour
+			{commVit.data.id='V';
+				commVit	.data.rtr=0;
+				commVit.data.val=0; 
+				snd_dtq (CanTx,commVit.msg);
+				return;;
 			}
 		}
-		
+		else
+		{
+			commVit.data.id='V';
+			commVit	.data.rtr=0;
+			commVit.data.val=0; 
+			snd_dtq (CanTx,commVit.msg);
+		}
 		
-		LED_J=0;
-		dly_tsk(100);
-				
+		dly_tsk(100);			
     }
 }
 
