Projet

Général

Profil

« Précédent | Suivant » 

Révision 476

Ajouté par audercoux il y a plus de 6 ans

Les quatres pistes fonctionne

Voir les différences:

branch/decroux/Emb_App/programme_principal_etud.c
unsigned int capt=0x0000;
unsigned int Mode;
int cpt=0;
unsigned int stop;
// Tache qui met la tourelle a 45degres
void asservissement_tourelle()
{
......
CanFrame commTourel;
CanFrame requeteTourel;
// Lectre de l'angle
requeteTourel.data.id='R'; //Lecture de l'angle effecif de la tourelle portant le t?l?mtre
requeteTourel.data.rtr=1; // Indiquation d'une requ?te de lecture
snd_dtq (CanTx,requeteTourel.msg); // Interrogation du peripherique
alpha=periph[ADDR('R')].val; //Contient la derniere valeur renvoyee par le simulateur
periph[ADDR('R')].maj; // Incremente a chaque reception
//Corection de l'angle
commTourel.data.id='T'; //Commade en vitesse de la tourelle poant le t?l?metre
commTourel.data.rtr=0;
commTourel.data.val=kt*(450-alpha); //Corecteur propotionel
snd_dtq (CanTx,commTourel.msg);
if(Bp_M==1)
{
alpha=kt*((2*(ad01-512))-alpha); // si bouton poussoir du milieu activer
}
else
{
requeteTourel.data.id='R'; //Lecture de l'angle effecif de la tourelle portant le t?l?mtre
requeteTourel.data.rtr=1; // Indiquation d'une requ?te de lecture
snd_dtq (CanTx,requeteTourel.msg); // Interrogation du peripherique
alpha=periph[ADDR('R')].val; //Contient la derniere valeur renvoyee par le simulateur
periph[ADDR('R')].maj; // Incremente a chaque reception
//Corection de l'angle
commTourel.data.id='T'; //Commade en vitesse de la tourelle poant le t?l?metre
commTourel.data.rtr=0;
commTourel.data.val=kt*(450-alpha); //Corecteur propotionel
snd_dtq (CanTx,commTourel.msg);
}
dly_tsk(10);
}
}
......
periph[ADDR('U')].maj; // Incremente a chaque reception
//Assevicement
if(Mode==0x8304 || Mode==0x0304)//On est sur la piste noir
if(Mode==0x8204 || Mode==0x0104)//On est sur la piste noir
{
if(capt==0x7608)// Apr?s le saut
{
......
commRoues.data.val=kr*(dis-700); // Correction de la disance
snd_dtq(CanTx,commRoues.msg);
}
else if(dis>5000 || dis<400 || capt==0x7210) //Pour passer les trous et les tonneau
else if(dis>5000 || dis<500 || capt==0x7210) //Pour passer les trous et les tonneau
{
LED_J=1;
dly_tsk(100);
LED_J=0;
commRoues.data.id='D'; // Commande de l'angle des roues
commRoues.data.rtr=0; //Indique une requete d'?criture
commRoues.data.val= 0; // Correction de la disance
......
snd_dtq(CanTx,commRoues.msg);
}
}
else
else if(Mode==0x8203 || Mode==0x0103) //On est sur la piste rouge
{
if(dis>1000 ) //Pour passer les trous
if(capt==0x6a08)
{
commRoues.data.id='D'; // Commande de l'angle des roues
commRoues.data.rtr=0; //Indique une requete d'?criture
commRoues.data.val= 0; // Correction de la disance
snd_dtq(CanTx,commRoues.msg);
}
else if(dis>1000 ) //Pour passer les trous
{
LED_J=1;
dly_tsk(100);
LED_J=0;
commRoues.data.id='D'; // Commande de l'angle des roues
commRoues.data.rtr=0; //Indique une requete d'?criture
commRoues.data.val= 0; // Correction de la disance
......
snd_dtq(CanTx,commRoues.msg);
}
}
else
{
if(dis>2000 ) //Pour passer les trous
{
LED_J=1;
dly_tsk(100);
LED_J=0;
commRoues.data.id='D'; // Commande de l'angle des roues
commRoues.data.rtr=0; //Indique une requete d'?criture
commRoues.data.val= 0; // Correction de la disance
snd_dtq(CanTx,commRoues.msg);
}
else
{
commRoues.data.id='D'; // Commande de l'angle des roues
commRoues.data.rtr=0; //Indique une requete d'?criture
commRoues.data.val=kr*(dis-700); // Correction de la disance
snd_dtq(CanTx,commRoues.msg);
}
}
dly_tsk(10);
}
}
//Fonction d'arret urgence
void arreturgence(void)
{
CanFrame commVit;
stop=Bp_G;
LED_R=0;
while (stop==1)
{
stop=Bp_G;
commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=0;
snd_dtq(CanTx, commVit.msg);
LED_R=1;
}
}
//Fonctin vitesse noir
void vitesse4(unsigned int valcapt)
int vitesse4(unsigned int valcapt)
{
CanFrame commVit;
if( capt==0x4a01||capt==0x6208 ||capt==0x7608 ||capt==0x7620) // Rallentissement pr?s du tonneau, pour la bosse et apr?s le saut
......
commVit.data.rtr=0;
commVit.data.val=42;
snd_dtq (CanTx,commVit.msg);
}
else if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
{
commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=ad01/10;
snd_dtq (CanTx,commVit.msg);
}
else if(valcapt==0x5605)
{
cpt=cpt+1;
}
else
{ commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=25; //Reprise de vitesse une fois la voiture stabilis? piste rouge
snd_dtq (CanTx,commVit.msg);
}
}
return cpt;
}
//Fonction vitesse rouge
void vitesse3(unsigned int valcapt)
int vitesse3(unsigned int valcapt)
{
CanFrame commVit;
//vitesse pour passer le tramplin piste rouge
//vitesse pour passer le tramplin piste rouge
if(valcapt== 0x6a08)
{
commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=45;
snd_dtq (CanTx,commVit.msg);
}
}
//Ralentissemet apr?s tramplin piste rouge
else if(valcapt==0x7608||valcapt==0x4203)
{
......
commVit.data.rtr=0;
commVit.data.val=15;
snd_dtq (CanTx,commVit.msg);
}
}
else if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
{
commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=ad01/10;
snd_dtq (CanTx,commVit.msg);
}
else if(valcapt==0x5605)
{
cpt=cpt+1;
}
else
{
commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=30; //Reprise de vitesse une fois la voiture stabilis? piste rouge
snd_dtq (CanTx,commVit.msg);
}
}
return cpt;
}
......
snd_dtq (CanTx,commVit.msg);
return cpt;
}
else if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
{
commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=ad01/10;
snd_dtq (CanTx,commVit.msg);
}
else
{
commVit.data.id='V';
commVit .data.rtr=0;
commVit .data.rtr=0;
commVit.data.val=30;
snd_dtq (CanTx,commVit.msg);
}
}
else
{
commVit.data.id='V';
commVit .data.rtr=0;
commVit.data.val=30;
snd_dtq (CanTx,commVit.msg);
if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
{
commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=ad01/10;
snd_dtq (CanTx,commVit.msg);
}
else
{
commVit.data.id='V';
commVit .data.rtr=0;
commVit.data.val=30;
snd_dtq (CanTx,commVit.msg);
}
}
return cpt;
......
if(capt==0x5605)
{
cpt=cpt+1;
if(cpt==9)
{
commVit.data.id='V';
commVit .data.rtr=0;
commVit.data.val=0;
snd_dtq (CanTx,commVit.msg);
return cpt;
}
else
{
commVit.data.id='V';
commVit .data.rtr=0;
commVit.data.val=42;
snd_dtq (CanTx,commVit.msg);
}
}
else if(Bp_M==1)//R?glage avec les potentiom?te si touche milieu est appuy?
{
commVit.data.id='V';
commVit.data.rtr=0;
commVit.data.val=ad01/10;
snd_dtq (CanTx,commVit.msg);
}
else
{
commVit.data.id='V';
......
commVit.data.val=42;
snd_dtq (CanTx,commVit.msg);
}
return cpt;
}
......
void main()
{
CanFrame commVit;
ports_mcu();
lcd_init();
periph_init();
......
sta_tsk(ID_asservissement_roues);
while(1)
{
{
arreturgence();
Mode= lecture_piste();
if(Mode==0x8304 || Mode==0x0304)//On est sur la piste noir
if(Mode==0x8204)//On est sur la piste noir
{
capt=lecture_Capteur();
vitesse4(capt);
if(cpt==24)
{
commVit.data.id='V';
commVit .data.rtr=0;
commVit.data.val=0;
snd_dtq (CanTx,commVit.msg);
return;
}
}
else if(Mode==0x8303 || Mode==0x0303) //O est sur la piste rouge
else if(Mode==0x8203) //O est sur la piste rouge
{
capt=lecture_Capteur();
vitesse3(capt);
cpt=vitesse3(capt);
if(cpt==24)
{
commVit.data.id='V';
commVit .data.rtr=0;
commVit.data.val=0;
snd_dtq (CanTx,commVit.msg);
return;
}
}
else if(Mode==0x8302 || Mode==0x0302) //On est dur la piste bleu
else if(Mode==0x8202) //On est dur la piste bleu
{
capt=lecture_Capteur();
cpt=vitesse2(capt);
......
return ;
}
}
else if(Mode==0x8301 || Mode==0x0301)//On est sur la piste verte
else if(Mode==0x8201)//On est sur la piste verte
{
capt=lecture_Capteur();
cpt=vitesse1(capt);
if (cpt==9)//Compteur pour arreter la voiture a 3 eme tour
{
return ;
if (cpt==16)//Compteur pour arreter la voiture a 3 eme tour
{commVit.data.id='V';
commVit .data.rtr=0;
commVit.data.val=0;
snd_dtq (CanTx,commVit.msg);
return;;
}
}
else
{
commVit.data.id='V';
commVit .data.rtr=0;
commVit.data.val=0;
snd_dtq (CanTx,commVit.msg);
}
LED_J=0;
dly_tsk(100);
dly_tsk(100);
}
}

Formats disponibles : Unified diff