Index: branch/sotty/Emb_App.tws
===================================================================
--- branch/sotty/Emb_App.tws	(revision 455)
+++ branch/sotty/Emb_App.tws	(revision 456)
@@ -7,13 +7,9 @@
 [GENERAL_DATA]
 [BREAKPOINTS]
 [OPEN_WORKSPACE_FILES]
-"E:\tp_info6_2018_sotty\bsp\radiocommande.c" 
-"E:\tp_info6_2018_sotty\Emb_App\crt0mr.a30" 
-"E:\tp_info6_2018_sotty\Emb_App\programme_principal_etud.c" 
+"E:\tp_info6_2018_nan_cao\tp_info6\Emb_App.hws" 
 [WORKSPACE_FILE_STATES]
-"E:\tp_info6_2018_sotty\Emb_App\crt0mr.a30" 125 125 1355 453 0 1 
-"E:\tp_info6_2018_sotty\Emb_App\programme_principal_etud.c" -8 -30 1596 716 1 0 
-"E:\tp_info6_2018_sotty\bsp\radiocommande.c" 150 150 1355 453 0 2 
+"E:\tp_info6_2018_nan_cao\tp_info6\Emb_App.hws" -8 -30 1596 716 1 0 
 [LOADED_PROJECTS]
 "EmbM32C87App" 
 [END]
Index: branch/sotty/Emb_App/SessionM32C_E8a_system.ini
===================================================================
--- branch/sotty/Emb_App/SessionM32C_E8a_system.ini	(revision 455)
+++ branch/sotty/Emb_App/SessionM32C_E8a_system.ini	(revision 456)
@@ -25,4 +25,4 @@
 [Target]
 M32C E8a SYSTEM=Renesas Communications
 [USER_DATA]
-RESET=ff003e
+RESET=ff01e2
Index: branch/sotty/Emb_App/programme_principal_etud.c
===================================================================
--- branch/sotty/Emb_App/programme_principal_etud.c	(revision 455)
+++ branch/sotty/Emb_App/programme_principal_etud.c	(revision 456)
@@ -114,11 +114,11 @@
 //'C'/67/0x43 : Informations sur le dernier capteur touche :
 //  8 bits de poids faible : numero du capteur
 //  8 bits de poids fort : couleur ('C','R','J','B' ou 'V')
-//'J'/74/0x4A : Proposition d'un code de dévérouillage.
-//'j'/106/06A : Récupération du résultat de dernier code envoyé. 0x77 si aucun code n'a été soumis. <0 si la réponse n'est pas
-//				disponible. 0xab avec a-> nombre de couleurs bien placées et b -> couleurs présentes mais mal placées.
-//'I'/73/Ox49 : Définition du nom du véhicule. Doit débuter par le caractère '#' et entraine le chargement de la configuration de piste
-//				correspondant au nom du véhicule si le nom se termine par '*'
+//'J'/74/0x4A : Proposition d'un code de deverouillage.
+//'j'/106/06A : Recuperation du resultat de dernier code envoye. 0x77 si aucun code n'a ete soumis. <0 si la reponse n'est pas
+//				disponible. 0xab avec a-> nombre de couleurs bien placées et b -> couleurs presentes mais mal placees.
+//'I'/73/Ox49 : Definition du nom du vehicule. Doit débuter par le caractere '#' et entraine le chargement de la configuration de piste
+//				correspondant au nom du vehicule si le nom se termine par '*'
 
 // Definition des codes commandes et requetes
 #define VITESSE_ROUES 'V'
@@ -152,7 +152,11 @@
 short angle_tourelle = 450;
 
 short vit_max = 30;
-unsigned int vit_roue = 15;//*
+short vit_max_verte = 70;
+short vit_virage_verte = 32;
+short vit_max_rouge = 35;
+unsigned int vit_roue = 25;//*
+char last_vitesse;
 short K_roue = 1;
 short ang_roue = 0;
 short capteur = 0;
@@ -160,6 +164,7 @@
 short compar_mur = 500;
 
 char num_piste = -1;
+char nbre_tours = 1;
 
 char rotation_roues_asserv = 1; //Si 1 roues libres sinon blocage
 char rotation_roues_strat = 1; //Si 1 roues libres sinon blocage
@@ -166,10 +171,17 @@
 short filtre_sup = 1000;
 short filtre_inf = 0;
 
+char pseudo_sem = 0;
+char BR_appuye = 0; //1 Si le bouton rouge ete appuye, 0 sinon
 
+short code_secret = 0123;
+
 void main()
 {
 	int k;
+	char tmp[32];
+	char piste_c[8];
+	short couleur = 0;
 
 	//Initialise tous les peripheriques, taches et cycliques handler
 	ports_mcu();
@@ -198,118 +210,366 @@
 	couleur_piste();
 	sta_tsk(ID_strategie);
 	
-    while(1)
-    {
-		LED_J=1;
+	switch(num_piste){ //vitesse initiale en fonction de la piste
+        case PISTE_VERTE :
+            last_vitesse = 40;
+			sprintf(piste_c,"P:Vert \0");
+			break;
+        case PISTE_BLEUE :
+            last_vitesse = 30;
+			sprintf(piste_c,"P:Bleu \0");
+			break;
+        case PISTE_ROUGE :
+            last_vitesse = vit_max_rouge;
+			sprintf(piste_c,"P:Rouge\0");
+			break;
+        case PISTE_NOIRE :
+            last_vitesse = 25;
+			sprintf(piste_c,"P:Noir \0");
+			break;
+	}
+	lcd_com(0x80);
+    lcd_str(piste_c);
+	
+	//code_secret = 0x0123;
+	//send_commande('j',code_secret);
+	//code_secret=-1;
+    while(1){
+		/*
+		if (code_secret<0){
+			code_secret = send_requete('j');
+			code_secret=code_secret*2;
+		}
+		else{
+			code_secret = 0x0123;
+			send_commande('J',code_secret);
+		}
+		*/
+		lcd_cls();
+			
+		couleur = capteur & 0xFF00;
+		switch(couleur){
+			case 0x4200 :
+				sprintf(tmp,"%s  C:Cyan   Tour %d",piste_c,nbre_tours);
+				break;
+			case 0x6300 :
+				sprintf(tmp,"%s  C:Cyan   Tour %d",piste_c,nbre_tours);
+				break;
+			case 0x4300 :
+				sprintf(tmp,"%s  C:Bleu   Tour %d",piste_c,nbre_tours);
+				break;
+			case 0x5200 :
+				sprintf(tmp,"%s  C:Rouge  Tour %d",piste_c,nbre_tours);
+				break;
+			case 0x4A00 :
+				sprintf(tmp,"%s  C:Jaune  Tour %d",piste_c,nbre_tours);
+				break;
+			case 0x5600 :
+				sprintf(tmp,"%s  C:Vert   Tour %d",piste_c,nbre_tours);
+				break;
+			
+		}
+		lcd_com(0x80);
+        lcd_str(tmp);
+		
 		dly_tsk(100);
-		LED_J=0;
-		dly_tsk(100);
-		
     }
 }
 
-
-
 void strategie(VP_INT stacd){
 	static int k = 0;
+	static char derivee = 1; //si 1 : croissance, si -1 decroissance
+	
 	while(1){
-		capteur = send_requete(INFO_CAPTEUR);//**
-		switch(num_piste){
-		    case PISTE_VERTE :
-				vit_roue = 40;
-	            break;
+		if(Bp_G==1){
+			ter_tsk(ID_asserv_roue);
+            send_commande('V',0);
+			send_commande('D',0);
+	
+			LED_R=1;
+			
+			BR_appuye = 1;
+			
+        }
+        else {
+			if(BR_appuye == 1){ //le bouton ete appuye
+				sta_tsk(ID_asserv_roue);
+				BR_appuye = 0;				
+			}
+	        LED_R=0;
+	        vit_roue = last_vitesse;
+	        rotation_roues_strat = 1; //angle des roues libres
 
-	        case PISTE_BLEUE :
-	            break;
 
-	        case PISTE_ROUGE :
-				switch(capteur){
-					case 0x6301 : //Capteur perso avant bosse rouge
-						rotation_roues_strat = 0; //blocage de langle des roues
-						vit_roue = 45;
-						break;
-					
-					case 0x4203 : //Capteur apres bosse rouge
-						rotation_roues_strat = 1;
-						vit_roue = 8;
-						k = 0;
-						break;
-					
-					case 0x6304 : // Capteur perso apres bosse rouge
-						if (k == 0){
-							k = vit_roue*3;
+			capteur = send_requete(INFO_CAPTEUR);//**
+			switch(num_piste){
+			    case PISTE_VERTE :
+					switch(capteur){
+						case 0x5601 : //Feu
+	                        vit_roue = vit_max_verte;
+	                        if(k==0){k=20;}
+	                        if(k<vit_max_verte/2){vit_roue = k*2;k++;}
+	                        K_roue = 1;
+	                        pseudo_sem = 1;
+	                        if(nbre_tours == 20){
+	                            send_commande('V',0);
+								send_commande('D',0);
+								ter_tsk(ID_periph_tx);
+								ter_tsk(ID_periph_rx);
+	                        }
+	                        break;
+
+					    case 0x4A01 : //Entree 1er virage
+					        vit_roue = vit_virage_verte;
+					        K_roue = 1.8;
+					        compar_mur = 680;
+					        derivee = 1;
+					        k = vit_max_verte;
+	                        break;
+					    case 0x5602 : //Fin 1er virage
+					        switch(derivee){
+	                            case 1 :
+	                                k++;
+	                                if (k == 90){derivee = -1;}
+	                                break;
+	                            case -1 :
+	                                k--;
+	                                if (k == vit_max_verte){derivee = 0;}
+	                                break;
+					        }
+					        vit_roue = k;
+					        K_roue = 1;
+					        compar_mur = 680;
+	                        break;
+					    case 0x5202 : //Entree 2eme virage
+					        vit_roue = vit_virage_verte;
+					        K_roue = 1.8;
+					        compar_mur = 680;
+					        derivee = 1;
+					        k = vit_max_verte;
+	                        break;
+					    case 0x5603 : //Fin 2eme virage
+					        switch(derivee){
+	                            case 1 :
+	                                k++;
+	                                if (k == 90){derivee = -1;}
+	                                break;
+	                            case -1 :
+	                                k--;
+	                                if (k == vit_max_verte){derivee = 0;}
+	                                break;
+					        }
+					        vit_roue = k;
+					        K_roue = 1;
+					        compar_mur = 680;
+	                        break;
+					    case 0x4203 : //Entree 3eme virage
+					        vit_roue = vit_virage_verte;
+					        K_roue = 1.8;
+					        compar_mur = 680;
+					        derivee = 1;
+					        k = vit_max_verte;
+	                        break;
+					    case 0x5604 : //Fin 3eme virage
+					        switch(derivee){
+	                            case 1 :
+	                                k++;
+	                                if (k == 90){derivee = -1;}
+	                                break;
+	                            case -1 :
+	                                k--;
+	                                if (k == vit_max_verte){derivee = 0;}
+	                                break;
+					        }
+					        vit_roue = k;
+					        K_roue = 1;
+					        compar_mur = 680;
+	                        break;
+
+					    case 0x4304 : //Entree 4eme virage
+	                        vit_roue = vit_virage_verte;
+	                        K_roue = 1.8;
+	                        compar_mur = 680;
+							if (pseudo_sem == 1){
+	                            nbre_tours++;
+	                            pseudo_sem = 0;
+							}
+							derivee = 1;
+					        k = vit_max_verte;
+							break;
+
+	                    case 0x5605 : //Fin 4eme virage
+					        switch(derivee){
+	                            case 1 :
+	                                k++;
+	                                if (k == 90){derivee = -1;}
+	                                break;
+	                            case -1 :
+	                                k--;
+	                                if (k == vit_max_verte){derivee = 0;}
+	                                break;
+					        }
+					        vit_roue = k;
+					        K_roue = 1;
+					        compar_mur = 680;
+	                        break;
+					}
+		            break;
+
+		        case PISTE_BLEUE :
+		            switch(capteur){
+	                    case 0x5601	: // Feu
+	                        vit_roue = 45;
+	                        pseudo_sem = 1;
+	                        if(nbre_tours == 20){
+	                            vit_roue = 0;
+	                            rotation_roues_strat = 0; //blocage de langle des roues
+	                            //mise en veille de toutes les taches
+	                        }
+							break;
+
+	                    case 0x4A01 : //Entree 1er virage
+	                        vit_roue = 30;
+	                        break;
+
+	                    case 0x4304	: // Entree 4eme virage
+							if (pseudo_sem == 1){
+	                            nbre_tours++;
+	                            pseudo_sem = 0;
+							}
+							break;
+
+	                    case 0x5605 : //Fin 4eme virage
+	                        vit_roue = 45;
+	                        break;
+		            }
+		            break;
+
+		        case PISTE_ROUGE :
+					switch(capteur){
+						case 0x4A01 : //Capteur avant virage ou route a trou ou il faut etre centre
+		                        vit_roue = 32;
+		                        break;
+
+		                    case 0x5202 : //Capteur apres route a trou ou il faut etre centre
+		                        vit_roue = vit_max_rouge;
+		                        break;
+
+							case 0x6301 : //Capteur perso avant bosse rouge
+							    pseudo_sem = 1;
+								rotation_roues_strat = 0; //blocage de langle des roues
+								vit_roue = 45;
+								break;
+
+		                    case 0x6302 : //Capteur perso juste apres bosse rouge
+							    rotation_roues_strat = 1;
+								vit_roue = 8;
+								k = 0;
+								break;
+
+							case 0x6304 : // Capteur perso apres bosse rouge
+								if (k == 0){
+									k = 8*9;
+								}
+								if(k < (vit_max_rouge*9)){
+									vit_roue = k/9;
+									k++;
+								}
+								break;
+
+							case 0x5604 : //Fin 3eme virage
+								if(k < (vit_max_rouge*9) ){
+									vit_roue = k/9;
+									k++;
+								}
+								break;
+
+							case 0x4304	: // Capteur avant fin
+								vit_roue = vit_max_rouge;
+								if (pseudo_sem == 1){
+		                            nbre_tours++;
+		                            pseudo_sem = 0;
+								}
+								break;
+
+		                    case 0x5601	: // Capteur debut de piste
+		                        if(nbre_tours == 20){
+		                            vit_roue = 0;
+		                            rotation_roues_strat = 0; //blocage de langle des roues
+		                            //mise en veille de toutes les taches
+		                        }
+								break;
 						}
-						if(k < (vit_max-3)*3){
-							vit_roue = k/3;
-							k++;
-						}
-						break;
-					
-					case 0x5604 :
-						if(k < (vit_max-3)*3){
-							vit_roue = k/3;
-							k++;
-						}
-						break;
-					
-					case 0x4304	: // Capteur avant fin
-						vit_roue = vit_max;
-						break;
-				}
-	            break;
+			            break;
 
-	        case PISTE_NOIRE :
-				switch(capteur){
-					case 0x5601 :	//evitement tonneaux
-						compar_mur = 680; //decalage a gauche
-						filtre_inf = 300;
-						break;
-						
-					case 0x4a01 :	//fin tonneaux
-						compar_mur = 500; //voiture centree
-						filtre_inf = 0;
-						break;
-						
-					case 0x5602 :	//virage avant saut
-						vit_roue = 15;
-						break;
-						
-					case 0x6302 : //quart perso bosse
-						vit_roue = 10;
-						filtre_inf = 480;
-						filtre_sup = 520;
-						break;
+		        case PISTE_NOIRE :
+					switch(capteur){
+						case 0x5601 :	//Feu
+							if(nbre_tours == 20){
+	                            vit_roue = 0;
+	                            rotation_roues_strat = 0; //blocage de langle des roues
+	                            //mise en veille de toutes les taches
+	                        }
+	                        else{
+	                            pseudo_sem = 1;
+	                            compar_mur = 680; //decalage a gauche
+	                            filtre_sup = 1500;
+	                            filtre_inf = 300;
+	                        }
+							break;
 
-					case 0x5202 :	//fin de bosse
-						filtre_inf = 0;
-						filtre_sup = 1000;
-						vit_roue = vit_max;
-						break;
-					
-					case 0x6320 :	//capteur perso avant saut
-						rotation_roues_strat = 0; //blocage de langle des roues
-						vit_roue = vit_max + 12;
-						break;
-						
-					case 0x4203 :	//capteur apres saut
-						rotation_roues_strat = 1; //deblocage de langle des roues
-						vit_roue = vit_max-20;
-						break;
-						
-					case 0x5604 :	//capteur avant cross
-						filtre_inf = 300;
-						filtre_sup = 700;
-						break;
-						
-					case 0x4304 :	//capteur apres cross
-						filtre_inf = 0;
-						filtre_sup = 1000;
-						vit_roue = vit_max;
-						break;
-				
-				}
-	            break;
-		}
+						case 0x4a01 :	//Entree 1er virage
+							compar_mur = 500; //voiture centree
+							filtre_sup = 1000;
+							filtre_inf = 0;
+							break;
+
+						case 0x6302 : //PERSO : moitie montee bosse
+							vit_roue = 14;
+							filtre_inf = 470;
+							filtre_sup = 530;
+							break;
+
+						case 0x6380 :	//PERSO : moitie descente bosse
+							filtre_inf = 0;
+							filtre_sup = 1000;
+							vit_roue = vit_max;
+							break;
+
+						case 0x6320 :	//PERSO : avant saut
+							rotation_roues_strat = 0; //blocage de langle des roues
+							vit_roue = 42;
+							break;
+
+	                    case 0x6304 :	//PERSO : apres saut
+	                        vit_roue = 8;
+	                        filtre_sup = 1600;
+	                        rotation_roues_strat = 1; //deblocage de langle des roues
+							K_roue = 1.0;
+							break;
+
+						case 0x5604 :	//Fin 3eme virage
+							filtre_inf = 100;
+							filtre_sup = 900;
+							vit_roue = 12;
+							K_roue = 1.0;
+							break;
+
+						case 0x4304 :	//Entree 4eme virage
+							filtre_inf = 0;
+							filtre_sup = 1000;
+							vit_roue = vit_max;
+							if (pseudo_sem == 1){
+	                            nbre_tours++;
+	                            pseudo_sem = 0;
+							}
+							break;
+					}//END_SWITCH_capteur
+		            break;
+			}//END_SWITCH_couleur
+		}//END_ELSE
+		last_vitesse = vit_roue;
+		
 		dly_tsk(10);
 	}
 	
@@ -330,15 +590,6 @@
 		rotation_roues_asserv = 1;
 	}
 	ang_roue = rotation_roues_asserv*rotation_roues_strat*(K_roue*(distance_mur-compar_mur));
-/*
-	//Detection de couleur
-	//8 bits de poids fort : couleur ('C','R','J','B' ou 'V')
-	if((capteur && 0x0100) == 0x0100){} //Capteur cyan ? //********
-    if((capteur && 0x0200) == 0x0200){} //Capteur rouge ?
-    if((capteur && 0x0300) == 0x0300){} //Capteur jaune ?
-    if((capteur && 0x0400) == 0x0400){} //Capteur bleu ?
-    if((capteur && 0x0500) == 0x0500){} //Capteur vert ?
-	*/
 }
 
 void asserv_roue(VP_INT stacd){
@@ -409,12 +660,10 @@
 
 	req.data.id = id_periph;
 	req.data.rtr = 1; // envoie d'une requete de lecture
-	//periph[ADDR(id_periph)].ev = 0x01; //declenche un evenement quand mise a jour du peripherique id_periph
-	dly_tsk(5);
+	snd_dtq(CanTx, req.msg); // attente de la reponse
+	dly_tsk(10);
 
-	snd_dtq(CanTx, req.msg); // attente de la reponse
-	//wai_flg(ev_periph, 0x01, TWF_ANDW, &flag);
-	//periph[ADDR(id_periph)].ev = 0x00;
+	
 	val = periph[ADDR(id_periph)].val;
 	return val;
 }
