Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Génération de menus LCD sans code à l'aide de XOD

Composants et fournitures

Arduino UNO
× 1
DFRobot Arduino LCD/Keypad Shield
× 1

Applications et services en ligne

Environnement XOD

À propos de ce projet

Les processeurs qui alimentent les cartes de développement Arduino ne sont pas les microcontrôleurs de votre grand-père - ils ont une puissance de traitement importante et peuvent être utilisés pour surveiller et contrôler simultanément de nombreux types de matériel physique et de capteurs. L'IDE de programmation graphique XOD pour Arduino peut simplifier la tâche de conception matérielle de prototypage rapide, mais à mesure qu'un système devient de plus en plus complexe, il se pose le problème du contrôle de l'utilisateur et de la gestion des informations - comment organiser les informations sur le processus contrôlé pour l'affichage et laisser l'utilisateur le contrôler de manière logique. Les boutons et commutateurs dédiés fonctionnent pour des projets simples, mais on manque rapidement de moyens logiques pour les organiser (ou d'endroits pour les mettre sur un boîtier). un petit écran qui permet de modifier les paramètres et de saisir les temps de cuisson, et bien que trop de « plongée dans les menus » pour accéder à des paramètres obscurs puisse compromettre l'expérience utilisateur, les interfaces pilotées par menu sont une réalité pour les projets de toutes sortes.

Les frameworks logiciels pour le développement d'interfaces basées sur des menus en C ou C++ pour les microcontrôleurs ont souvent une courbe d'apprentissage abrupte et il peut être difficile d'apporter des modifications de conception rapides, car souvent tout interagit avec tout le reste. L'objectif de ce projet était d'utiliser l'environnement de programmation graphique XOD pour fournir la possibilité de prototyper rapidement des interfaces pilotées par menu pour des projets de microcontrôleurs compatibles Arduino en utilisant un style d'interface glisser-déposer/WYSIWYG. Les paramètres de sortie et d'entrée de la structure de menu générée sont modulaires et génériques et doivent pouvoir être utilisés avec une grande variété de sources d'entrée (commutateurs, boutons, encodeurs) et produisent une séquence de sorties de texte brut qui peuvent être transmises à un large variété de types d'affichage pris en charge par XOD, y compris les modules LCD de texte multiligne comme utilisé dans cet exemple.

Si vous n'êtes pas familier avec l'environnement XOD utilisé par ce projet, veuillez d'abord consulter les didacticiels de ce projet sur xod.io.

Une capture d'écran d'un exemple de croquis de motivation simple suit. Nous allons parcourir ce diagramme de patch XOD section par section pour expliquer comment tout s'emboîte.

  • Le Menu Section d'interface du contrôleur

À droite de l'écran d'édition de patch dans XOD se trouvent quatre nœuds connectés de manière descendante. De haut en bas, il y a d'abord un nœud de type entrée analogique, qui est sélectionné pour être connecté à l'un des ports d'entrée analogique de l'Arduino. Dans mes tests, j'ai utilisé un Arduino Uno avec un processeur ATMega328 8 bits, avec un écran LCD/clavier 16x2 connecté au-dessus. Le clavier sur le blindage est connecté via les broches du blindage à l'entrée analogique "A0" de l'Arduino, et le matériel génère des tensions de niveaux différents pour signaler à l'Arduino quels boutons du pavé sont enfoncés.

Outre le bouton "Réinitialiser" du clavier qui ne s'interface pas directement avec l'esquisse Arduino, ce type de bouclier d'affichage fournit quatre boutons directionnels - haut, bas, gauche et droite, un bouton "sélectionner". Le deuxième nœud alimenté par le nœud d'entrée analogique contient un code qui décode les différentes tensions correspondant aux touches individuelles et émet des déclencheurs de type impulsionnel en fonction du bouton enfoncé. Une entrée "timeout" est fournie afin qu'un développeur XOD puisse ajuster le délai d'attente anti-rebond du clavier LCD shield pour éviter les faux déclenchements, ajusté au type de bouton ou de commutateur d'une application particulière.

Le troisième nœud vers le bas est un nœud de type contrôleur de menu, qui contient du code pour accepter les déclencheurs de type impulsion du panneau de commande et gérer la logique de l'utilisateur naviguant dans l'arborescence de menu et effectuant des sélections qui génèrent des mises à jour d'état de l'arborescence de menu.

Tel qu'il est actuellement mis en œuvre, il accepte une seule entrée de type numérique qui peut être n'importe quel paramètre que l'utilisateur peut modifier à partir d'une commande externe, par exemple un potentiomètre ou un cadran sur un panneau de commande qui représente un paramètre qui peut être modifié. Lorsqu'un menu de type feuille donné est sélectionné par le contrôleur de menu recevant une impulsion à son entrée "Invoke", dans l'arborescence du menu à gauche, le nœud de l'écran que l'utilisateur regarde actuellement produira une impulsion de son propre chef sortie, et également envoyer un changement de paramètre. Il existe également deux entrées String qui peuvent être utilisées pour générer un écran de démarrage sur l'écran lorsque l'Arduino s'allume.

À la suite de ce nœud se trouve un module de contrôleur LCD 16x2 de la bibliothèque standard de l'environnement XOD, mais tout type d'affichage pour lequel un module est disponible peut être utilisé pour afficher le texte de sortie ici.

  • La section Arborescence du menu

En haut de la capture d'écran de l'esquisse se trouve une structure arborescente qui, une fois compilée et que la sortie finale "racine" de l'arbre est acheminée vers l'entrée du contrôleur de menu qui l'accepte, générera automatiquement un menu navigable comme illustré dans le graphiste. Actuellement implémentés sont trois types de nœuds d'arborescence de menus, un menu de type « feuille » - un sous-menu final, sans ports d'entrée de couleur orange - cela représente une action ou un paramètre que l'utilisateur peut contrôler, un menu de type « branche » avec à la fois une entrée et une sortie, où l'utilisateur peut choisir parmi plusieurs sous-menus enfants, et un menu de type "concat" où les sous-menus sont regroupés et introduits dans l'entrée d'un menu de type branche, pour constituer un groupe de option. Il devrait, espérons-le, être un peu explicite à partir du diagramme sur la façon de câbler cet ensemble de nœuds.

La sélection de « invoquer » lorsqu'un menu de type « branche » est affiché descend dans son groupe de sous-menus associé, plutôt que de générer une sortie comme le fait un menu de type feuille. Des sous-sous-menus, des sous-sous-sous-menus, etc. sont possibles ! Des structures complexes peuvent être implémentées, limitées principalement par les ressources disponibles en RAM et en mémoire Flash du processeur d'un modèle Arduino particulier.

  • Sortie rubrique

Dans cet exemple, la section de sortie est l'endroit où les menus de type feuille s'interfacent avec le matériel externe via les broches de sortie de l'Arduino. Chaque menu de type feuille a une sortie de type impulsion qui se connecte à une bascule respective via un bus, pour activer et désactiver sa broche de sortie numérique associée. Ce type d'arrangement pourrait être utilisé pour contrôler des relais externes ou des LED, mais les sorties d'impulsions sont très générales, et l'impulsion de sortie générée lors de la sélection de "Invoke" lors de l'accès à l'écran d'un menu de type feuille pourrait être utilisée pour effectuer de nombreuses tâches, telles que mise à jour d'un nœud de type tampon XOD interne où les données de paramètre du port d'entrée de type de paramètre du contrôleur de menu sont conservées pour une utilisation future.

  • Problèmes connus actuels

Cet ensemble de nœuds a été testé et devrait fonctionner correctement avec l'Arduino Uno tel quel, mais il reste quelques problèmes qui n'ont pas été résolus à la date limite de ce projet. Actuellement, il doit y avoir un menu de type branche dans l'arborescence quelque part pour qu'un sketch soit compilé, bien que la plupart des projets voudront probablement en avoir au moins un. L'entrée de menu "supérieure" du contrôleur de menu, destinée à revenir à l'écran titre de l'interface, n'est pas actuellement implémentée mais devrait être une fonctionnalité facile pour la prochaine révision.

Les affichages à quatre lignes sont pris en charge par le nœud du contrôleur de menu, mais l'interface de menu de type feuille avec quatre lignes de saisie de texte n'a pas encore été écrite. Beaucoup d'efforts ont été déployés pour réduire la surcharge de mémoire de cet utilitaire, mais la façon dont le transpileur XOD stocke actuellement les chaînes constantes n'est pas optimale pour une surcharge de RAM très faible, et les interfaces basées sur des menus ont tendance à contenir beaucoup de texte. Pour ce projet, une solution de contournement a été développée et un ensemble de nœuds de type chaîne flash ajoutés dans le correctif pour garantir que les chaînes plus longues ne consomment pas la précieuse RAM du programme. Espérons que cela sera résolu dans une mise à jour de l'environnement XOD, mais la solution de contournement est correcte pour le moment.

L'utilisation des nœuds de type flash-string n'est pas trop pénible mais nécessite de dupliquer le patch et le code pour chaque nouvelle chaîne stockée dans la mémoire du programme, et de cliquer sur le code C++ contenu dans le nœud lui-même pour éditer la chaîne de sortie :

L'entrée "ID" des nœuds feuilles et branches n'a pas encore de fonction. L'idée est qu'il serait bon que chaque ensemble de sous-menus ait des numéros d'identification associés organisés dans l'ordre afin que l'utilisateur puisse garder une trace de sa position dans un ensemble d'affichages, mais cela nécessitera une réflexion plus approfondie sur la façon de coder cela en C++ se produire automatiquement.

  • Poursuite du travail

D'autres tests de bogues et tests sur d'autres appareils Arduino en plus des appareils AVR/ATmega tels que ARM doivent être effectués. L'ensemble actuel de types de nœuds de menu est quelque peu limitatif, il devrait y avoir plus de variété d'entrées et de sorties. Poursuivre le travail sur la réduction de la surcharge de RAM, peut-être en utilisant plus de métaprogrammation au moment de la compilation et en stockant autant de données dans la mémoire Flash plutôt que d'interconnecter/concaténer les composants de l'arborescence au moment de l'exécution.

19/02/19 - Un deuxième exemple.

Ce deuxième exemple de capture d'écran montre comment utiliser le contrôleur de menu pour prendre une valeur externe ou interne en entrée du contrôleur, afficher les valeurs actuelles et précédentes sur une page de menu souhaitée, sélectionner une nouvelle valeur et la stocker dans un tampon.

A droite le nœud menu-contrôleur est alimenté par la sortie d'un compteur, alimenté par un nœud « horloge ». Mais cela pourrait être n'importe quel type de valeur de données internes, ou une valeur externe provenant, par exemple, d'un potentiomètre connecté à une entrée analogique. La sortie du compteur est également envoyée à un nœud de formatage de chaîne et concaténée avec du texte d'affichage pour montrer la valeur actuelle reçue par le contrôleur sur la deuxième ligne de l'écran LCD, lorsque cette page de menu est affichée.

Les sorties "invoked" et "param" du menu feuille "A" sont envoyées à un nœud "buffer" à partir de la bibliothèque standard XOD. La sortie du tampon est ensuite renvoyée vers un arrangement similaire à celui d'avant, à l'exception du nœud « différer », qui est nécessaire pour rompre les boucles de rétroaction dans les esquisses XOD. La valeur stockée dans le tampon est affichée sur la première ligne de l'écran LCD.

Lorsque le nœud du contrôleur de menu reçoit une impulsion de déclenchement « invocation » du contrôleur de clavier, le nœud de sortie A émet la valeur d'entrée de paramètre du contrôleur de menu là-bas, dans ce cas la valeur du courant de compteur, et un déclencheur « invoqué » impulsion qui active la routine de mise à jour du tampon et stocke le nouveau paramètre dans le tampon. L'affichage se met alors à jour automatiquement pour refléter la nouvelle valeur stockée.

Le port de sortie du tampon peut également être acheminé vers un nombre quelconque d'autres nœuds pour modifier leur comportement afin de refléter la nouvelle valeur de données que l'utilisateur a sélectionnée :

Code

  • Bibliothèque du système de menus XOD
Bibliothèque du système de menus XODC/C++
https://xod.io/libs/bitrex/xod-menu-system-11

Ajoutez bitrex/xod-menu-system au navigateur de bibliothèques de croquis à partir de l'option Fichier -> Ajouter des bibliothèques... depuis l'environnement XOD.
Aucun aperçu (téléchargement uniquement).

Schémas

Ouvrir directement à l'aide de l'IDE XOD xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball

Processus de fabrication

  1. Décodeur DTMF utilisant uniquement Arduino
  2. Créer un moniteur Ambilight à l'aide d'Arduino
  3. Machine à LÉVITATION ULTRASONIQUE utilisant ARDUINO
  4. Animation LCD et jeux
  5. Voltmètre DIY utilisant Arduino et Smartphone
  6. Moniteur de fréquence cardiaque utilisant l'IoT
  7. WebServerBlink avec Arduino Uno WiFi
  8. Compteur de voitures utilisant Arduino + Traitement + PHP
  9. Jeu Dino automatisé utilisant arduino