Anthias
mail

Rolex calculée par Arduino

Nextion


Introduction
L'absence des fonctions trigonométriques
Première méthode : 60 positions
Deuxième méthode : 0 ... 360 degrés
Exemple : Aiguille simpliste

Rolex calculée par Nextion arduino

Retour page principale Nextion arduino


Maj : 05/03/20

Abstract :
Rolex emulation with a very different approach. Nextion only displays what Arduino send. All calculations are made by Arduino.
Best solution, but serial link is slow...

Résumé :
Emulation Rolex avec une approche très différente. Nextion n'affiche que ce que Arduino envoie. Tous les calculs sont faits par Arduino.
La meilleure solution, mais la liaison série est lente...

arduino  Introduction

Cette application est une démonstration d’affichage complexe sans aucun calcul côté Nextion, tout est fait dans l'Arduino.

Nous allons voir deux approches complétement différentes.
p Si l’on ne s’intéresse qu’à des cadrans d’horloge, soixante positions pour les secondes suffisent, tous les 6 degrés.
p Pour des affichages généralistes, il faut une résolution à mieux que le degré en utilisant une variable flottante, car la conversion de degrés en radians passe par une multiplication par Pi.

L’Arduino calculant très vite et ayant de l’espace mémoire, les deux méthodes sont équivalentes.
Cela ne change rien côté Nextion, car pour tracer des lignes, il faudra toujours envoyer les coordonnées des extrémités, le temps de calcul de l’Arduino étant dérisoire par rapport au transfert série.

baro

Haut de page

arduino Première méthode : 60 positions (chaque seconde du cadran de montre)

Cela était utile quand les calculs étaient traités dans le Nextion pour économiser le peu de mémoire disponible, mais en calculant par l’Arduino, ces limites n’existent plus et cette méthode restrictive n’a plus aucun d’intérêt.

 

Haut de page

arduino Deuxième méthode : 360 positions (chaque degré, aiguille généraliste)

En calculant par l’Arduino, la méthode généraliste des 360 degrés sera la seule reconnue car universelle pour les cadrans de montre et divers de galvanomètres ou tout autre affichage angulaire.
Il est évident que l’on pourrait pousser plus loin que le degré la résolution, mais cela n’a aucun intérêt car la résolution de l’écran étant seulement de 480x320, une variation angulaire inférieure au degré ne changerait pas le pixel cible.
Les calculs trigonométriques sont triviaux et très rapides, mais malheureusement il n’est pas possible d’implanter une fonction dans le Nextion qui dessine une aiguille élaborée en lui passant simplement les deux points des extrémités, il faudra envoyer chaque fois des dizaines de commandes lignes et cercles par la liaison série lente.

Une fois de plus, il est évident que le firmware du Nextion est loin d’être terminé, il semble que le développement ait été abandonné avant la moitié de sa finalisation et il n’y a aucune évolution depuis des années, ce produit semblant abandonné par Itead studio qui vit sur une vielle étude, Sonoff se désintéresse complètement de ce produit.

Haut de page

arduino Exemple : Aiguille simpliste

Pour illustrer l’intérêt d’utiliser les fonctions sinusoïdales en graphisme, nous allons montrer comment créer des aiguilles complexes sur un cadran de montre ou de galvanomètre.
Il est très facile de dessiner une aiguille simplifiée, limitée à un simple segment d’un pixel :

Il faut d’abord définir les diverses grandeurs.
° Le centre, l’axe de l’aiguille, de coordonnées Xc, Yc
° La longueur de l’aiguille R1 (en nombre de pixels, toujours positif)
° La base de l’aiguille R0.
°° Si R0 = 0, l’aiguille part du centre.
°° Si R0 > 0 (avec R0<R1) aiguille décalée du centre.
°° Si R0 < 0, l’aiguille dépasse vers l’arrière comme la trotteuse de la Rolex.
° Il ne reste plus qu’à fixer l’angle Alpha (en choisissant ce que l’on veut comme angle 0 degré) et nous avons tout pour calculer le segment minimaliste de notre aiguille de 1 pixel d’épaisseur, de coordonnées X0, Y0 et X1,Y1.
Le calcul des coordonnées est élémentaire :

X0= Xc + R0 * sin (Alpha) Y0= Xc + R0 * cos (Alpha) X1= Xc + R1 * sin (Alpha) Y1= Xc + R1 * cos (Alpha)

Une seule instruction crée ce segment sur le Nextion : line X0, Y0, X1,Y1, color

Pour cela, à la différence de l'exemple avec Nextion seul, l'Arduino calcule tout et envoie une ligne vers le Nextion à 115 kb pour qu'il l'exécute.

Quelques lignes passent vite, mais quand il s'agit d'envoyer une courbe graphique de 360 segments, sous forme de 360 longues lignes de commandes, cela prend trop de temps, en tout 0.7 seconde.

Haut de page

arduino Aiguille complexe

L’opération se complique maintenant pour créer une aiguille épaisse.

Cette application est une démonstration d’affichage complexe, tous les calculs trigonométriques étant exécutés par l'Arduino.
Le principe est d’afficher un fond d’écran (c’est extrêmement rapide) sur lequel se superposent les couches d’aiguilles, envoyées sous forme de segments et de cercles par l'Arduino.
Un éclaté permet de comprendre la construction des aiguilles.

Pour l'émulation Rolex, les trois aiguilles demandent une centaine de commandes, c'est long à passer en 115 kb, et cela produit un inévitable scintillement, qui n'existe absolument pas quand les calculs sont faits côté Nextion.

SinCos

Voici le résultat final.
Les aiguilles sont en couleur car le mode <debug> est activé, afin de générer au pixel près toutes les dimensions des aiguilles.

Sortie sériesur le terminal à chaque seconde :
10:10:9 = Heure affichée
305:60:54 = Angles des heures, minutes, secondes
Duration Rolex : 610 mSec = Temps d'envoi de la trame (c'est long...)
Nb caracters to Nextion = 2880 = nombre d'octets envoyés sur Com 2 (c'est très limite car le buffer d'instructions ne fait que 1024 octets)
Fonctions trigo = 930 (c'est beaucoup, mais impossible de réduire)

Rolex

Le principe de construction est strictement identique à celui décrit dans Rolex émulée sur Nextion arduino, mais cette fois les choses sont bien plus faciles, car L’Arduino programmé en C dispose des fonctions sinusoïdales et des appels de sous routines, ce qui change tout et évite l’incroyable lourdeur de répéter bêtement des dizaines de lignes identiques chaque fois qu’il faut faire le moindre calcul sous Nextion.

Tous les détails et logiciels sont dans cette page à jour au : 220511

eclate

Haut de page

© Christian Couderc 1999-2024     Toute reproduction interdite sans mon autorisation


* Page vue   19219   fois       IP : 3.146.107.144

 Haut de page         Dernière retouche le 20 Mars 2022 à 14 h         Retour page précédente

   Collector