GPS Koordinate am LCD

Gast #2717910
Hallo zusammen,
ich benutze folgende Funktionen:
1
uint16_t GET_X_POS(double y_aktuell, double y_ziels, int zoom) 
2
{
3
       uint16_t ret_wert=190;
4
       uint32_t zoomen=10000;
5
       double differenz=0.0;
6
     if (zoom == 0)
7
     {
8
       zoomen = 10000;
9
     }
10
     else if (zoom == 1)
11
     {
12
       zoomen = 100000;
13
     }
14
     else if (zoom == 2)
15
     {
16
       zoomen = 1000000;
17
     }
18
     else
19
     {
20
       zoomen = 10000;
21
     }
22
       
23
       differenz=(y_aktuell-y_ziels)*zoomen; 
24
       if(differenz>183) differenz=183.0;
25
       if(differenz<-183) differenz=-183.0;
26
 
27
       ret_wert=190+(uint16_t)(differenz);
28
 
29
       return(ret_wert);
30
}
31
uint16_t GET_Y_POS(double x_aktuell, double x_ziels, int zoom) 
32
{
33
       uint16_t ret_werty=136;
34
       uint32_t zoomen=10000;
35
       double differenzy=0.0;
36
     if (zoom == 0)
37
     {
38
       zoomen = 10000;
39
     }
40
     else if (zoom == 1)
41
     {
42
       zoomen = 100000;
43
     }
44
     else if (zoom == 2)
45
     {
46
       zoomen = 1000000;
47
     }
48
     else
49
     {
50
       zoomen = 10000;
51
     }   
52
       differenzy=(x_aktuell-x_ziels)*zoomen; 
53
       if(differenzy>133) differenzy=133.0;
54
       if(differenzy<-114) differenzy=-114.0;
55
 
56
       ret_werty=136+(uint16_t)(differenzy);
57
 
58
       return(ret_werty);
59
}

wenn sich der wert y_aktuell oder x_aktuell um ein punkt ändert springt 
die anzeige von ganz oben nach ganz unten oder von ganz links nach ganz 
rechts und umgekehrt. kommischer weisse nicht immer.

Kann mir jemand sagen warum das so ist?
Oder was benutzt Ihr für funktionen?

Gruss
Milan
Gast #2728105
Hallo zusammen,
also mein LCD ist 380 * 272 pixel gross!

Mein RC Auto ist mit GPS ausgerüsstet. Und wird als ein Dreieck in der 
mitte des LCD-s angezeigt. Der ist immer in der mitte.

Ich speichere 2 koordinaten und will die am LCD anzeigen.

Die zoom funktion mahl vergessen.

1 pixel ist dabei 1.1 m gross.
1
uint16_t GET_X_POS(double y_aktuell, double y_ziels, int zoom) 
2
{
3
       uint16_t ret_wert=190; //mitte display
4
       uint32_t zoomen=10000; // für 1.1 m pro pixel
5
       double differenz=0.0;
6
    
7
       
8
       differenz=(y_aktuell-y_ziels)*zoomen; // berechnung
9
       if(differenz>183) differenz=183.0;  //max für rechts
10
       if(differenz<-183) differenz=-183.0;  // max für links
11
 
12
       ret_wert=190+(uint16_t)(differenz); // berechnung von mitte lcd
13
 
14
       return(ret_wert);
15
}

Wichtig: es wird nich navigiert, sonder nur anzeige!!!!!!!

Wie würdet Ihr das anzeigen???


Danke im Voraus
Milan
Gast #2728117
Seltsamerweise heisst die Prozedur GET_X_POS, gerechnet wird aber mit Y.

Zum Problem... was spricht gegen eine Simulation auf dem PC?Da kann man 
wenigstens Singlesteppen und alles ueberpruefen.
Gast #2728191
Wozu sind eigentlich die double-Variablen in deinem Programm gut. Die 
kosten nur Genauigkeit. Mit uint32 bzw. int32 bist du deutlich besser 
bedient.

Milan schrieb:
> wie kann ich das machen??? Ich benutze einen Xmega128a1 .
Simulieren kannst du z.B. im Debugger von AVR Studio

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.