Rolex calculée par Arduino |
Maj : 05/03/20
Abstract :
Résumé : |
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.
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.
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.
Le principe de construction est strictement identique à celui décrit dans Rolex émulée sur Nextion , 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 |