Bonjour
Je chemine toujours sur ce qui est à utiliser
Voici les pistes que je suis
Définition de nouvelles variables
// Some global state variables
//Variables pour les états de sortie des leds
uint8_t newLedStateOut0 = 0;
uint8_t lastLedStateOut0 = 0;
uint8_t newLedStateOut1 = 0;
uint8_t lastLedStateout1 = 0;
uint8_t newLedStateOut2 = 0;
uint8_t lastLedStateout2 = 0;
uint8_t newLedStateOut3 = 0;
uint8_t lastLedStateout3 = 0;
uint8_t newLedStateOut4 = 0;
uint8_t lastLedStateout4 = 0;
// rm: Il faudra autant de variables que de OUTPUTS
//Variable directionnelle
uint8_t newDirection = 0;
uint8_t lastDirection = 0;
Appel de la fonction d identification de la direction et affectation de la valeur à la variable newDirection:
// This call-back function is called whenever we receive a DCC Speed packet for our address
void notifyDccSpeed( uint16_t Addr, DCC_ADDR_TYPE AddrType, uint8_t Speed, DCC_DIRECTION Dir, DCC_SPEED_STEPS SpeedSteps )
newDirection = Dir;
Appel des fonctions utilisées sur le decodeur:
// This call-back function is called whenever we receive a DCC Function packet for our address
void notifyDccFunc(uint16_t Addr, DCC_ADDR_TYPE AddrType, FN_GROUP FuncGrp, uint8_t FuncState)
Premier groupe à traiter:
// pour le premier groupe de fonctions 0_4 incrementation des variables selon les conditions d activation
if(FuncGrp == FN_0_4)
{
newLedState0 = (FuncState & FN_BIT_00) ? 1 : 0;
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 0: ");
Serial.print(newLedState0);
#endif
newLedState1 = (FuncState & FN_BIT_01) ? 1 : 0;
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 0: ");
Serial.print(newLedState1);
#endif
newLedState2 = (FuncState & FN_BIT_02) ? 1 : 0;
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 0: ");
Serial.print(newLedState2);
#endif
newLedState3 = (FuncState & FN_BIT_03) ? 1 : 0;
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 0: ");
Serial.print(newLedState3);
#endif
newLedState4 = (FuncState & FN_BIT_04) ? 1 : 0;
#ifdef DEBUG_FUNCTIONS
Serial.print(" FN 0: ");
Serial.print(newLedState4);
#endif
}
(QUESTION peut on utiliser une syntaxe d incrémentation type i pour ces variables? Si oui selon quelle synthaxe?
suite
switch(FuncGrp)
case FN_0_4: //Function Group 1 F0 F4 F3 F2 F1
exec_function( 0, FunctionPin0, newLedState0>>4 ); //call for F0 to handle activating all outputs
exec_function( 1, FunctionPin1, newLedState1);
exec_function( 2, FunctionPin2, newLedState2>>1 );
exec_function( 3, FunctionPin3, newLedState3>>2 );
exec_function( 4, FunctionPin4, newLedState4>>3 );
break;
Actualisation
// Actualisation des statuts
// Handle Direction and Headlight changes
if((lastDirection != newDirection) || (lastLedState0 != newLedState0) || (lastLedState1 != newLedState1|| (lastLedState2 != newLedState2)|| (lastLedState3 != newLedState3)|| (lastLedState4 != newLedState4))
{
lastDirection = newDirection;
lastLedState0 = newLedState0;
lastLedState1 = newLedState1;
lastLedState2 = newLedState2;
lastLedState3 = newLedState3;
lastLedState4 = newLedState4;
QUESTION Idem ici peut on variabiliser en i ? Si oui selon quelle synthaxe?
Application du changement sur la sortie si on sait variabliser:
switch ( cv_value ) {
case 0: // LED on/off in FWD direction
ftn_queue[i].inuse = 0;
digitalWrite(fpins[i], lastLedState[i] ? LOW : HIGH);
break;
sinon à écrire dans le détail comme ceci (ou proche de ceci)
switch ( cv_value ) {
case 0: // LED on/off in FWD direction
ftn_queue 0.inuse = 0;
digitalWrite(fpins 0, lastLedState0 ? LOW : HIGH);
ftn_queue 1.inuse = 0;
digitalWrite(fpins 1, lastLedState1 ? LOW : HIGH);
ftn_queue 2.inuse = 0;
digitalWrite(fpins 2, lastLedState2 ? LOW : HIGH);
ftn_queue 3.inuse = 0;
digitalWrite(fpins 3, lastLedState 3 ? LOW : HIGH);
ftn_queue 4.inuse = 0;
digitalWrite(fpins 4, lastLedState 4 ? LOW : HIGH);
break;
ou un truc s en approchant...
Je suis ouvert a vos suggestions...
Laurent