Révision 290
Ajouté par axfont il y a plus de 6 ans
branch/font/Emb_App/programme_principal_etud.c | ||
---|---|---|
int distance1;
|
||
int vitesse = 60; //vitesse souhait?e
|
||
int vitesse_virage = 25; //vitesse pendant un virage souhait?e
|
||
int vitesse_montee = 25;
|
||
int angle_roue;
|
||
int kroue = 1;
|
||
int k = 1;
|
||
int num_piste;
|
||
int num_piste1;
|
||
int capteur;
|
||
int vitesse_montee = 45; //vitesse pendant la mont?e piste bleu
|
||
int vitesse_saut = 45; //vitesse pendant le saut piste rouge
|
||
int vitesse_recep = 10;
|
||
int angle_roue = 0;
|
||
int kroue = 1; //coefficient asservissement tourelle
|
||
int ktour = 1; //coefficient asservissement roues
|
||
int num_piste; //valeur du p?riph?rique 'M'
|
||
int num_piste1; //num?ro de la piste
|
||
int capteur; //valeur du dernier capteur franchi
|
||
int a = 0;
|
||
char saut = 0;
|
||
int feu;
|
||
... | ... | |
int montee = 0;
|
||
|
||
void lecture_telemetre(){
|
||
CanFrame reponsed, requeted;
|
||
CanFrame requete;
|
||
UINT flag;
|
||
|
||
while(1){
|
||
//Lecture distance mesur?e
|
||
requeted.data.id = 'U';
|
||
requeted.data.rtr = 1; //requete de lecture
|
||
requete.data.id = 'U';
|
||
requete.data.rtr = 1; //requete de lecture
|
||
periph[ADDR('U')].ev = 0x02;
|
||
snd_dtq(CanTx, requeted.msg);
|
||
snd_dtq(CanTx, requete.msg);
|
||
wai_flg(ev_periph, 0x02, TWF_ANDW, &flag); //Attente de lecture
|
||
distance1 = periph[ADDR('U')].val;
|
||
if(distance1 > 2000){}
|
||
if(distance1 > 1500 || distance1 < -1500){}
|
||
else {
|
||
distance = distance1;
|
||
}
|
||
dly_tsk(5);
|
||
dly_tsk(6);
|
||
}
|
||
}
|
||
|
||
... | ... | |
periph[ADDR('D')].ev = 0x03;
|
||
snd_dtq(CanTx, requete.msg);
|
||
wai_flg(ev_periph, 0x03, TWF_ANDW, &flag); //Attente de lecture de l'angle des roues
|
||
|
||
comm.data.rtr = 0;
|
||
if(saut == 0){ //Aucun saut franchi
|
||
angle_roue = kroue * (distance - distance_bord); //Asservissement de l'angle
|
||
//if(saut == 0){
|
||
angle_roue = kroue * (distance - distance_bord); //Asservissement de l'angle
|
||
//}
|
||
if(saut == 1) {
|
||
angle_roue = 0;
|
||
}
|
||
else angle_roue = 0;
|
||
comm.data.val = angle_roue;
|
||
snd_dtq(CanTx, comm.msg);
|
||
dly_tsk(5);
|
||
dly_tsk(6);
|
||
}
|
||
}
|
||
|
||
... | ... | |
//asservissement en vitesse de rotation de la tourelle
|
||
comm.data.id = 'T';
|
||
comm.data.rtr = 0;
|
||
comm.data.val = k * (angle_tourelle - alpha);
|
||
comm.data.val = ktour * (angle_tourelle - alpha);
|
||
snd_dtq(CanTx, comm.msg);
|
||
dly_tsk(5);
|
||
}
|
||
... | ... | |
snd_dtq(CanTx, requete.msg);
|
||
wai_flg(ev_periph, 0x05, TWF_ANDW, &flag); //Attente de la r?ponse
|
||
capteur = periph[ADDR('C')].val; //acquisition du dernier capteur franchi
|
||
dly_tsk(5);
|
||
dly_tsk(6);
|
||
}
|
||
}
|
||
|
||
... | ... | |
|
||
while(1){
|
||
if(num_piste1 == 2){ //d?tection piste rouge
|
||
if( capteur == 0x5604 ){ //d?tection capteur avant saut
|
||
if( capteur == 0x5604 ){ //d?tection capteur avant montee
|
||
montee = 1;
|
||
}
|
||
else {
|
||
montee = 0;
|
||
}
|
||
}
|
||
dly_tsk(5);
|
||
dly_tsk(6);
|
||
}
|
||
}
|
||
|
||
... | ... | |
void gestion_saut (){
|
||
|
||
while(1){
|
||
if(num_piste1 == 7){ //d?tection piste rouge
|
||
if(num_piste1 == 3){ //d?tection piste rouge
|
||
if( capteur == 0x5603 ){ //d?tection capteur avant saut
|
||
dly_tsk(1000);
|
||
saut = 1;
|
||
}
|
||
else {
|
||
saut = 0;
|
||
}
|
||
}
|
||
dly_tsk(5);
|
||
dly_tsk(6);
|
||
}
|
||
}
|
||
|
||
... | ... | |
wai_flg(ev_periph, 0x06, TWF_ANDW, &flag); //Attente de la r?ponse
|
||
feu = periph[ADDR('M')].val; //acquisition du dernier capteur franchi
|
||
feuv = feu & 0x8000;
|
||
dly_tsk(3);
|
||
dly_tsk(6);
|
||
}
|
||
}
|
||
|
||
... | ... | |
snd_dtq(CanTx, comm.msg);
|
||
|
||
while(1){
|
||
comm.data.id = 'V';
|
||
comm.data.rtr = 0;
|
||
if(angle_roue > 40 || angle_roue < -40){ //ralentissement de la voiture si angle demand? trop grand
|
||
comm.data.val = vitesse_virage;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
else{
|
||
comm.data.val = vitesse;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
if(montee == 1){
|
||
comm.data.val = vitesse_montee;
|
||
snd_dtq(CanTx, comm.msg);
|
||
a = 1;
|
||
}
|
||
dly_tsk(3);
|
||
comm.data.id = 'V';
|
||
comm.data.rtr = 0;
|
||
if(angle_roue > 40 || angle_roue < -40){ //ralentissement de la voiture si angle demand? trop grand
|
||
comm.data.val = vitesse_virage;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
else{
|
||
comm.data.val = vitesse;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
if(montee == 1){
|
||
comm.data.val = vitesse_montee;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
if(saut == 1){
|
||
comm.data.val = vitesse_saut;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
if(capteur == 0x4203 && num_piste1 == 3){
|
||
comm.data.val = vitesse_recep;
|
||
snd_dtq(CanTx, comm.msg);
|
||
}
|
||
dly_tsk(6);
|
||
}
|
||
//} acolade if d?part feu vert
|
||
}
|
Formats disponibles : Unified diff
piste rouge passée saut géré