Projet

Général

Profil

« Précédent | Suivant » 

Révision 437

Ajouté par jotoribio il y a plus de 6 ans

Affiche sur lcd couleur piste et zone
Au bout de 3 tours s'arretent
Affiche led rouge avec bouton poussoire

Voir les différences:

branch/toribio/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0020
RESET=ff004e
branch/toribio/Emb_App/programme_principal_etud.c
short sauter=0;
short noir=0;
short i=0;
short zvert=0;
short tours=0;
short jeton=0;
int numero;
short kc=1;
void asserv0(){
while(1){
......
void roue(){
while(1){
short k=2; //Gain du correcteur P
//short k=1;
//lecture de la position de la roue
CanFrame req,comm;
UINT flag;
......
comm.data.id='D';
comm.data.rtr=0; //indique une ?criture
if (distance>1000);
else comm.data.val=k*(distance-700);
else comm.data.val=kc*(distance-700);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
......
comm.data.id='D';
comm.data.rtr=0; //indique une ?criture
if (distance>1000);
else comm.data.val=k*(distance-700);
else comm.data.val=kc*(distance-700);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
......
else if ((sauter==0) && (noir==2)){
comm.data.id='D';//zone de passage avant pont piste noire
comm.data.rtr=0;
k=1;
kc=1;
if (distance>2000);
else comm.data.val=k*(distance-300);
else comm.data.val=kc*(distance-300);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if ((sauter==0) && (noir==3)){
comm.data.id='D';//zone de passage avant pont piste noire
comm.data.rtr=0;
k=1;
kc=1;
if (distance>2000);
else comm.data.val=k*(distance-250);
else comm.data.val=kc*(distance-250);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if ((sauter==0) && (noir==4)){
comm.data.id='D';//zone de passage du pont piste noire
comm.data.rtr=0;
k=1;
kc=1;
if (distance>2000);
else comm.data.val=k*(distance-150);
else comm.data.val=kc*(distance-150);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if ((sauter==0) && (noir==5)){
comm.data.id='D';//zone apr?s passage du pont piste noire
comm.data.rtr=0;
k=2;
kc=2;
if (distance>2000);
else comm.data.val=k*(distance-700);
else comm.data.val=kc*(distance-700);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
......
else if ((sauter==0) && (noir==7)){
comm.data.id='D';//zone apr?s passage du pont piste noire
comm.data.rtr=0;
k=2;
kc=2;
if (distance>2000);
else comm.data.val=k*(distance-700);
else comm.data.val=kc*(distance-700);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if ((sauter==0) && (noir==8)){
comm.data.id='D';//zone en herbe du pont piste noire
comm.data.rtr=0;
k=2;
kc=2;
if (distance>2000);
else comm.data.val=k*(distance-700);
else comm.data.val=kc*(distance-700);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if ((sauter==0) && (noir==9)){
comm.data.id='D';//dernier virage piste noire
comm.data.rtr=0;
k=2;
kc=2;
if (distance>2000);
else comm.data.val=k*(distance-700);
else comm.data.val=kc*(distance-700);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
......
else if ((sauter==0) && (noir==9)){
requete.data.val=12;} //dernier virage piste noir
snd_dtq(CanTx, requete.msg);
dly_tsk(5);
dly_tsk(10);
}
......
}
}
void numpiste(){
CanFrame Numpiste;
UINT flag;
while(1){
Numpiste.data.id='M';
Numpiste.data.rtr=1;
periph[ADDR('M')].ev=0x04;
snd_dtq(CanTx, Numpiste.msg);
//Attente de la r?ponse
wai_flg (ev_periph, 0x04, TWF_ANDW, &flag);
numero=periph[ADDR('M')].val<<8;
dly_tsk(100); }
}
void saut(){
while(1){
if (numcapt==3 && virage!=16896){
......
}
else if ((numcapt==1) && (virage==18944)){
noir=3; //zone de virage passage du pont
//LED_R=1;
}
else if ((numcapt==4) && (virage==17152)){
noir=9; // dernier virage
......
dly_tsk(5);
}
}
void tour(){
while(1){
CanFrame vitesse;
if(numcapt==1 && virage==22016){
jeton=1;
}
if(numcapt==2 && virage==22016){
if(jeton==1){
tours++;
jeton=0;}
}
if (tours==3){
if(numcapt==1 && virage==22016){
vitesse.data.id='V';
vitesse.data.rtr=0;
vitesse.data.val=0;
snd_dtq (CanTx,vitesse.msg);
isus_tsk(ID_asserv0);
isus_tsk(ID_roue);
isus_tsk(ID_regvitesse);
isus_tsk(ID_dist);
isus_tsk(ID_zone);
isus_tsk(ID_saut);
isus_tsk(ID_pistenoire);
isus_tsk(ID_tour);
isus_tsk(ID_ecran);
isus_tsk(ID_numpiste);
}
}
dly_tsk(5);
}
}
void ecran(){
while(1){
dly_tsk(250);
lcd_init();
switch(numero){
case(256) : lcd_str("VERT|"); break;
case(512) : lcd_str("BLEU|"); break;
case(768) : lcd_str("ROUGE|"); break;
case(1024) : lcd_str("NOIR|"); break;
}
switch(virage){
case(22016) : lcd_str("VERT|"); break;
case(17152) : lcd_str("BLEU|"); break;
case(20992) : lcd_str("ROUGE|"); break;
case(18944) : lcd_str("JAUNE|"); break;
case(16896) : lcd_str("CYAN|"); break;
}
if (p0_4==0) LED_R=1;
else LED_R=0;
}
}
void main()
{
......
sta_tsk(ID_dist);
sta_tsk(ID_roue);
sta_tsk(ID_zone);
// sta_tsk(ID_saut);
sta_tsk(ID_pistenoire);
sta_tsk(ID_tour);
sta_tsk(ID_ecran);
sta_tsk(ID_numpiste);
if(numero==768){ sta_tsk(ID_saut);
kc=2;}
if (numero==1024){ sta_tsk(ID_pistenoire);
kc=2;}
while(1)
{
branch/toribio/Emb_App/conf_noyau.cfg
exinf = 0x0;
};
task[]{
entry_address = tour();
name = ID_tour;
stack_size = 512;
stack_section = stack;
priority = 5;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = ecran();
name = ID_ecran;
stack_size = 512;
stack_section = stack;
priority = 5;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = numpiste();
name = ID_numpiste;
stack_size = 512;
stack_section = stack;
priority = 5;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = periph_tx();
name = ID_periph_tx;

Formats disponibles : Unified diff