Quand c'est possible, c'est effectivement le plus simple. Processing sait faire, et Javascript, autant que je sache (ce n'est pas un langage que j'ai pratiqué souvent) aussi.
La question suivante est celle du protocole de communication. A titre d'exemple, j'ai fortement transformé mon ancienne version de UniversalAccessoriesDecoder en la coupant en deux : d'un côté la partie 'Commanders' qui donne les ordres : ce sont des boutons, des potars, le décodeur Dcc ou les bus série, CAN et I2C. De l'autre, toute la partie accessoires avec leurs drivers : les aiguillages, les feux, les moteurs et leds en tout genre. Pour les faire communiquer, j'ai imaginé une petite structure C dotée d'un identifiant, d'un type d'ordre, et d'une valeur. Le tout peut être exprimé sous forme texte :
123456, M, 128
Un identifiant correspond (à peu près) à un accessoire à piloter. L'ordre est décrit par l'enum suivant :
enum COMMANDERS_EVENT_TYPE
{
COMMANDERS_EVENT_NONE = 0, // Should never appear
COMMANDERS_EVENT_TOGGLE = 1, // If a push button or similar is pressed, invert the state/position
COMMANDERS_EVENT_MOVE = 2, // If a push 'left' button or similar is pressed, data is a COMMANDERS_MOVE_TYPE
COMMANDERS_EVENT_MOVEPOSITION = 3, // If a potentiometer or similar is moved, data is the position to reach
COMMANDERS_EVENT_CONFIG = 4 // Data is the configuration address and value
};
Les quatre ordres possibles sont donc 'T', 'M', 'P' (MovePosition) et 'C' . Le MovePosition utilise la valeur pour connaitre son but. Pour le Move fortement typé, la valeur est donnée par un autre enum:
enum COMMANDERS_MOVE_TYPE
{
COMMANDERS_MOVE_MORE = +1,
COMMANDERS_MOVE_LESS = -1,
COMMANDERS_MOVE_STOP = 0,
COMMANDERS_MOVE_LEFT = -2,
COMMANDERS_MOVE_RIGHT = -3,
COMMANDERS_MOVE_CENTER = -4,
COMMANDERS_MOVE_TOP = -5,
COMMANDERS_MOVE_BOTTOM = -6,
COMMANDERS_MOVE_STRAIGHT = -7,
COMMANDERS_MOVE_DIVERGE = -8,
COMMANDERS_MOVE_ON = -9,
COMMANDERS_MOVE_OFF = -10
};
Ne reste à la partie accessoires qu'à interpréter chaque ordre en demandant à l'accessoire correspondant de faire ce qu'on lui demande !
Pour tout dire, il me semble que ce partage correspond bien à un TCO : la partie Commanders dans un Arduino Mega côté TCO avec des boutons, des poussoirs et des potars, qui envoie ses ordres via une liaison série à la partie accessoires avec un ou plusieurs Arduino sous le réseau. Mais c'est une vision sans PC...