[Projet] Un tableau de bord numérisé

J'aime bien barbudor, car il soulève souvent des questions rigolotes ou utiles.

barbudor:

Super_Cinci:
Exemple pour l'aiguille de vitesse, qui doit tourner sur 324°pour 0 à 180km/h ...

Je vois qu'il n'y'a pas que le tableau de bord qui est "tuné" dans cette voiture XD

Alors pas du tout, j'ai repris le format du compteur d'origine, en calculant l'angle de l'aiguille sur 40 et 90km/h. J'ai pris l'habitude d'avoir l'aiguille à la verticale pour 90Km/h... le compteur d'origine est marqué jusqu'à 180, ce n'est pas pour rien, car j'ai déjà emmené l'aiguille jusque là (sur circuit, hein, parce que sur route, c'est pas vraiment autorisé :grin: ). On prend vite des habitudes et repères visuels, donc je garde le 90 à la verticale et le 0 à 20° en bas...

barbudor:

Le code ci-dessus marche super, je n'ai pas encore testé les aiguilles à rayon de 40px, mais il me tarde de le faire!

Je vois que tu efface la ligne précédente avant de tracer la nouvelle.
Tu n'as pas de possibilité de travailler en double buffer ?

Qu'entends tu par là? je vois pas trop de quoi tu parles... je me suis posé la question d'utiliser les 22 pages graphiques dispo dans le LCD lui-même, mais il faut de toute façon effacer les vieilles lignes un jour où l'autre...

barbudor:

  • volatile est un mauvais choix (...). Dans ton cas, les valeurs sont figées et donc c'est plutôt le mot clefs "const" que tu devrais utiliser.

Je n'ai pas osé définir un tableau de constantes, ne sachant pas comment le compilateur allait réagir. Si tu me dis que c'est mieux, alors je vais y penser. Le code actuel fait 6500 octets sur les 14300 dispos, donc si les tableaux de constantes vont dans la flash, ça m'intéresse! (il y a aussi les tables de caractères en const...) Je crois que les simples variables déclarées en const sont traduites à la compilation, non?

barbudor:

  • l'index étant calculé %25, les valeurs possible sont de 0 à 24. Donc la taille du tableau devrait être a0_xy[25] (index de 0 à 24) au lieu de a0_xy[26] (index de 0 à 25) puis que l'index [25] ne sera jamais utilisé.

Oui, et c'est une erreur de ma part. il faut que je recalcule ma série de coordonnées pour tomber sur pile 25 points. Mais de visu sur un sweep, l'aiguille ne semble pas sauter de point. je peux me contenter de virer les index N°25 pour gagner deux octets... :smiley:

barbudor:
Tu peux aussi éviter le %25 qui implique une division entière ce qui coûte pas mal d'instructions (essaye de mesurer son exécution)
Puisque tu fais déjà une série de tests par rapport à 15, 40, .... dans chaque test tu peux calculer index comme une simple addition ou soustraction.

ça, c'est pas con, merci!

barbudor:

  lcd_line(x0 - 4, y0 - 4, x00, y00, PUT);  // dessin de l'aiguille en 5 segments

Les tracés multiples décalés de +/- 4 pixels c'est pour faire plus épais ?

Oui, je n'ai pas trouvé comment dessiner une aiguille pleine qui tourne sans perdre de temps. Ca donne un rendu rigolo, on a l'impression que l'aiguille est en 3D et qu'elle tourne sur elle-même... (à défaut...) Pour les petites aiguilles (de 40px), j'ai mis +/-4 aussi, mais je vais descendre à +/-3 voire +/-2, mais ce n'est aussi qu'un détail.

barbudor:
A quand la vidéo?

Malheureusement, je n'ai plus de quoi filmer, et mon apn me sort des .MOV à 5Mo/s, et je n'arrive pas à les réencoder en avi ou mpeg (saloperie de format propriétaire tiens!) Mais dès que je peux, je m'y mets!

une photo en attendant?


les valeurs collées pour la photo : vitesse = 124, jauge haut (carburant 36.4L) = 173 et jauge bas (température eau 89.5°) = 179. les valeurs des petites jauges sont affichées au dessus ou en dessous de l'aiguille selon sa position, on voit même que je n'efface pas la virgule quand le texte passe de l'autre côté, mais ce n'est qu'un détail...

il y a un faux contact dans le potar de contraste (qui fait 2mm de diamètre...), faudra que je le change.

Côté animation, j'ai mis dans le loop() un sweep genre :

for (vitesse = 0; vitesse <= 180; vitesse--){
  vitesse_affiche();
  galva_value[0] = vitesse;
  galva_affiche(0);
  galva_value[1] = vitesse;
  galva_affiche(1);
  delay(125);
}

C'est vraiment fluide, et on n'est pas loin des 8 changements par seconde, donc mes codes doivent être assez rapide (je mesurerai à l'oscillo pour avoir une idée précise!)