Projet

Général

Profil

« Précédent | Suivant » 

Révision 292

Ajouté par maporte3 il y a plus de 6 ans

Ajout de la fonction commande qui permet de modifier la vitesse du véhicule à l'aide du clavier matricielle.

Voir les différences:

branch/porte/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0044
RESET=ff004a
branch/porte/Emb_App/programme_principal_etud.c
//'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 '*'
/*-------------------------------------- Constante ----------------------------------------*/
const Vitesse_max=99, Vitesse_min=0;
/*-------------------------------------- Variables ----------------------------------------*/
unsigned int Angle_T=0; //prend la valeur de l'angle au temps t-1
unsigned int Consigne_T=500; //Consigne de l'angle de la tourelle
......
int Kpt=1, Kpr=2; //Param?tre des PID tourelle et roues
int Kit=4, Kir=40;
int Kdt=1.5, Kdr=1;
int i;
unsigned int Vitesse_final=40, Vitesse_virage=25, Distance;
unsigned int Vitesse=0, vit=0, i=1, Distance;
unsigned int Angle_R=0, distance_bord=660; //Angle des roues
unsigned int Info_capteur;
unsigned int Bord_defaut=0, ecart=400;
short Touche_clavier;
void Asserv_T(){
......
Somme_ErreurRoues+=ErreurRoues;
if(Distance != distance_bord && Bord_defaut == 0)
Angle_R=-1*(Kpr*ErreurRoues+Kdr*Delta_Erreur+(1/Kir)*Somme_ErreurRoues);//correction de l'angle par handler cyclique des roues
Angle_R=-1*(Kpr*ErreurRoues/*+Kdr*Delta_Erreur+(1/Kir)*Somme_ErreurRoues*/);//correction de l'angle par handler cyclique des roues
}
......
}*/
if(Info_capteur == 0x560 && Bord_defaut == 0){ // Commande de vitesse pour les lignes droites (dernier capteur detecte = vert).
comm.data.val=Vitesse_final;
comm.data.val=Vitesse;
snd_dtq (CanTx,comm.msg); // Envoi de la commande de vitesse
}
else{ // Ralentissement en cas de virage (selon valeur capteur)
comm.data.val=Vitesse_virage;
else{ // Ralentissement en cas de virage par 2 (selon valeur capteur)
comm.data.val=Vitesse/2;
snd_dtq (CanTx,comm.msg);
}
//lcd_str(char &Vitesse)
dly_tsk(10);
}
......
}
}
void Commande(){
CanFrame comm;
CanFrame demande;
CanFrame reponse;
while(1){
vrcv_dtq(QdmTouche, &Touche_clavier);
if(Touche_clavier != 0){
if(Touche_clavier != 42 && Touche_clavier != 35){
lcd_putc(Touche_clavier);
vit = vit*i+(Touche_clavier-48);
i = 10*i;
}
else if(Touche_clavier == 42 || Touche_clavier == 35){
if(vit < 100 && vit > 0){
Vitesse = vit;
}
vit = 0;
i = 1;
}
Touche_clavier=0;
dly_tsk(100);
}
dly_tsk(100);
}
}
void main()
{
......
sta_tsk(ID_Capteur);
sta_tsk(ID_Distance_bord);
sta_tsk(ID_Distance_bord);
sta_tsk(ID_Commande);
while(1)
{
branch/porte/Emb_App/conf_noyau.cfg
exinf = 0x0;
};
task[]{
entry_address = Commande();
name = ID_Commande;
stack_size = 256;
stack_section = stack;
priority = 6;
initial_start = OFF;
exinf = 0x0;
};
flag[]{
name = ev_bus_fin_tr;
initial_pattern = 0x0000;

Formats disponibles : Unified diff