12
« le: décembre 06, 2018, 02:54:02 pm »
Bonjour,
C'est ça, ca marche!!!
Ci-dessous le sketch complet pour ceux que ça intéresse... En gras la partie que j'ai rajouté selon tes instructions.
#include <Commanders.h>
#include <Accessories.h>
// Le poussoir...
ButtonsCommanderPush boutonPoussoir;
// Le moteur
AccessoryServo AIGL;
// Les ports pour connecter le moteur...
PortServo portAIGL;
// code pour un accessoire à l'adresse DCC 125 piloté par un bouton On et un bouton Off
#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);
// Fixe le type de paquet Dcc qui déclenche l'événement, activation ou non (par défaut)
// Dépend de la centrale (utile dans le cas de mon Intellibox1)
// Ou DccCommander.RaiseEventWhen(true,200);
// le second paramètre fixe le délai d'inactivité forcé de DccCommander sur l'accessoire une fois l'événement envoyé.
DccCommander.RaiseEventWhen(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);
// Commande de l'alimentation du servo sur la broche 10, avec une tempo de 200ms...
AIGL.SetPowerCommand(10, 200);
}
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();
}
La broche 10 dans ce cas peut en effet commander un relais ou un transistor en insérant le Servo dans le circuit de collecteur.
Cordialement