Bonjour, je suis éleve de terminal S et je viens demander des conseils par rapport à mon projet qui se trouve être une station météo.
Ma partie consiste à afficher les différentes données récoltées par les capteurs sur un écran Oled 1'3 (https://www.gotronic.fr/art-afficheur-oled-1-3-i2c-tf051-28512.htm#complte_desc).
La partie qui me pose problème est l'affichage de la direction du vent (girouette) sur cet écran, la direction du vent est donné par un codeur incrémental (https://fr.rs-online.com/web/p/codeurs-rotatifs/2056869/).
J'ai d'abord fait deux bouts de code (un pour le codeur et un pour l'afficheur), jusque-là tout marchait à merveille.
J'ai ensuite voulu afficher les valeurs du codeur sur mon écran en regroupant les deux codes et voilà où les problèmes ont commencé.
Le moniteur, qui est sensé afficher la valeur du codeur en ajoutant 1 pour chaque pas, est devenu lent et non saccadé, il n'affichait plus les valeurs une par une.
L'écran, sur lequel était affiché des phrases et Bitmaps statiques, ne voulait plus afficher l'entièreté du message qu'il devait écrire.
Voici mon code:
void loop(void) {
u8g.firstPage(); //démarer le dessin
do {
text_pluie(); //dessiner ce qu'il y a dans text
p=0;
while((counter > 0) && (counter < 31)|| (counter < -469) && (counter > -499)){
if(p==0){
text_vent_Nord();
p=1;}
}
while((counter > 31) && (counter < 62)|| (counter < -437) && (counter > -469)){
if(p==0){
text_vent_NNE();
p=1;}
}
while((counter > 62) && (counter < 93)|| (counter < -406) && (counter > -437)){
if(p==0){
text_vent_NE();
p=1;}
}
while((counter > 93 ) && (counter < 125)|| (counter < -375) && (counter > -406)){
if(p==0){
text_vent_ENE();
p=1;}
}
while((counter > 125) && (counter < 156)|| (counter < -344) && (counter > -375)){
if(p==0){
text_vent_Est();
p=1;}
}
while((counter > 156) && (counter < 187)|| (counter < -312) && (counter > -344)){
if(p==0){
text_vent_ESE();
p=1;}
}
while((counter > 187) && (counter < 219)|| (counter < -281) && (counter > -312)){
if(p==0){
text_vent_SE();
p=1;}
}
while((counter > 219) && (counter < 250)|| (counter < -250) && (counter > -281)){
if(p==0){
text_vent_SSE();
p=1;}
}
while((counter > 250) && (counter < 281)|| (counter < -219) && (counter > -250)){
if(p==0){
text_vent_Sud();
p=1;}
}
while((counter > 281) && (counter < 312)|| (counter < -187) && (counter > -219)){
if(p==0){
text_vent_SSO();
p=1;}
}
while((counter > 312) && (counter < 344)|| (counter < -156) && (counter > -187)){
if(p==0){
text_vent_SO();
p=1;}
}
while((counter > 344) && (counter < 375)|| (counter < -125) && (counter > -156)){
if(p==0){
text_vent_OSO();
p=1;}
}
while((counter > 375) && (counter < 406)|| (counter < -93) && (counter > -125)){
if(p==0){
text_vent_Ouest();
p=1;}
}
while((counter > 406) && (counter < 437)|| (counter < -62) && (counter > -93)){
if(p==0){
text_vent_ONO();
p=1;}
}
while((counter > 437) && (counter < 469)|| (counter < -31) && (counter > -62)){
if(p==0){
text_vent_NO();
p=1;}
}
while((counter > 469) && (counter < 499) || (counter < 0) && (counter > -31)){
if(p==0){
text_vent_NNO();
p=1;}
}
text_vitesse();
text_degre();
Bitmap(); //dessiner ce qu'il y a dans Bitmap
}
while( u8g.nextPage() ); //fin du dessin
if( counter != temp ){ //si le conteur est différeent de 0
Serial.println (counter); //on affiche le conteur
temp = counter; //0 prend la valeur du conteur
}
if( counter >= 499 ){ //si le conteur fait un tour, il est remis à 0
counter = 0;
}
if( counter <= -499 ){
counter = 0;
}
}
Je n'ai mis que le Void Loop car j'imagine que c'est ici que le temps est perdu.
Ma question est la suivante : comment puis-je faire pour régler ce problème de fluidité sachant que j'ai changé la carte (passé de la UNO à la Méga) et ça n'a rien arrangé ?
Merci d'avance, Quentin