Révision 476
Ajouté par audercoux il y a plus de 6 ans
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
Les quatres pistes fonctionne