Comptage de vent Anémomètre + LCD

Bonjour.

Je suis débutant en Arduino et me suis lancé dans un projet peut être un peu gros. Mon but est de connecter un anémomètre que j’ai pu récupérer, et d’afficher les valeurs en temps réel sur un écran LCD.

Je possède un Arduino UNO et un écran LCD 128*32

J’ai suivi ce tutoriel pour tout ce qui est comptage de vent et jusque là je n’ai pas de problèmes.

C’est la toute première fois que j’utilise un écran LCD, et je vous avoue que j’ai du pas mal bidouiller pour y afficher les données.

Ici j’ai maintenant 2 problèmes :

  • J’affiche la direction du vent en degré. L’auteur a prévu une partie du programme à la “conversion” des données brut en direction ( nord, sur, est et ouest) mais je n’arrive pas à afficher ça sur l’écran. Je n’arrive à afficher que les variables qui ont été déclarées au début, mais je ne comprend pas comment il arrive à afficher NORD sur la console par exemple.

J’ai ajouté une ligne à ce programme pour convertir la vitesse du MPH en klm/h.
J’ai aussi ajouté la partie LCD

Je parle de cette partie du programme :

// Converts compass direction to heading
void getHeading(int direction) 

{

if(direction < 22)
Serial.print(" N");
else if (direction < 67)
Serial.print(" NE");
else if (direction < 112)
Serial.print(" E");
else if (direction < 157)
Serial.print(" SE");
else if (direction < 212)
Serial.print(" S");
else if (direction < 247)
Serial.print(" SW");
else if (direction < 292)
Serial.print(" W");
else if (direction < 337)
Serial.print(" NW");
else
Serial.print(" N");
}
  • Mon second problème est un peu plus facile à résoudre je pense. En utilisant les variabes déclarées j’arrive à afficher la vitesse et la direction en degré sur 2 lignes. J’aimerais juste ajouter sur chacune des lignes une légende, par exemple “klm/h” pour la vitesse mais je n’arrive pas à comprendre comment afficher à la fois une variable et une phrase sur la même ligne. J’ai essayé pas mal de choses mais toujours eu des messages d’erreur.

Voilà ce que j’arrive à afficher pour le moment et le programme en pièce jointe.

Comptage_vent.ino (4.35 KB)

J'affiche la direction du vent en degré. L'auteur a prévu une partie du programme à la "conversion" des données brut en direction ( nord, sur, est et ouest) mais je n'arrive pas à afficher ça sur l'écran. Je n'arrive à afficher que les variables qui ont été déclarées au début, mais je ne comprend pas comment il arrive à afficher NORD sur la console par exemple.

Pour afficher un message dans la console, tu utilises les instructions Serial.

  • Serial.begin pour initier la communication (dans le setup)
  • Serial.print ou Serial.println pour afficher
    C'est ce qui apparaît dans les lignes de code que tu as jointes.

Mon second problème est un peu plus facile à résoudre je pense. En utilisant les variabes déclarées j'arrive à afficher la vitesse et la direction en degré sur 2 lignes. J'aimerais juste ajouter sur chacune des lignes une légende, par exemple "klm/h" pour la vitesse mais je n'arrive pas à comprendre comment afficher à la fois une variable et une phrase sur la même ligne. J'ai essayé pas mal de choses mais toujours eu des messages d'erreur.

Il y a plusieurs solutions à ça. L'une d'elles est de tout mettre dans un tableau de caractères que tu vas afficher en bloc sur ton écran (l'image est petite mais ça ressemble plus à un OLED qu'à un LCD).
Tu définis un tableau de caractères d'une taille suffisante pour y caser l'ensemble de ton texte, ou bien du nombre de caractères maximum affichables sur une ligne de ton écran

Ensuite, avec la fonction sprintf, tu y écris ton texte. Il te reste à l'afficher sur l'écran.
sprintf utilise la notion de format d'écriture du C. Par exemple pour afficher un int tu utilises le format %d. Pour le forcer à s'afficher sur 3 caractères c'est %3d
Pour afficher un caractère, c'est %c et un ensemble de caractères c'est %s

Exemple

char buffer [30];
sprintf (buffer, "Direction %c vitesse %3d km/h",direction, vitesse);

direction est un char qui contient par exemple 'N' et vitesse un int
Si vitesse vaut 30 et direction vaut N, buffer contiendra :

Direction N vitesse  30 km/h

Ta direction peut être un peu plus complexe, puisqu'elle peut contenir 1 ou 2 lettres. Il faudra la mettre dans un char* (tableau) et utiliser le format %s

En fait j'arrive a tout afficher dans le moniteur série. Vois par toi même, j'ai bien la direction qui renvoi l'information en degré puis en N/S etc ....

J'imagine que le bout de code que j'ai copier dans le premier message correspond au tableau de valeur dont tu parles ?
Sinon je ne sais pas trop comment faire ça.

Mon besoin c'est juste de l'afficher sur mon petit écran avec uniquement deux lignes :

  • vitesse en klm/H
  • direction degré + traduction ou alors uniquement la traduction ( N, S, E, O)

Pour le moment ce que j'arrive à faire, c'est afficher une ligne avec la vitesse mais sans faire apparaître " klm/h" après
et j'arrive sur une seconde ligne à faire apparaître la direction uniquement en degrés.

De base sur le programme que j'ai je n'arrive pas à comprendre comment l'auteur va chercher l valeur N, S etc ... et le lie à la direction pour l'afficher dans la console.

PS: mon écran est petit c'est pourquoi je ne veux utiliser que deux lignes sans trop de caractères. C'est bien un écran OLED de 128*32 pixels.

Bon j’ai pu avancer de mon côté. Je bloquait depuis hier d’où mon message mais un pote m’a mis sur la voie.

Le tableau de valeur était entré avec une fonction “viod”

On a donc changé le "void getHeading(int direction) " en "String getHeading(int direction) " et chaque lettre une fonction qui nous renvoi une donnée pour chaque élement du tableau.

// Converts compass direction to heading
String getHeading(int direction) 

{

if(direction < 22)
return(" N");
else if (direction < 67)
return(" NE");
else if (direction < 112)
return(" E");
else if (direction < 157)
return(" SE");
else if (direction < 212)
return(" S");
else if (direction < 247)
return(" SW");
else if (direction < 292)
return(" W");
else if (direction < 337)
return(" NW");
else
return(" N");
}

En ce qui concerne mon autre soucis, je n’avais juste pas assimilé que dans la commande :

display.println(dir)

Le ln correspond à a un retour à la ligne. J’ai donc pu ajouter une ligne sans le LN pour ajouter mon petit klm/h

display.print(getKnots(WindSpeed));
  display.println(" klm/h");

Je vais essayer d’optimiser un peu ça pour lui que ça ai un temps de réponse beaucoup moins long et je pense que je serais bon =)

Merci pour ton aide :slight_smile: