Une question pas forcément facile, d'autant que j'ai du mal à expliquer le truc avec mes compétences limitées en électronique:
j'ai un arduino Uno, un capteur baromètre/thermomètre (qui indique aussi l'alttitude) et un afficheur 7 segments avec 4 chiffres.
Le capteur et l'affichage de 4 chiffres sur le 7 segments fonctionnent bien indépendamment l'un de l'autre. Mais mon but est d'afficher l'altitude mesurée sur l'afficheur. Et c'est là que le bat blesse, parce que prendre la mesure de l'altitude prend un poil moins de 400ms (~380ms), ce qui donne un délai d'autant entre deux loops.
Or ça décale l'affichage des segments d'autant, et donc je vois chaque segment s'allumer à la suite (un segment sur chacun des 4 chiffres), et jamais des chiffres complets. C'est joli, ça rappelle le snake du nokia 3310, mais ça ne marche pas.
Si je comprends bien, le problème est que mon afficheur 7 segments est multiplexé, et que la fonction de rafraîchissement de la librairie que j'utilise (SevSeg) doit tourner au moins 8 fois/seconde pour que l'affichage ait l'air fixe. Idéalement un peu plus.
Mon loop() est super simple :
Code:
Lire l'altitude
Convertir le float de l'altitude en int
Envoyer l'int sur le 7 segments
Rafraîchir l'afficheur
Un loop qui ne ferait qu'afficher une constante sur l'afficheur fonctionne bien tant que je ne lis pas l'altitude, par contre dès que je lis l'altitude, même afficher une constante sur l'afficheur ne marche plus, ça repart en snake.
Une idée de modif software pour désynchroniser la lecture de l'altitude et l'affichage ? Ou je dois forcément changer le matériel ?
[edit]Pour plus de précisions, le code suivant :
Code:
void loop() {
currT = millis();
altitude = baro.getAltitude();
int ialt = altitude;
Serial.print("curr=");
Serial.print(currT);
Serial.println();
}
M'affiche les résultats suivants :
Code:
curr=391
curr=771
curr=1149
curr=1528
curr=1907
curr=2287
curr=2666
curr=3045
curr=3425
curr=3804
curr=4183
curr=4562
curr=4941
etc...