Projet

Général

Profil

« Précédent | Suivant » 

Révision 226

Ajouté par axfont il y a plus de 6 ans

saut piste rouge passé

Voir les différences:

branch/font/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0022
RESET=ff0026
branch/font/Emb_App/programme_principal_etud.c
// disponible. 0xab avec a-> nombre de couleurs bien plac?es et b -> couleurs pr?sentes mais mal plac?es.
//'I'/73/Ox49 : D?finition du nom du v?hicule. Doit d?buter par le caract?re '#' et entraine le chargement de la configuration de piste
// correspondant au nom du v?hicule si le nom se termine par '*'
#define green 0x0056
#define red 0x0052
#define blue 0x0043
#define cyan 0x0042
const int distance_bord = 700; //distance du bord souhait?e
const int angle_tourelle = 450; //angle tourelle souhait?
int alpha; //angle tourelle
int distance; //distance du bord mesur?e
int distance1;
int vitesse = 65; //vitesse souhait?e
int vitesse = 45; //vitesse souhait?e
int vitesse_virage = 25; //vitesse pendant un virage souhait?e
int angle_roue;
int kroue = 1;
......
int num_piste;
int num_piste1;
int capteur;
int couleur_capteur;
int f_capt;
int s_capt;
int a = 0;
char saut = 0;
void lecture_telemetre(){
CanFrame reponsed, requeted;
......
wai_flg(ev_periph, 0x03, TWF_ANDW, &flag); //Attente de lecture de l'angle des roues
comm.data.rtr = 0;
angle_roue = kroue * (distance - distance_bord); //Asservissement de l'angle
if(saut == 0) angle_roue = kroue * (distance - distance_bord); //Asservissement de l'angle
else angle_roue = 0;
comm.data.val = angle_roue;
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
......
snd_dtq(CanTx, requete.msg);
wai_flg(ev_periph, 0x04, TWF_ANDW, &flag); //Attente de la r?ponse
num_piste = periph[ADDR('M')].val; //acquisition num?ro piste
num_piste1 = num_piste && 0x0fff;
}
void lecture_capteur(){
......
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
couleur_capteur = capteur >> 8;
dly_tsk(5);
}
}
void gestion_saut (){
CanFrame comm;
while(1){
if(num_piste1 == 1){ //d?tection piste rouge
if( capteur == 0x5603 ){
saut = 1;
}
else {
saut = 0;
}
}
dly_tsk(2);
}
}
......
can_init();
clavier_init(1);
capture_init();
sta_tsk(ID_periph_rx);
sta_tsk(ID_lecture_piste);
sta_tsk(ID_lecture_capteur);
......
sta_cyc(ID_acqui);
sta_tsk(ID_tsk_asserv1);
sta_tsk(ID_lecture_telemetre);
sta_tsk(ID_asservissement_roue);
sta_tsk(ID_asservissement_roue);
sta_tsk(ID_gestion_saut);
while(1)
{
branch/font/Emb_App/conf_noyau.cfg
name = ID_lecture_telemetre;
stack_size = 512;
stack_section = stack;
priority = 4;
priority = 3;
initial_start = OFF;
exinf = 0x0;
};
......
name = ID_asservissement_roue;
stack_size = 512;
stack_section = stack;
priority = 4;
priority = 3;
initial_start = OFF;
exinf = 0x0;
};

Formats disponibles : Unified diff