–
Mise à jour le 07/07/2018 : L’objectif de ce programme, très simple, est d’aller lire régulièrement la valeur correspond à la position de la barre de progression sur la tablette Nextion HMI. Ici nous utilisons la bibliothèque officielle, créée par ITEAD, qui permet de déclarer précisément le composant « barre de progression représentant la position (angle) cible », et ensuite de lire la valeur.
–
Sommaire :
- Description de l’affichage LCD Tactile 7″ Nextion HMI
- Description du tutoriel avec utilisation de la bibliothèque officielle
- Programme pour Arduino 2560 Mega.
- Paramétrage de l’ecran Nextion.
- Pour tout probléme
- Retour au menu principal.
Description de l’affichage LCD Tactile 7″ Nextion HMI |
Caractéristiques et spécificités :
- Modèle : IM150416007
- Dimensions d’affichage : 7,0”
- Résolution d’affichage : 800 x 480
- 65 K de vraies couleurs RVB
- Interface d’affichage : sérielle
- Contrôleur d’affichage : non
- Extension : socle pour carte SD
- Écran : tactile
- Dimensions de la carte : 181 x 108 mm
- Poids : 337 g
- Interface d’affichage TFT : N/C
.
Retour au sommaire
Description du tutoriel |
Dans ce tutoriel, nous déplaçons la position (Angle en degré) d’un servomoteur, en fonction de la position de la barre de progression sur la tablette Nextion. Dans la mesure où tout le monde n’a pas la possibilité de mettre le servomoteur sur un support approprié, nous utilisons la fonction map() pour éviter le déplacement vers un angle trop faible, et qui amènerait ainsi l’extrémité du servomoteur en collision avec l’endroit où il est posé
Exemple de l’utilisation de la fonction Map :
1 2 3 4 5 6 7 |
// // // Lecture de la valeur de la barre qui défini l'angle // (Rappel: la librairie ne permet PAS d'attacher une // fonction à appeler (callback) lorsqu'un changement intervient dessus). angleProgressBar.getValue(&va_rotation); va_rotation = map(va_rotation, 1, 180, 15, 150); |
Nous avons également mis en place un système de temporisation non bloquant pour ne pas stresser le matériel. C’est à dire qu’une exécution de la fonction loop() rendra directement la main, s’il n’y a pas eu un délai suffisant (500 millisecondes dans notre cas) depuis la dernière exécution qui a réellement lu la valeur et agit sur le servomoteur.
Exemple
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// // // Afin d'éviter de trop stresser le matériel, // on ne va communiquer avec la tablette Nextion // que toutes les REFRESH_DELAY_MILLIS millisecondes // (constante définie en début de ce programme). if (millis()-temps>REFRESH_DELAY_MILLIS) { // Mise à jour de la variable de temps. temps=millis(); // Initialisation de la boucle de la librairie ITEAD. nexLoop(nex_listen_list); |
.
Retour au sommaire
Programme pour Arduino 2560 Mega |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
/* * * Le 30/06/2018 * RedOhm Bertrand BENOIT * * Programme permettant à l'Arduino de lire des informations * d'une Nextion, et d'actionner un servo moteur en conséquence. * * Niveau de difficulté 4/10 * * Pour information * @author <mailto:redohm@bertrand-benoit.net>Bertrand BENOIT</mailto> */ // Dans ce montage, il est impératif de réaliser ces branchements : // - Nextion MEGA2560 // - TX → RX2 // - RX → TX2 // - la tablette Nextion et l'Arduino doivent impérativement avoir une masse commune. // Cette librairie permet à une carte Arduino de contrôler des servomoteurs. #include <Servo.h> // Cette bibliothèque vous permet de communiquer avec les tablettes Nextion. // Ce tutoriel utilise la version officielle de la librairie de ITEAD LIB // (https://github.com/itead/ITEADLIB_Arduino_Nextion). #include "Nextion.h" #include "NexProgressBar.h" // Définition des broches utilisées du servo moteur. #define SERVO_PIN 10 // Définition du délai, en millisecondes, //entre 2 prises en compte des changements sur la tablette Nextion. #define REFRESH_DELAY_MILLIS 500 // Définition des ID des composants qui nous intéressent //(à aller chercher sur le programme .HMI de votre Nextion). #define NETXION_PAGE_ID 0 #define NETXION_SPEED_SLIDER_ID 1 // Création des instances, permettant de "communiquer" // directement avec les éléments de la tablette Nextion. // Important: le nom du composant est aussi important que // son identifiant, les 2 doivent rigoureusement correspondre // à ce qui est défini sur la tablette Nextion. NexProgressBar angleProgressBar = NexProgressBar(NETXION_PAGE_ID, NETXION_SPEED_SLIDER_ID, "h0"); // Définition des composants sur lesquels on souhaite // recevoir les évènements.IMPORTANT: la barre de // progression ne fait pas partie des composants // dont on peut recevoir les évènements, car ce n'est // pas la pression, ou le relâchement qui nous intéresse. // on défini donc une liste de listener vidre NexTouch *nex_listen_list[] = { NULL }; //------ creation des objets de type servo avec leurs variables ------- // // Crée un objet de type "Servo", nommé -> rotation_servo Servo rotation_servo; // variable contenant la valeur de la rotation uint32_t va_rotation; // Declaration de la variable de temps, qui sera utilisée // pour différer les instructions, sans être bloquant // (comme la fonction delay), pour éviter de stresser le matériel. unsigned long temps = millis(); int moveServo(int angle) { // Positionne le servo au centre rotation_servo.write(angle); // Ecrit des données sur le port série. // et affiche sur l'ecran le message suivant -> // Initialisation du servomoteur de la rotation -> dbSerialPrint("Déplacement du servomoteur avec l'angle de rotation=" ); // Affiche sur l'écran la valeur de la variable va_rotation dbSerialPrintln(angle); int currentAngle = rotation_servo.read(); dbSerialPrint("Angle lu depuis le servomoteur=" ); // Affiche sur l'écran la valeur de la variable va_rotation dbSerialPrintln(currentAngle); return currentAngle; } void setup() { // Pour des raisons de performances sur les entrées/sorties, // il est préférable de commenter l'initialisation du port Série. // Réactivez le, uniquement à des fins de Debug. //Serial.begin(9600); // Initialisation du servomoteur de la rotation // associe le servomoteur a la broche 3 rotation_servo.attach(SERVO_PIN); // variable contenant la valeur de la rotation va_rotation = 90 ; // Positionne le servo au centre moveServo(va_rotation); // Initialisation de la librairie ITEAD pour Nextion. nexInit(); dbSerialPrintln("Setup successfully completed."); } void loop() { // // // Afin d'éviter de trop stresser le matériel, // on ne va communiquer avec la tablette Nextion // que toutes les REFRESH_DELAY_MILLIS millisecondes // (constante définie en début de ce programme). if (millis()-temps>REFRESH_DELAY_MILLIS) { // Mise à jour de la variable de temps. temps=millis(); // Initialisation de la boucle de la librairie ITEAD. nexLoop(nex_listen_list); // Lecture de la valeur de la barre qui défini l'angle // (Rappel: la librairie ne permet PAS d'attacher une // fonction à appeler (callback) lorsqu'un changement intervient dessus). angleProgressBar.getValue(&va_rotation); va_rotation = map(va_rotation, 1, 180, 15, 150); moveServo(va_rotation); } } |
Retour au sommaire . |
Paramétrage de l’écran Nextion HMI |
Attribut générique en fonction de l’objet sélectionné .
id – Le numéro unique de l’objet permettant de l’identifier.
objname – Le nom de l’objet , paramétre que l’on peut changer .
type – Le type numérique de l’objet .
vscope – La porté de la variable , ceci permet que les variables puissent etre accessibles ou non depuis d’autres pages .
sta – Le type de remplissage ( couleur ou une image )
x – La position horizontale du coin superieur gauche de l’objet .
y – La position verticale du coin superieur gauche de l’objet .
w – La largeur de l’objet en pixels .
h – La hauteur de l’objet en pixels .
Retour au sommaire . |
Pour tout probléme |
Pour tout problème de téléchargement ou pour nous suivre sur les réseaux sociaux voici les plateformes sur lesquelles nous éditons.
Cliquez sur celle qui vous intéresse .