par gily » 24 Janvier 2015, 11:08
bonjour
voici comment utiliser les fonctions F0 F1 F... trains avec le client :
j'ai créé une procédure pour appeler la fonction basique:
void fonction_train(int fonctionMask,int nFunc,unsigned char *train)
{
char affiche[256];
IPC_MSG_TAG xtag ;
if (echo)
{
sprintf(affiche, "Fonction train train: %s \r\n", train);
Display(affiche);
}
IPC_TrainDCCParamCRE(&xtag,train,0,0, //ptag,trainname,nAdress,nstepmode
ABS_MAX_SPEED,ABS_MAX_SPEED,FALSE, //nStep,nCstep,bReverse
fonctionMask,nFunc,IPC_COMMAND); //nModFunkMask,nFunc,MsgType
}
Pour envoyer un son au décodeur sonore de la loco, il faut dans mon cas activer F2 (klaxon aigu), puis le désactiver (faire un front montant).
Pour celà, dans le programme principal, j'active le bit 2 qui correspond à F2 (4 en décimal soit 0x04 en hexa) soit à un coup de klaxon de la loco:
la première fonction met le bit 2 à 1, puis 500 ms plus tard, on met le bit 2 à 0 ce qui créée le front montant sur la fonction demandée.
La loco qui passe sur l'actionneur 313 klaxonne.
Bien sur il faut que cette loco soit sonorisée. Si une autre loco passe sur l'actionneur sans etre équipée, rien ne se passera. On peut bien sur
conditionner l'appel de la fonction avec le nom du train si celui-ci est sonore.
NB. le tableau "actionneur[n]" contient le nom du train qui a actionné l'actionneur n. Celui ci est généré dans les entrailles du programme client.
Reprendre l'exemple du programme client pour les signaux complexes pour le retrouver (train_V3_0).
if ((AdressActionneurActivation==313) && (strcmp(actionneur[313],"CC406526")==0 ))
{
aleatoire=rand()%10 ; // nombre de 0 à 9
if (aleatoire==0) BitFunc=0x04; // klaxon aigu
if (aleatoire==1) BitFunc=0x08; // klaxon grave
if (aleatoire==2) BitFunc=0x10; // klaxon grave aigu
fonction_train(BitFunc,BitFunc,actionneur[313]);
sleep(500);
fonction_train(BitFunc,0,actionneur[313]);
}
Je n'y vois qu'une restriction : la procédure TrainDCCParamCRE attend les bits de fonctions F par un paramètre de type INT. Donc, les bits vont de 0 à 15. Il est a priori impossible de passer des fonctions >15??? Mon décodeur de sons va jusque F20, donc je ne sais pas comment procéder.
A bientot