Projet

Général

Profil

« Précédent | Suivant » 

Révision 426

Ajouté par maporte3 il y a plus de 6 ans

Ajout de variables pour les vitesses de virages
Ajout de la led R pour l'arrêt d'urgence

Voir les différences:

branch/porte/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0076
RESET=ff0082
branch/porte/Emb_App/programme_principal_etud.c
// +-----------------------------------------------------+
// | Constantes |
// +-----------------------------------------------------+
const Vitesse_max=99, Vitesse_min=0, Vitesse_noir=12;
const Vitesse_max=99, Vitesse_min=0;
const Kpt=1 , Kdt=0.1, Kdr=0.2, Kpr=1; //Param?tre des PD de la tourelle et des roues
// +-----------------------------------------------------+
......
// +-----------------------------------------------------+
//Variables pour l'asserivssement des roues, de la vitesse et du telemetre
unsigned int Angle_T=0, Consigne_T=400, Consigne_T_noir=900; //prend la valeur de l'angle au temps t-1 //Consigne de l'angle de la tourelle (consigne/10=>degr?s)
unsigned int valeur=0, Saut=0; //valeur transmise corrig?
unsigned short valeur=0, Saut=0; //valeur transmise corrig?
unsigned int Somme_Erreur=0, Erreur=0;
unsigned int ErreurRoues=0,Somme_ErreurRoues=0;
unsigned int vit=0, i=1, Distance;
unsigned int Angle_R=0, Vitesse_vert=40,Vitesse_bleu=35,Vitesse_rouge=30; //Angle des roues
int vit=0, i=1, Distance;
int Angle_R=0; //Angle des roues
unsigned short Vitesse_vert=40,Vitesse_bleu=35,Vitesse_rouge=30, Vitesse_noir=12;
unsigned short Vitesse_vert_virage=30, Vitesse_bleu_virage=26, Vitesse_rouge_virage=20, Vitesse_rouge_saut=45;
//Variable de la fonction Capteur
unsigned int Info_capteur, couleur_capteur, num_capteur;
//Variable de la fonction Distance_bord
unsigned int Bord_defaut=0, ecart=400, distance_bord=790, distance_bord_noir=500;
unsigned int Bord_defaut=0, ecart=400, distance_bord_vert=810, distance_bord=780, distance_bord_noir=500;
//Variable des fonctions IHM
short Touche_clavier, Temps=0;
short Touche_clavier;
float Temps=0;
//char *Temps;
//Variable de la fonction Circuit
unsigned int Info_circuit, Etat_feu, Num_circuit=0, Depart_ok=0, Arret_urgence=0;
......
Somme_ErreurRoues+=ErreurRoues;
switch(Num_circuit){
case 1:
if(Distance != distance_bord && Bord_defaut == 0){
if(Distance != distance_bord_vert && Bord_defaut == 0){
Angle_R=-1*(Kpr*ErreurRoues+Kdr*Somme_ErreurRoues);} //correction de l'angle par handler cyclique des roues
break;
case 2:
......
snd_dtq (CanTx,comm.msg); // Envoi de la commande de vitesse
}
else{ // Ralentissement en cas de virage.
comm.data.val=Vitesse_vert/1.2;
comm.data.val=Vitesse_vert_virage;
snd_dtq (CanTx,comm.msg);
}
}
......
snd_dtq (CanTx,comm.msg); // Envoi de la commande de vitesse
}
else{ // Ralentissement en cas de virage.
comm.data.val=Vitesse_bleu/1.3;
comm.data.val=Vitesse_bleu_virage;
snd_dtq (CanTx,comm.msg);
}
}
......
snd_dtq (CanTx,comm.msg); // Envoi de la commande de vitesse
}
else if(couleur_capteur == 0x0766 && num_capteur == 0x66F0){ //Accel?ration pour passer le saut
comm.data.val=45;
comm.data.val=Vitesse_rouge_saut;
snd_dtq (CanTx,comm.msg);
}
else{ // Ralentissement en cas de virage.
comm.data.val=Vitesse_rouge/1.5;
comm.data.val=Vitesse_rouge_virage;
snd_dtq (CanTx,comm.msg);
}
}
/* if(couleur==0x1c80 || couleur==0x18c8 ) ; // avant saut: bloc rouge grand valeur 2 et pr?-barille: petit bloc cyan 32 , bloc les roues
else if(couleur==0x18d0 || couleur==0x18c1){ // barille: petit bloc cyan 64 et piste caillou: petit bloc cyan 6
distance_ref=350;
if(distance!=distance_ref){
valeur_r=-k2*(distance_ref-distance);}
}
else if(couleur==0x18e0){
distance_ref=570;
if(distance!=distance_ref){
valeur_r=-k2*(distance_ref-distance);}
}
else {
distance_ref=distance_ref_init;
if(distance!=distance_ref){
valeur_r=-k2*(distance_ref-distance);}
}
}*/
break;
case 4 :
if(Depart_ok == 1 && Arret_urgence == 0){
......
switch(Num_circuit){
case 1:
if(Distance > distance_bord+ecart || Distance < distance_bord-ecart){
if(Distance > distance_bord_vert+ecart || Distance < distance_bord_vert-ecart){
Bord_defaut=1;
}
else{
......
Bord_defaut=0;
}
break;
default :
if(Distance > distance_bord_noir+ecart || Distance < distance_bord_noir-ecart){
Bord_defaut=1;
}
else{
Bord_defaut=0;
}
}
if(Bord_defaut == 1){
LED_J=1;
dly_tsk(1000);
LED_J=0;
}
dly_tsk(10);
}
}
......
default : lcd_str("Inconnu");
}
lcd_putc('|');
switch(Info_capteur){
switch(Info_capteur / 10){
case 0x560: lcd_str("VERT"); break;
case 0x430: lcd_str("NOIR"); break;
case 0x520: lcd_str("ROUGE"); break;
......
}
lcd_putc('|');
//lcd_str('Temps');
dly_tsk(1000);
}
......
void Bp_hc(){
if(Bp_G == 1){ Arret_urgence = 1;}
if(Bp_G == 0){ Arret_urgence = 0;}
if(Bp_G == 1){ Arret_urgence = 1; LED_R = 1;}
if(Bp_G == 0){ Arret_urgence = 0; LED_R = 0;}
}
......
Etat_feu=Info_circuit >> 15; // contient la valeur de retour du simulateur sur l'?tat du feu tricolore.
if( Etat_feu == 1){ Depart_ok = 1;} // Passe la variable permettant le d?part ? 1.
dly_tsk(200);
}
}

Formats disponibles : Unified diff