Projet

Général

Profil

« Précédent | Suivant » 

Révision 360

Ajouté par casotty il y a plus de 6 ans

Mise en place des capteurs pour la piste noire

Voir les différences:

branch/sotty/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0036
RESET=ff003e
branch/sotty/Emb_App/programme_principal_etud.c
short distance_mur = 0;
short angle_tourelle = 450;
const short vit_max = 30;
short vit_max = 30;
unsigned int vit_roue = 15;//*
short K_roue = 1;
short ang_roue = 0;
short capteur = 0;
short compar_mur = 500;
char num_piste = -1;
char rotation_roues_asserv = 1; //Si 1 roues libres sinon blocage
char rotation_roues_strat = 1; //Si 1 roues libres sinon blocage
short filtre_sup = 1000;
short filtre_inf = 0;
void main()
{
int k;
......
couleur_piste();
sta_tsk(ID_strategie);
while(1)
{
//strategie();
LED_J=1;
dly_tsk(100);
LED_J=0;
......
capteur = send_requete(INFO_CAPTEUR);//**
switch(num_piste){
case PISTE_VERTE :
vit_roue = 40;
break;
case PISTE_BLEUE :
......
case PISTE_ROUGE :
switch(capteur){
case 0x6301 : //Capteur perso avant bosse rouge
ang_roue = 0;//*****
rotation_roues_strat = 0; //blocage de langle des roues
vit_roue = 45;
break;
case 0x4203 : //Capteur apres bosse rouge
rotation_roues_strat = 1;
vit_roue = 8;
k = 0;
break;
......
case PISTE_NOIRE :
switch(capteur){
case 0x6302 :
if(distance_mur > 1000 || distance_mur < 0) { //Trou dans le mur //**
ang_roue = 0;
}
else {
ang_roue = (K_roue*(distance_mur-700));//**
}
break;
case 0x5601 : //evitement tonneaux
compar_mur = 680; //decalage a gauche
filtre_inf = 300;
break;
case 0x4a01 : //fin tonneaux
compar_mur = 500; //voiture centree
filtre_inf = 0;
break;
case 0x5602 : //virage avant saut
vit_roue = 15;
break;
case 0x6302 : //quart perso bosse
vit_roue = 10;
filtre_inf = 480;
filtre_sup = 520;
break;
case 0x5202 : //fin de bosse
filtre_inf = 0;
filtre_sup = 1000;
vit_roue = vit_max;
break;
case 0x6320 : //capteur perso avant saut
rotation_roues_strat = 0; //blocage de langle des roues
vit_roue = vit_max + 12;
break;
case 0x4203 : //capteur apres saut
rotation_roues_strat = 1; //deblocage de langle des roues
vit_roue = vit_max-20;
break;
case 0x5604 : //capteur avant cross
filtre_inf = 300;
filtre_sup = 700;
break;
case 0x4304 : //capteur apres cross
filtre_inf = 0;
filtre_sup = 1000;
vit_roue = vit_max;
break;
}
break;
}
......
//Angle des roues necessaire pour toutes les pistes
distance_mur = distance_telemetre()*sin(3.1415*angle_tourelle/1800.0);
if(distance_mur > 1000 || distance_mur < 0) { //Trou dans le mur //**
ang_roue = 0;
if(distance_mur > filtre_sup || distance_mur < filtre_inf) { //Trou dans le mur
rotation_roues_asserv = 0;
}
else {
ang_roue = (K_roue*(distance_mur-500));//**
rotation_roues_asserv = 1;
}
ang_roue = rotation_roues_asserv*rotation_roues_strat*(K_roue*(distance_mur-compar_mur));
/*
//Detection de couleur
//8 bits de poids fort : couleur ('C','R','J','B' ou 'V')

Formats disponibles : Unified diff