Projet

Général

Profil

« Précédent | Suivant » 

Révision 456

Ajouté par casotty il y a plus de 6 ans

Amelioration du temps de toutes les pistes qui passent toutes
Ajout detection de couleurs de capteurs, arret au bout de 3 tours, arret durgence, lcd

Voir les différences:

branch/sotty/Emb_App.tws
[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]
branch/sotty/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff003e
RESET=ff01e2
branch/sotty/Emb_App/programme_principal_etud.c
//'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'
......
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;
......
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
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();
......
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);
}
......
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){
......
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;
}

Formats disponibles : Unified diff