Bonjour,
Je me lance dans la programmation en C sur microcontrôleur et je rencontre un problème d'ordre bizarre, voire inexpliqué.
Voici le code qui pose un soucis :
Le problème c'est que la ligne verticale (longitude) ne s'affiche pas car elle est hors de l'écran (position longitude=196 sur un écran de 128 pixels). Cela peut être solutionné en affectant la valeur au paramètre "lon".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 void Display_Cursor(signed int lat, signed int lon) { unsigned char latitude_y, longitude_x; //Latitude and Longitude scaling for 128x64 display: //Latitude: Input range is -90 to 90 degrees //Longitude: Input range is -180 to 180 degrees latitude_y = ((61*(90-lat))/180)+1; longitude_x = ((125*(lon+180))/360)+1; //Cursor drawing: Glcd_H_Line(0, 127, latitude_y, 2); Glcd_V_Line(0, 63, longitude_x, 2); //Display latitude and longitude "translation" to fit on the screen IntToStr(latitude_y,dispLatStr); IntToStr(longitude_x,dispLonStr); Glcd_Write_Text(dispLatStr,0,6,1); Glcd_Write_Text(dispLonStr,0,7,1); //Blinking Delay_ms(500); Glcd_Fill(0x00); }
Pour résumer :
- Si le paramètre "lon" de la fonction est utilisé tel quel (sa valeur est de 166 à l'appel de la fonction), le résultat du calcul est faux.
- Si je met "lon = 166;" dans la fonction, le résultat est correct.
Ma question est simple : comment se fait-il qu'avec une même valeur, le résultat d'un calcul puisse être différent ?
Question bonus : pourquoi ce problème n'est pas rencontré pour le calcul de la latitude ?
Si vous avez besoin de plus de renseignements, n'hésitez pas.
Merci d'avance pour vos réponses.
Partager