Projet

Général

Profil

« Précédent | Suivant » 

Révision 367

Ajouté par anmaincent il y a plus de 6 ans

circuit noir terminé avec une facilité déconcertante

Voir les différences:

branch/maincent/tp_info6/Emb_App/programme_principal_etud.c
}
}
short capteur;
void zone(){ // vrai pour toutes les pistes
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(25);
}
}
short alpha;
void tourelle(){ // vrai pour toutes les pistes
while(1)
{
short k=1; //Gain du correcteur P
//lecture de la position de la tourelle
CanFrame req,comm;
......
//Attente de la reponse
wai_flg (ev_periph, 0x01, TWF_ANDW, &flag);
alpha=periph[ADDR('R')].val;
//Commande vitesse de la tourelle
comm.data.id='T';
comm.data.rtr=0; //indique une ?criture
comm.data.val=k*(450-alpha);
snd_dtq(CanTx, comm.msg);
dly_tsk(50);
//Commande vitesse de la tourelle
comm.data.id='T';
comm.data.rtr=0; //indique une ?criture
comm.data.val=k*(450-alpha);
snd_dtq(CanTx, comm.msg);
dly_tsk(50);
}
}
short capteur;
void zone(){ // vrai pour toutes les pistes
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(25);
}
}
unsigned short distance;
unsigned short distance1;
void dist(){ // vrai pour toutes les pistes
......
else // piste noir
{
if (distance > 2000 ) // || ) //bosse piste rouge
if (capteur == 0x6afe) // 1er tonneau
{
// si trou dans la barriere ou zonesaut
if (distance > 2000 )
{
// si trou dans la barriere ou zonesaut
}
else
{
distance1=distance; //cas normal: si on est au milieu de la piste angle des roues ? 0
}
comm.data.val=s*(distance1-450);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if (capteur == 0x6aff)
else if (capteur == 0x6afd) //2eme tonneau
{
// dly_tsk(1500);
}
if (distance > 2000 )
{
// si trou dans la barriere ou zonesaut
}
else
{
distance1=distance; //cas normal: si on est au milieu de la piste angle des roues ? 0
}
comm.data.val=s*(distance1-300);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if (capteur == 0x4a01) // 1er virage
{
if (distance > 2000 )
{
// si trou dans la barriere ou zonesaut
}
else
{
distance1=distance; //cas normal: si on est au milieu de la piste angle des roues ? 0
}
comm.data.val=s*(distance1-250);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if (capteur == 0x5602) // bosse
{
if (distance > 2000 )
{
// si trou dans la barriere ou zonesaut
}
else
{
distance1=distance; //cas normal: si on est au milieu de la piste angle des roues ? 0
}
comm.data.val=s*(distance1-145);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else
{
distance1=distance; //cas normal: si on est au milieu de la piste angle des roues ? 0
}
comm.data.val=s*(distance1-706);
snd_dtq(CanTx, comm.msg);
dly_tsk(20);
if (distance > 2000 || capteur == 0x6aff || capteur == 0x5601 ) //bosse piste rouge
{
// si trou dans la barriere ou zonesaut
}
else
{
distance1=distance; //cas normal: si on est au milieu de la piste angle des roues ? 0
}
comm.data.val=s*(distance1-750);
snd_dtq(CanTx, comm.msg);
dly_tsk(20);
}
}
......
break;
case 0x0004 : // pour piste noir
if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5604 || capteur == 0x5605)
if ( capteur == 0x5603 || capteur == 0x5605)
{
requete.data.val=60; // ligne droite
requete.data.val=50; // ligne droite
}
else if (capteur == 0x6aff)
else if (capteur == 0x6afd || capteur == 0x6afe)
{
requete.data.val=45; //bosse
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=25; //virage
requete.data.val=15; //virage
}
break;

Formats disponibles : Unified diff