Projet

Général

Profil

« Précédent | Suivant » 

Révision 378

Ajouté par anmaincent il y a plus de 6 ans

amelioration programme et vitesse vert

Voir les différences:

branch/maincent/tp_info6/Emb_App/programme_principal_etud.c
short piste1;
short selecpiste;
short modecourse;
short feuvert;
void piste(){ //detecte la couleur de la piste
while(1)
{
......
wai_flg (ev_periph, 0x04, TWF_ANDW, &flag);
piste1=periph[ADDR('M')].val;
selecpiste = piste1 & 0x00FF;
modecourse = piste1 & 0xFF00;
modecourse = piste1 & 0x7F00;
feuvert = piste1 & 0x8000;
dly_tsk(25);
}
}
short even;
short tourterm;
void evenement(){ //detecte la couleur de la piste
while(1)
{
//lecture de levenement
CanFrame requet;
UINT flag;
requet.data.id='E'; //lecture des evenements
requet.data.rtr=1; //indique une lecture
periph[ADDR('E')].ev=0x05;
snd_dtq(CanTx, requet.msg);
//Attente de la reponse
wai_flg (ev_periph, 0x05, TWF_ANDW, &flag);
even=periph[ADDR('E')].val;
tourterm=even & 0x0020;
dly_tsk(25);
}
}
short capteur;
void zone(){ // vrai pour toutes les pistes
while(1)
......
{
distance1=distance; //cas normal: si on est au milieu de la piste angle des roues ? 0
}
comm.data.val=s*(distance1-145);
comm.data.val=s*(distance1-147);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
......
}
short nbtour;
void vitesse(){
dly_tsk(5000);
......
//commande vitesse vehicule
requete.data.id='V';
requete.data.rtr=0; //indique une ecriture
switch (selecpiste){
case 0x0001 : // pour piste verte
if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5604 || capteur == 0x5605 || capteur == 0x5601 )
{
requete.data.val=70; // ligne droite
}
else
{
requete.data.val=40; //virage
}
break;
if (p0_4==1 && ( modecourse == 0x0300 || modecourse == 0x0200 || nbtour > 4 ))
{
switch (selecpiste)
{
case 0x0001 : // pour piste verte
case 0x0002 : // pour piste bleu
if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5604 || capteur == 0x5605 )
{
requete.data.val=100; // ligne droite
}
else if (capteur == 0x5601 )
{
requete.data.val=100; // pr? virage
nbtour = nbtour +1;
}
else if (capteur == 0x6aff )
{
requete.data.val=60; // pr? virage
}
else if (capteur == 0x6a00 )
{
requete.data.val=85; // pr? virage
}
else
{
requete.data.val=40; //virage
}
break;
case 0x0002 : // pour piste bleu
if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5605 || capteur == 0x5601 )
{
requete.data.val=60; // ligne droite
}
else if (capteur == 0x5604)
{
requete.data.val=50; //bosse
}
else
{
requete.data.val=25; //virage
}
break;
if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5605 || capteur == 0x5601 )
{
requete.data.val=60; // ligne droite
}
else if (capteur == 0x5604)
{
requete.data.val=50; //bosse
}
else
{
requete.data.val=25; //virage
}
break;
case 0x0003 : // pour piste rouge
if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5604 || capteur == 0x5605)
{
requete.data.val=60; // ligne droite
}
else if (capteur == 0x6aff)
{
requete.data.val=45; //bosse
}
else if (capteur == 0x5601)
{
requete.data.val=35; // petit virage entr?e
}
else if (capteur == 0x4203)
{
requete.data.val=10; // virage apr?s saut
}
else
{
requete.data.val=25; //virage
}
break;
case 0x0004 : // pour piste noir
if ( capteur == 0x5603 || capteur == 0x5605)
case 0x0003 : // pour piste rouge
if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5604 || capteur == 0x5605)
{
requete.data.val=50; // ligne droite
requete.data.val=60; // ligne droite
}
else if (capteur == 0x6afd || capteur == 0x6afe)
else if (capteur == 0x6aff)
{
requete.data.val=20; //bosse
requete.data.val=45; //bosse
}
else if (capteur == 0x5601)
{
requete.data.val=35; // petit virage entr?e
}
else if (capteur == 0x6aff)
{
requete.data.val=43; // virage apr?s saut
}
else if (capteur == 0x4203)
{
requete.data.val=10; // virage apr?s saut
}
else
{
requete.data.val=15; //virage
requete.data.val=25; //virage
}
break;
break;
case 0x0004 : // pour piste noir
if ( capteur == 0x5603 || capteur == 0x5605)
{
requete.data.val=50; // ligne droite
}
else if (capteur == 0x6afd || capteur == 0x6afe)
{
requete.data.val=20; //bosse
}
else if (capteur == 0x5601)
{
requete.data.val=35; // petit virage entr?e
}
else if (capteur == 0x6aff)
{
requete.data.val=43; // virage apr?s saut
}
else if (capteur == 0x4203)
{
requete.data.val=10; // virage apr?s saut
}
else
{
requete.data.val=15; //virage
}
break;
}
}
else
{
requete.data.val=0;
}
// requete.data.val=25; //vitesse constante
......
sta_tsk(ID_piste);
sta_tsk(ID_even);
sta_tsk(ID_tourelle);
sta_tsk(ID_dist);
sta_tsk(ID_roue);
......
while(1)
{
dly_tsk(800);
dly_tsk(800);
LED_V =1;
}
}
branch/maincent/tp_info6/Emb_App/conf_noyau.cfg
task[]{
entry_address = evenement();
name = ID_even;
stack_size = 512;
stack_section = stack;
priority = 5;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = tourelle();
name = ID_tourelle;
stack_size = 512;

Formats disponibles : Unified diff