Projet

Général

Profil

« Précédent | Suivant » 

Révision 435

Ajouté par tibacher il y a plus de 6 ans

affichage du circuit et du temps de course

Voir les différences:

branch/bacher/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff005a
RESET=ff00ac
branch/bacher/Emb_App/programme_principal_etud.c
int compte_tour=0;
int i_tour=0;
int stop=0;
int i_urgence=0;
int s_urgence=0;
int cu;
int i_urgence=0; //incr?ment d'urgence
int s_urgence=0; //signal d'urgence
int cu=0;
int Temps;
int sec;
int cent_sec;
char c_Temps[6];
FLGPTN flag_capt;
FLGPTN flag_pist;
CanFrame vit_roue; //canal de commande de la vitesse
CanFrame capteur;
CanFrame piste;
CanFrame demande_temps;
void demarre()
{
......
piste.data.id='M';
piste.data.rtr=1;
periph[ADDR('M')].ev=0x04;
snd_dtq(CanTx, piste.msg);
wai_flg (ev_periph, 0x04, TWF_ANDW, &flag_pist);
retour_M=periph[ADDR('M')].val;
num_piste=retour_M & 0x007F;
switch(num_piste){
case 4: //piste noire
vitesse=30;
vitesse_virage=30;
mode=0;
break;
case 1: //piste verte
vitesse=70;
vitesse_virage=30;
mode=0;
break;
case 2: //piste bleue
vitesse=50;
vitesse_virage=30;
mode=0;
break;
case 3: //piste rouge
vitesse=60;
vitesse_virage=30;
mode=0;
break;
while(col_feu!=-1){
snd_dtq(CanTx, piste.msg);
wai_flg (ev_periph, 0x04, TWF_ANDW, &flag_pist);
retour_M=periph[ADDR('M')].val;
num_piste=retour_M & 0x007F;
col_feu=retour_M>>15;
switch(num_piste){
case 4: //piste noire
vitesse=30;
vitesse_virage=30;
mode=0;
break;
case 1: //piste verte
vitesse=65;
vitesse_virage=30;
mode=0;
break;
case 2: //piste bleue;
vitesse=50;
vitesse_virage=30;
mode=0;
break;
case 3: //piste rouge
vitesse=60;
vitesse_virage=30;
mode=0;
break;
}
dly_tsk(200);
}
sta_tsk(ID_LCD);
vit_roue.data.id='V';
vit_roue.data.rtr=0;
vit_roue.data.val=vitesse;
......
CanFrame req;
CanFrame reponse;
while(1){
if(s_urgence==0){
req.data.id='R';
req.data.rtr=1;
......
comm.data.val=valeur;
if(s_urgence==0)snd_dtq (CanTx,comm.msg); //on envoie la modification ? effectuer
if(retour!=cons) valeur=k*(cons-retour);
dly_tsk(20);
}
dly_tsk(20);
}
}
......
CanFrame req;
UINT flag;
while(1){
if(s_urgence==0){
req.data.id='U';
req.data.rtr=1;
periph[ADDR('U')].ev=0x02;
......
else {
distance=periph[ADDR('U')].val;
}
dly_tsk(10);
}
dly_tsk(10);
}
}
......
CanFrame req,comm;
UINT flag;
while (1) {
if(s_urgence==0){
req.data.id='D';
req.data.rtr=1;
periph[ADDR('D')].ev=0x01;
......
}
if(s_urgence==0)snd_dtq(CanTx, comm.msg);
dly_tsk(10);
}
dly_tsk(10);
}
}
......
numcapt=retour_C & 0x00ff;
if ((retour_C & 0xff00)!=colcapt) {
colcapt=retour_C & 0xff00;
//AFFICHAGE DE LA COULEUR ET DU CIRCUIT
switch(colcapt){
case 0x5600:
lcd_init();
lcd_str("vert");
break;
case 0x4a00:
lcd_init();
lcd_str("jaune");
break;
case 0x5200:
lcd_init();
lcd_str("rouge");
break;
case 0x4200:
lcd_init();
lcd_str("bleu");
break;
case 0x4300:
lcd_init();
lcd_str("cyan");
break;
}
}
//COMPTEUR DE TOUR
......
//CAPTEURS POUR LA PISTE ROUGE
if (retour_C==0x5603 && i==0 && num_piste==3){ //si on passe le capteur avant le tremplin
i++;
vitesse_virage=50;
dly_tsk(1500);
i_tremplin=1;
vitesse=45;
......
vitesse_virage=20;
i=0;
}
if (retour_C==0x5604 && num_piste==3){ //on reprend les param?tres de d?part
if (retour_C==0x5604 && num_piste==3){
vitesse=40;
vitesse_virage=30;
i_ralenti=0;
}
if (retour_C==0x4304 && num_piste==3){ //on reprend les param?tres de d?part
vitesse=60;
vitesse_virage=30;
i_ralenti=0;
}
/*
//CAPTEURS POUR LA PISTE BLEUE
......
while(1){
while (p0_4==0){
s_urgence=1;
vit_roue.data.val=0;
snd_dtq (CanTx,vit_roue.msg);
cu=1;
i_urgence=0;
}
vit_roue.data.val=0;
snd_dtq (CanTx,vit_roue.msg);
cu=1;
s_urgence=1;
i_urgence=0;
}
if (p0_4==1 && i_urgence==0){
i_urgence==1;
s_urgence=0;
vit_roue.data.val=vitesse;
snd_dtq (CanTx,vit_roue.msg);
cu=1;
}
i_urgence==1;
s_urgence=0;
vit_roue.data.val=vitesse;
snd_dtq (CanTx,vit_roue.msg);
cu=0;
}
dly_tsk(20);
}
}
char decode_int(int a){
switch(a){
case 0:
return '0';
break;
case 1:
return '1';
break;
case 2:
return '2';
break;
case 3:
return '3';
break;
case 4:
return '4';
break;
case 5:
return '5';
break;
case 6:
return '6';
break;
case 7:
return '7';
break;
case 8:
return '8';
break;
case 9:
return '9';
break;
}
}
void aff_LCD()
{
while(1){
//AFFICHAGE DE LA COULEUR ET DU CIRCUIT
switch(colcapt){
case 0x5600:
lcd_init();
lcd_str("vert_");
break;
case 0x4a00:
lcd_init();
lcd_str("jaun_");
break;
case 0x5200:
lcd_init();
lcd_str("roug_");
break;
case 0x4200:
lcd_init();
lcd_str("bleu_");
break;
case 0x4300:
lcd_init();
lcd_str("cyan_");
break;
}
switch(num_piste){
case 1:
lcd_str("verte Temps: ");
break;
case 2:
lcd_str("bleue Temps: ");
break;
case 3:
lcd_str("rouge Temps: ");
break;
case 4:
lcd_str("noire Temps: ");
break;
}
//AFFICHAGE DU TEMPS
demande_temps.data.id='H';
demande_temps.data.rtr=1;
snd_dtq (CanTx,demande_temps.msg); // Interrogation du peripherique sur le temps de course actuel.
Temps=periph[ADDR('H')].val;
c_Temps[0]=decode_int(Temps/1000);
c_Temps[1]=decode_int((Temps%1000)/100);
c_Temps[2]=':';
c_Temps[3]=decode_int(((Temps%1000)%100)/10);
c_Temps[4]=decode_int(((Temps%1000)%100)%10);
c_Temps[5]=' ';
dly_tsk(150);
lcd_str(c_Temps);
dly_tsk(20);
}
}
void main()
{
ports_mcu();
......
sta_tsk(ID_demarre);
sta_tsk(ID_capteur);
sta_tsk(ID_urgence);
while(1){
/*
while (p0_4==0){
s_urgence=1;
vit_roue.data.val=0;
snd_dtq (CanTx,vit_roue.msg);
i_urgence=0;
}
if (p0_4==1 && i_urgence==0){
i_urgence==1;
s_urgence=0;
}*/
}
}
branch/bacher/Emb_App/conf_noyau.cfg
//
// kernel.cfg : building file for MR308 Ver.4.00
//
// Generated by M3T-MR308 GUI Configurator at 2018/12/20 16:21:00
// Generated by M3T-MR308 GUI Configurator at 2019/01/09 9:29:45
//
////////////////////////////////////////////////////////////////////////////////
......
// max definition
maxdefine{
max_task = 9;
max_task = 10;
max_flag = 3;
max_dtq = 2;
max_cyh = 1;
......
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = aff_LCD();
name = ID_LCD;
stack_size = 256;
stack_section = stack;
priority = 3;
initial_start = OFF;
exinf = 0x0;
};
flag[]{
name = ev_bus_fin_tr;

Formats disponibles : Unified diff