Index: branch/maincent/tp_info6/Emb_App.tws
===================================================================
--- branch/maincent/tp_info6/Emb_App.tws	(revision 226)
+++ branch/maincent/tp_info6/Emb_App.tws	(revision 227)
@@ -14,8 +14,8 @@
 "E:\info6_maincent\tp_info6\Emb_App\programme_principal_etud.c" 
 [WORKSPACE_FILE_STATES]
 "E:\info6_maincent\tp_info6\Emb_App\conf_noyau.cfg" 75 75 1428 347 0 3 
-"E:\info6_maincent\tp_info6\Emb_App\crt0mr.a30" -8 -30 956 523 1 1 
-"E:\info6_maincent\tp_info6\Emb_App\programme_principal_etud.c" 0 0 1594 535 0 0 
+"E:\info6_maincent\tp_info6\Emb_App\crt0mr.a30" 0 0 956 523 0 1 
+"E:\info6_maincent\tp_info6\Emb_App\programme_principal_etud.c" -8 -30 956 523 1 0 
 "E:\info6_maincent\tp_info6\bsp\radiocommande.c" 50 50 1430 351 0 2 
 "E:\info6_maincent\tp_info6\bsp\uart0.c" 100 100 1356 347 0 4 
 [LOADED_PROJECTS]
Index: branch/maincent/tp_info6/Emb_App/programme_principal_etud.c
===================================================================
--- branch/maincent/tp_info6/Emb_App/programme_principal_etud.c	(revision 226)
+++ branch/maincent/tp_info6/Emb_App/programme_principal_etud.c	(revision 227)
@@ -121,8 +121,6 @@
 //				correspondant au nom du véhicule si le nom se termine par '*'
 
 short alpha;
-short distance;
-short angleR;
 void tourelle(){
 	while(1)
 	{
@@ -135,10 +133,12 @@
         req.data.rtr=1;
         periph[ADDR('R')].ev=0x01;
         snd_dtq(CanTx, req.msg);
-        //Attente de la r?ponse
+        //Attente de la reponse
         wai_flg (ev_periph, 0x01, TWF_ANDW, &flag);
         alpha=periph[ADDR('R')].val;
-        //Commande vitesse de la tourelle
+        
+		
+		//Commande vitesse de la tourelle
         comm.data.id='T';
         comm.data.rtr=0; //indique une ?criture
         comm.data.val=k*(450-alpha);
@@ -146,6 +146,30 @@
  		dly_tsk(50);
 	}      
 }
+
+
+short capteur;
+void zone(){
+	while(1)
+	{
+		//lecture de la zone
+        CanFrame requ;
+        UINT flag;
+		requ.data.id='C';			//lecture des evenements
+		requ.data.rtr=1;			//indique une lecture
+		periph[ADDR('C')].ev=0x03;
+		snd_dtq(CanTx, requ.msg);
+		
+		//Attente de la reponse
+        wai_flg (ev_periph, 0x03, TWF_ANDW, &flag);
+        capteur=periph[ADDR('C')].val;
+		dly_tsk(15);				
+	}
+}
+
+
+short distance;
+short distance1;
 void dist(){
 	while(1)
 	{
@@ -154,48 +178,85 @@
         UINT flag;
         
         req.data.id='U';
-        req.data.rtr=1;
+        req.data.rtr=1;		//indique une lecture
         periph[ADDR('U')].ev=0x02;
         snd_dtq(CanTx, req.msg);
-        //Attente de la r?ponse
+        
+		//Attente de la reponse
         wai_flg (ev_periph, 0x02, TWF_ANDW, &flag);
         distance=periph[ADDR('U')].val;
-		dly_tsk(2); 
+		dly_tsk(20); 
 	}
 }
+
+
 void roue(){
 	while(1)
 	{
-        short s=2; //Gain du correcteur P
+        short s=1.5; //Gain du correcteur P
         CanFrame req,comm;
         UINT flag;
 
         //Commande de l'angle de roue
-        comm.data.id='D';
-        comm.data.rtr=0; //indique une ?criture
-        if (distance > 5000)
+        comm.data.id='D';	//commande angle roue
+        comm.data.rtr=0;	//indique une ecriture
+        if (distance > 2000 || capteur == 0x5603)
 		{
-			comm.data.val=0;
+			// si trou dans la barriere ou zonesaut
 		}	
 		else
 		{
-			comm.data.val=s*(distance-706);
+			distance1=distance; //cas normal: si on est au milieu de la piste angle des roues à 0
         }
-  		snd_dtq(CanTx, comm.msg); 
-		dly_tsk(2);      
+  		comm.data.val=s*(distance1-706);
+  		snd_dtq(CanTx, comm.msg);      
 	}
 }
+
+
 void vitesse(){
+	
+	dly_tsk(5000);
 	while(1)
 	{
         CanFrame requete;
-		dly_tsk(5000);
+		UINT flag;
+		
+		
+		//commande vitesse vehicule
 		requete.data.id='V';
-		requete.data.rtr=0; 
-		requete.data.val=20;
+		requete.data.rtr=0; 			//indique une ecriture
+		if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5601 )
+		{
+			requete.data.val=45;				// si trou dans la barriere ou zonesaut
+		}	
+		else
+		{
+			requete.data.val=15; //cas normal: si on n'est pas dans la zone de saut 
+        } 
+		
+		
+//		requete.data.val=25;			//vitesse constante
+		
+/*	vitesse variable	
+		if (distance > 706)
+		{
+			requete.data.val=140-0.05*distance;				// a fond si vehicule au milieu sinon ralentit doucement
+		}	
+		else
+		{
+			requete.data.val=0.05*distance;  				//vitesse max=50=0.07*706
+        }
+*/
+		
+		
 		snd_dtq(CanTx, requete.msg);
+	//	dly_tsk(2);
 	}
 }
+
+
+
 void main()
 {
         CanFrame requete, reponse,comm;
@@ -210,19 +271,19 @@
         sta_tsk(ID_periph_rx);
         
 		
+		
+        sta_tsk(ID_tourelle);
+        sta_tsk(ID_dist);
+        sta_tsk(ID_roue);
+		sta_tsk(ID_zone);
 		sta_tsk(ID_vitesse);
-                sta_tsk(ID_tourelle);
-                sta_tsk(ID_dist);
-                sta_tsk(ID_roue);
 		
 		
-		
     while(1)
     {
                
            dly_tsk(800);     
-                
-        
+                 
     }
 }
 void acqui()
Index: branch/maincent/tp_info6/Emb_App/conf_noyau.cfg
===================================================================
--- branch/maincent/tp_info6/Emb_App/conf_noyau.cfg	(revision 226)
+++ branch/maincent/tp_info6/Emb_App/conf_noyau.cfg	(revision 227)
@@ -76,6 +76,16 @@
 };
 
 task[]{
+	entry_address	= zone();
+	name	= ID_zone;
+	stack_size	= 512;
+	stack_section	= stack;
+	priority	= 6;
+	initial_start	= OFF;
+	exinf	= 0x0;
+};
+
+task[]{
 	entry_address	= vitesse();
 	name	= ID_vitesse;
 	stack_size	= 512;
