En attendant je vais donc m'occuper du soft

Thierry, j'accueille ta participation avec plaisir

La carte est donc à géométrie variable. On peut la piloter en DCC ou en CAN. Doit-on embarquer le même logiciel qui s'adapte à l'un ou à l'autre ? Pourquoi pas il y a assez de place je pense.
Quoiqu'il en soit, la carte sera configurable par la ligne série grâce à CommandInterpreter pour :
- lui donner une adresse.
- déterminer si l'expandeur de fin de courses est en place ou non. La présence du composant indique qu'au lieu de se caler sur des butées définies logiciellement, le mouvement se poursuit jusqu'à arriver à la butée physique avec tout de même des butées logicielles pour éviter de dépasser les valeurs min ou max des servos si la butée physique dysfonctionne. Vous pouvez vous référer à http://modelleisenbahn.triskell.org/spip.php?article35 pour des servomoteurs avec butées physique. La platine a été redessinée pour avoir le même ordre de signaux.
- activer/désactiver des servos car toutes les sorties ne sont pas forcément utilisées.
- fixer la période d'émission de la position effective des servos.
La configuration de la carte s'effectue si le bouton CFG est enfoncé au démarrage. En pratique, on appuie sur CFG puis sur RESET et la carte redémarre en mode configuration. La configuration est stockée en EEPROM afin d'être conservée d'un allumage à l'autre.
Les commandes de configuration et de lecture de la carte seront les suivantes :
- exp : affiche oui si l'expandeur de fins de course est utilisé, non sinon.
- exp oui : active l'utilisation de l'expandeur de fin de course. Idéalement le logiciel devrait tenter de communiquer avec le circuit et afficher 'ok' ou 'erreur' si l'expandeur répond ou non.
- exp non : désactive l'utilisation de l'expandeur de fin de course
- can : demande de l'état d'activation du CAN, réponse : oui ou non selon que le CAN est utilisé ou non.
- can oui : active l'utilisation du CAN.
- can non : désactive l'utilisation du CAN.
- canad : affiche l'adresse CAN, c'est à dire l'identifiant de message que la carte reçoit, cet identifiant est utilisé pour programmer les filtres et les masques.
- canad <adresse> : configure l'adresse CAN.
- dcc : demande l'état d'activation du DCC, réponse oui si le DCC est activé, non sinon.
- dcc oui : active le DCC.
- dcc non : désactive le DCC.
- dccad : affiche l'adresse DCC.
- dccad <adresse> : configure l'adresse DCC.
- retro : affiche oui, suivi de l'identifiant des trames et de la période d'émission des trames de rétrosignalisation en millisecondes si la rétrosignalisation est activée, non sinon.
- retro oui <id> <periode> : active l'envoi des trames de rétrosignalisation avec des messages CAN d'identifiant <id> et avec une période d'émission <periode> en millisecondes.
- retro non : désactive l'envoi des trames de rétrosignalisation.
- servo : affiche l'état des 8 servos. Le résultat est : '<num> : ' suivi de 'non' si le servo est désactivé ou bien '<type> : <min>, <pos>, <max> : <vitesse min vers max>, <vitesse max vers min>' si le servo est activé. <type> est le type de mouvement (pour l'instant dans SlowMotionServo il y a 3 types de mouvement : linéaire, doux, c'est à dire une courbe sinus de 0 à π/2, et doux avec rebond, c'est à dire un sinus suivi d'un amortissement en sens inverse), <min> est la position minimum, largeur de l'impulsion en µs, <pos> est la position actuelle, largeur de l'impulsion en µs et <max> est la position maximum, largeur de l'impulsion en µs. <vitesse min vers max> et <vitesse max vers min> sont respectivement les vitesses de déplacement de l'angle min vers l'angle max et de l'angle max vers l'angle min.
- servo <num> : affiche l'état du servo <num>. Voir ci-dessus
- servo <num> <commande> : change les réglages du servo <num>. Les <commande> peuvent être :
- min <valeur> : fixe l'angle min en µs
- max <valeur> : fixe l'angle max en µs
- vitesse <valeur> : fixe la vitesse de déplacement à la fois de min vers max et de max vers min
- vitesse max <valeur> : fixe la vitesse de déplacement de min vers max.
- vitesse min <valeur> : fixe la vitesse de déplacement de max vers min.
- go <valeur> : demande au servo d'aller à une position relative de 0 à 1 en mouvement lent.
- fdc : lit l'état des fins de course si l'expandeur est utilisé.
- fdc <num> : lit l'état du fin de course <num> si l'expandeur est utilisé.
- fdc <num> oui : prend en compte le fin de course <num>.
- fdc <num> non : ne prend en compte le fin de course <num>. En effet, bien qu'utilisant les fin de course, on peut, sur certains servos, utiliser les butées logicielles
L'utilisation d'une détection de fins de course change le fonctionnement de SlowMotionServo. Actuellement la bibliothèque utilise les butées logicielles. Il faut que je lui ajoute une méthode permettant de stopper le mouvement avant d'arriver sur la butée logicielle. Cette méthode sera appelée lorsque le fin de course est détecté. Il faut aussi que le mouvement continue un peu plus après le stop. En effet, si on arrête le mouvement dès la détection du fin de course, l'interrupteur est à la limite du contact. Pour bien l'enfoncer, il faut continuer un peu le mouvement. Je n'ai pas lister les commandes pour régler ce dépassement par rapport à stop pour l'instant.
La conséquence est que la totalité de la courbe de mouvement ne sera pas parcourue sauf si on ajuste les butées logicielles de manière à les faire coïncider avec les butées matérielles. Ce n'est pas grave car l'utilisation de fins de course sera essentiellement sur les aiguillages et les signaux mécaniques. Sur des animations type passage à niveau ou portes, on utilisera les butées logicielles. On peut également faire en sorte que les butées logicielles coïncident toutes seules avec les butées matérielles en ajustant chaque butée logicielle à la butée matérielle correspondant : le logiciel apprend. De cette manière on récupère la courbe complète.
J'ai certainement oublié des trucs mais ce fil de discussion va me servir à établir l'architecture fonctionnelle qui va évoluer selon vos remarques.