Révision 456
Ajouté par casotty il y a plus de 6 ans
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
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