Appearance
STONE HMI
Le HMI (Human Machine Interface) de la marque STONE permet d'être utilisé comme interface pour l'Arduino.
INFO
Pour établir la communication entre le HMI et l'Arduino, on utilise une porte logique 4069.
DANGER
Le protocole de communication entre le HMI et l'Arduino ne sont pas les mêmes !
Oscilloscope
Trame envoyée vers l'Arduino
Les valeurs situées après les octets 0xE7 A0
ne sont pas à prendre en compte et servent uniquement à vérifier que le message ne comporte aucune erreur.
Trame d'un bouton Documentation
JSON
Lors de l'envoi d'une trame sur le HMI depuis une Arduino, cela se fait par un message qui passe par le port série (chez nous le numéro 3) et est reçu par le HMI via le format JSON.
Le message envoyé est composé de trois parties :
- Le début de la trame qui permet d'indiquer son début au HMI. Il commence toujours par
ST<
. - Le message composé en JSON.
- La fin de la trame qui permet d'indiquer la fin de cette dernière
>ET
.
Exemple de code
Code JSON
Code JSON qui sera envoyé. Ici, le code permet de changer la couleur d'arrière-plan d'un widget (un élément) de l'écran.
JSON
{
"cmd_code":"set_color",
"type":"widget",
"widget":"dialog",
"color_object":"bg_color",
"color":4294901760
}
Code arduino
c++
Serial3.println("ST<{\"cmd_code\":\"set_color\",\"type\":\"widget\",\"widget\":\"dialog\",\"color_object\":\"bg_color\", \"color\":4294901760}>ET");
Changement de couleur
Pour changer les couleurs sur le HMI, il suffit d'appliquer la même logique que le code précédent. Néanmoins, il y a une règle à respecter : le code couleur doit être au format ARGB et doit également être en décimal. Ce décimal doit être la valeur totale du format ARGB qui est en hexadé
Exemple :
Prenons un exemple où nous souhaitons convertir une couleur bleue précise, ici : #0046a1ff => rgba(0, 70, 161, 1). Peu importe le format de la couleur, convertissez-la en hexadécimal pour plus de facilité.
- Tout d'abord, récupérez la couleur en hex, ici
0046a1ff
(ou #0046a1 sans la transparence).
Rappel
Nous savons que dans la valeur #0046a1, 0x00 est la valeur rouge, 0x46 la valeur verte, 0xa1 la valeur bleue.
- Il suffit de rajouter le niveau de transparence devant le nombre, donc
FF0046a1
. FF étant la valeur maximum qui nous permet de ne pas avoir de transparence (0x00 étant le niveau invisible). - Une fois votre valeur récupérée, il suffit de convertir toute la valeur en ARGB. Ce qui va nous donner
4278208161
. - Il suffit d'intégrer votre couleur ARGB dans la chaîne de message.
attention
Une fois la trame récupérée par le HMI, la valeur est convertie à nouveau en hexadécimal.
Activer ou Désactiver
Vous pouvez également activer ou désactiver des éléments pour interagir avec eux. Pour cela, quelques valeurs changent. Par exemple, le cmd_code
ainsi que la dernière information. La valeur color est complètement remplacée par enable
suivi de son état, et la valeur color_object
est supprimée.
true | Autorise l'intéraction |
---|---|
false | N'autorise pas l'interaction |
Code JSON
Ici, on indique l'état du button1, désactivé, donc impossible d'interagir avec.
JSON
{
"cmd_code":"set_enable",
"type":"widget",
"widget":"button1",
"enable":false
}
Code arduino
c++
Serial3.println("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\", \"enable\":false}>ET");