# Pilotage PCB Actionneurs

## Informations que le PCB peut faire remonter
- Position des servomoteurs
- Position des moteurs pas à pas
- Etat des relais
- Information des capteurs fin de course
- Etat de la tirette
## Ordres envoyables au PCB
- Armer la tirette
- Désarmer la tirette
- Activer/désactiver le relai (qui alimente les solénoïdes)
- Faire tourner le servo vers un angle
## Evenements envoyables à la raspi
- Activation de la tirette si armée
- Appui sur un bouton
- Activation d'un capteur
## Protocole de communication
La communication se fait en USB CDC
### Récupération d'une donnée par la raspi :
GET;XXXX;YYYY\n avec XXXX l'élément du PCB concerné et YYYY la donnée demandée dans la liste suivante :
- ASC;POS pour récupérer la position de l'ascenseur (renvoie le numéro de position prédéfini par l'utilisateur (le x de POSx dans la commande SET))
- SERVOn;POS pour récupérer la position du servo n (renvoie le numéro de position prédéfini par l'utilisateur (le x de POSx dans la commande SET))
- RELAYn;STATE pour récupérer l'état d'un relai (1 = activé, 0 = désactivé) avec n l'id du relai (1, 2 ou 3)
### Réponse du PCB à une demande de donnée
SET;XXXX;YYYY;val avec XXXX et YYYY identiques à la commande GET et val une valeur dans l'unité ou la plage de valeurs convenue.
### Modification d'une constante par la raspi :
SET;XXXX;YYYY;val avec XXXX l'élément du PCB concerné, YYYY la donnée à enregistrer et val la valeur dans la liste suivante :
- ASC;POSx;val (valeur en mm de hauteur de la position haute de l'ascenseur)
- SERVOn;POSx;angle (valeur de l'angle de la position d'un servo moteur en radians avec n et x des nombres (id du servo et de la pos de ce servo))
- SET;TIR;ARM;val (1 pour armer la tirette si le robot est prêt, 0 pour désarmer la tirette)
### Réponse du PCB à la modif d'une constante
OK;XXXX;YYYY;val avec XXXX, YYYY et val identiques à la commande SET pour valider une commande effectuée.
KO;XXXX;YYYY;val pour une commande échouée
### Déclenchement d'une action par la rasp
MOV;XXX;YYY
- ASC;POSx pour mettre l'ascenseur à la position x
- SERVOn;POSx pour mettre le servo n à la position x
- RELAYn;x avec x vaut 1 ou 0 pour activer ou désactiver des sorties
### Réponse du PCB au déclenchement d'une action
OK;XXXX;YYYY avec XXXX et YYYY identiques à la commande MOV pour valider une commande effectuée.
KO;XXXX;YYYY pour une commande échouée
### Envoi d'évènement par le PCB
Le PCB peut envoyer des informations à la rasp sans répondre à l'une de ses requêtes de la sorte :
EVENT;XXX;YYY avec XXX l'évènement et YYY une info complémentaire
- TIR;START pour une tirette armée actionnée par l'utilisateur
- TIR;ARM pour signaler un appui bouton sur le panneau de commande demandant l'armement de la tirette
- TIR;DIS pour signaler un appui bouton sur le panneau de commande et le désarmement de la tirette
### Réponse de la rasp à un évènement du PCB
Si la rasp ne répond pas à l'envoi d'un évènement par le PCB celui ci sera renvoyé jusqu'à recevoir une réponse
- ACK;XXX;YYY pour un message pris en compte par la rasp, XXX et YYY identiques au message EVENT correspondant
- rien sinon