Projet

Général

Profil

« Précédent | Suivant » 

Révision 323

Ajouté par vidaval il y a plus de 6 ans

La piste rouge est passée en 3 tours mais un peu sur du bluff juste en utilisant les capteurs de la route

Voir les différences:

branch/daval/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0028
RESET=ff0024
branch/daval/Emb_App/programme_principal_etud.c
//Asservissement de la voiture
int distance_mur=700; // Consigne qui permet d etre bien centr? sur la route
char C=1; // Gain asservissment des roues
char vitesse_rapide= 55;//Commande de vitesse que l'on envoie
char vitesse_lente=25;
char vitesse_rapide= 40;//Commande de vitesse que l'on envoie
char vitesse_lente=20;
int distance_mesure=0;
int cap;
......
int capteur;
char couleur;
char numero;
void asservissement_tourelle()
{
CanFrame commande;
......
vitesse.data.rtr=0; //Indique une ecritur
while(1)
{
if(cap<-30 || cap>30)
if(cap<-30 || cap>30) //Gestion vitesse dans les virages
{
vitesse.data.val=vitesse_lente;
snd_dtq (CanTx,vitesse.msg);
......
vitesse.data.val=vitesse_rapide;
snd_dtq (CanTx,vitesse.msg);
}
if(couleur=='V' && numero == 0x03) // Gestion saut piste rouge
{
vitesse.data.val=47;
snd_dtq (CanTx,vitesse.msg);
}
if(couleur=='B' && numero ==0x03)
{
vitesse.data.val=10;
snd_dtq (CanTx,vitesse.msg);
}
dly_tsk(10);
}
......
periph[ADDR('U')].ev= 0x02 ; //L evenement est declenche a chaque fois que la valeur du periph U et mise ? jour
snd_dtq(CanTx, requete_dist.msg);
wai_flg (ev_periph, 0x02, TWF_ANDW, &flag); //Attente lecture
//distance_mesure=periph[ADDR('U')].val; //Cas de la piste verte
if(periph[ADDR('U')].val > 2000) //Pour eviter les trou dans la barriere
{
......
cap=C*(distance_mesure-distance_mur);
commande.data.val= cap;
snd_dtq(CanTx, commande.msg);
if(couleur=='V' && numero == 0x03)
{
cap=0;
snd_dtq (CanTx,commande.msg);
}
dly_tsk(5);
}
}
void detection_capteur(){
CanFrame requete;
UINT flag;
while(1)
{
requete.data.id = 'C';
requete.data.rtr = 1;
periph[ADDR('C')].ev = 0x03;
snd_dtq(CanTx, requete.msg);
wai_flg(ev_periph, 0x03, TWF_ANDW, &flag);
capteur = periph[ADDR('C')].val;
couleur = capteur >> 8;
dly_tsk(10);
CanFrame requete;
UINT flag;
while(1)
{
requete.data.id = 'C'; //On lit la valeur du periph C qui est l'information sur le capteur
requete.data.rtr = 1;
periph[ADDR('C')].ev = 0x03; //Mis ? jour ? chaque foir que l'on passe un capteur laser
snd_dtq(CanTx, requete.msg);
wai_flg(ev_periph, 0x03, TWF_ANDW, &flag);
capteur = periph[ADDR('C')].val;
couleur = capteur >> 8; //On decale pour avoir les 8 bits de poids forts : info sur la couleur
numero = capteur ;
dly_tsk(10);
}
}
......
ports_mcu();
lcd_init();
periph_init();
periph_nom("#PAVALk17!!!!");
periph_nom("#PAVAL2k17");
can_init();
clavier_init(1);
......
sta_tsk(ID_asservissement_tourelle);
sta_tsk(ID_distance_bord);
sta_tsk(ID_asserv_cap);
sta_tsk(ID_avance);
sta_tsk(ID_avance);
sta_tsk(ID_detection_capteur);
while(1);
......
void acqui()
{
LED_V=!LED_V;
LED_V=!LED_V;
LED_R=!LED_R;
LED_J=!LED_J;
}

Formats disponibles : Unified diff