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 :
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);
}
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".
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.