Bonjour,
Je tente d'actionner un servo pour aiguillage avec la bibliothèque Accessories+Commander.
J'ai le programme suivant:
// Le poussoir...
ButtonsCommanderPush boutonPoussoir;
// Le moteur
AccessoryServo AIGL;
// Les ports pour connecter le moteur...
PortServo portAIGL;
#define SERVOMIN 201
#define SERVOMAX 202
// code pour un accessoire à l'adresse DCC 125 piloté par un bouton On et un bouton Off (cas de ma MS2 Marklin...)
#define SERVOMIN DCCINT(125,0)
#define SERVOMAX DCCINT(125,1)
void setup()
{
Commanders::begin(LED_BUILTIN);
// Memoriser les positions des moteurs dans l'EEPROM.
Accessories::begin(0, 500);
// Récupérer le signal DCC sur la broche interruption 3...
DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3), true);
// Evènement du bouton 200 branché sur la borne 6...
boutonPoussoir.begin(200, 6);
boutonPoussoir.AddEvent(SERVOMIN, COMMANDERS_EVENT_MOVEPOSITIONID, 0); // Le dernier argument ne sert pas pour ce type d'evenement
boutonPoussoir.AddEvent(SERVOMAX, COMMANDERS_EVENT_MOVEPOSITIONID, 0);
// Les ports avec leurs broches en digital (pas PWM)
portAIGL.begin(12);
// Le servo : pas de durée de mouvement, un débattement entre 95 et 135 degres
// et deux positions stables annoncées avec des identifiants inutiles (mais obligatoires)
AIGL.begin(&portAIGL, 50, 95, 135, 1);
// Les deux positions sont au mini et au maxi :
AIGL.AddMinMaxMovingPositions(SERVOMIN, SERVOMAX);
}
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();
}
Avec le poussoir, le servo fonctionne de la manière suivante:*
- 1° appui: rien
- 2° appui déplacement dans un sens
- 3° appui déplacement en sens inverse
- 4° appui rien....etc
Avec le signal DCC, et mon intellibox calé sur l'accessoire 125, rien ne se passe. La led clignote en permanence indiquant la présence du DCC, mais
impossible de déplacer le servo.
Est-ce que quand j'envoie 125 à partir de mon intellibox, le décodeur décode bien 125 ou autre chose? et si oui quoi??
J'ai vraiment besoin d'une idée...
Cordialement