Projet

Général

Profil

« Précédent | Suivant » 

Révision 299

Ajouté par codiagne il y a plus de 6 ans

Piste rouge entammée, reste à etre achevée

Voir les différences:

branch/diagne/Emb_App/programme_principal_etud.c
short alpha;
short vitesse, longueur;
short distance, new_distance;
short distance, new_distance, capt;
void Asserv0(){
......
}
//Pour lire les valeurs des capteurs
void Capteur(){
CanFrame req;
UINT flag;
while(1)
{
req.data.id='C';
req.data.rtr=1; //Lecture de la valeur du capteur
periph[ADDR('C')].ev=0x03;
snd_dtq(CanTx,req.msg);
wai_flg(ev_periph, 0x03, TWF_ANDW,&flag);
capt=periph[ADDR('C')].val;
dly_tsk(100);
}
}
void regulation_roue(){
CanFrame req,reponse,comm;
UINT flag;
......
{
req.data.id='U'; //lecture distance mesur?e par le t?l?metre
req.data.rtr=1; //requ?te de lecture
snd_dtq(CanRx, req.msg);
snd_dtq(CanTx, req.msg);
//Attente de la r?ponse
......
comm.data.rtr=0;
//Pour la piste verte: comm.data.val= -(450-distance)
//Pour eviter les trous de la piste bleue et garder le vehicule au milieu de la piste
//Pour eviter les trous de la piste bleue et garder le vehicule au milieu de la piste
if (distance >1000){ //On compare la distance mesur?e par le telemtetre
new_distance=715;
}
else {
new_distance=distance;
}
comm.data.val=1*(new_distance-715); // On la garde bien au milieu de la piste
if (capt=0x5603) //valeur du 3eme capteur vert
{
new_distance=715;
}
snd_dtq(CanTx,comm.msg);
dly_tsk(100);
else
{
if (distance >1000)//On compare la distance mesur?e par le telemtetre
{
new_distance=715;
}
else {
new_distance=distance;
}
}
comm.data.val=1*(new_distance-715); // On la garde bien au milieu de la piste
snd_dtq(CanTx,comm.msg);
dly_tsk(100);
}
}
void roue_piste_rouge()
{
}
void Avancer(){
CanFrame req;
dly_tsk(6000);
req.data.id='V';
req.data.rtr=0;
req.data.val=15;
snd_dtq(CanTx,req.msg);
while(1)
{
CanFrame req;
req.data.id='V';
req.data.rtr=0;
if (capt=0x5603)
{
req.data.val=45;
}
else
{
req.data.val=15;
}
snd_dtq(CanTx,req.msg);
}
}
......
sta_tsk(ID_periph_rx);
sta_tsk(ID_Asserv0);
sta_tsk(ID_Avancer);
sta_tsk(ID_roue);
sta_tsk(ID_roue);
sta_tsk(ID_capteur);
// sta_tsk(ID_roue_rouge);
while(1)
{
{
LED_J=1;
dly_tsk(100);
LED_J=0;
dly_tsk(100);
}
}
}
branch/diagne/Emb_App/conf_noyau.cfg
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = Avancer();
name = ID_Avancer;
......
exinf = 0x0;
};
task[]{
entry_address = Capteur();
name = ID_capteur;
stack_size = 256;
stack_section = stack;
priority =8;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = roue_piste_rouge();
name = ID_roue_rouge;
stack_size = 256;
stack_section = stack;
priority =8;
initial_start = OFF;
exinf = 0x0;
};
flag[]{
name = ev_bus_fin_tr;
initial_pattern = 0x0000;

Formats disponibles : Unified diff