Skip to content

STONE HMI

Stone

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 hmi

Trame d'un bouton Documentation

trame hmi doc

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 :

  1. Le début de la trame qui permet d'indiquer son début au HMI. Il commence toujours par ST<.
  2. Le message composé en JSON.
  3. 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.

trueAutorise l'intéraction
falseN'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");

Lien utile

Documentation/code du Projet B.R.A.S présent sur ce site sous license CC BY 4.0. (pour en savoir plus rdv dans la section LICENSE)