Après quelques essais, voici le résultat de mes pérégrinations. Je n'ai rien trouvé de suspect, le croquis marche parfaitement pour moi. Malgré tout, un petit plan de bataille pour se mettre dans les meilleures conditions :
1 récupérer les dernières versions de Accessories et Commanders. Les différences poussées aujourd'hui sont minimes et sans rapport avec le problème, c'est juste pour se mettre au même niveau.
2 récupérer aussi la nouvelle version du sketch. Peu de changement, juste l'ajout d'un SERIAL_COMMANDER et son initialisation. Cela va permettre de tester le script sans Dcc, pour au moins assurer que cela fonctionne.
3 Le dernier argument de DccCommander.begin() est là pour faire clignoter la diode si un signal Dcc est présent sur l'entrée. Ce n'est peut être pas nécessaire dans votre cas...
4 les versions des bibliothèques sont sans DEBUG_MODE, sans sauvegarde EEPROM, et aussi sans bus CAN, mais ça ce devait être déjà le cas... Éventuellement réactiver le DEBUG_MODE de Accessories.
#include "Commanders.h"
#include "Accessories.h"
// Accessories
AccessoryMotorTwoWays aiguille;
ButtonsCommanderPush push;
SERIAL_COMMANDER(Serial);
// Drivers
PortTwoPins port;
#define DCCID_DROIT DCCINT(20, 0)
#define DCCID_DEVIE DCCINT(20, 1)
void setup()
{
Serial.begin(115200);
Commanders::begin(LED_BUILTIN);
Accessories::begin();
SerialCommander.begin();
// Setup of the Dcc commander.
DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3));
// Setup of the buttons, one by accessory
push.begin(DCCID_DROIT, 4);
push.AddEvent(DCCID_DEVIE);
// Setup of ports
port.begin(6, 7, DIGITAL);
// Accessories setups
aiguille.beginTwoWays(&port, DCCID_DROIT, DCCID_DEVIE, 255, 250);
}
void loop()
{
unsigned long id = Commanders::loop();
if (id != UNDEFINED_ID)
{
// Renvoie l'événement reçu de Commanders, vers les accessoires...
Accessories::RaiseEvent(id, (ACCESSORIES_EVENT_TYPE)Commanders::GetLastEventType(), Commanders::GetLastEventData());
}
Accessories::loop();
}
Une fois tout en place, et si ça ne marche toujours pas, tester l'envoi d'un code Dcc en manuel : taper 20:0 ou 20:1 dans le champs de saisie de la console. Le moteur doit réagir. En tout cas, en DEBUG_MODE le PortTwoPins doit signaler un changement sur la console.
A suivre...