Révision 426
Ajouté par maporte3 il y a plus de 6 ans
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
Ajout de variables pour les vitesses de virages
Ajout de la led R pour l'arrêt d'urgence