Forum: Mikrocontroller und Digitale Elektronik GPS Koordinate am LCD


von Milan (Gast)


Lesenswert?

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

von Purzel H. (hacky)


Lesenswert?

Weshalb sollten wir uns Code anschauen, wenn  die Formeln nicht klar sin 
?

von Milan (Gast)


Lesenswert?

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

von Zac Hobson (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

>Wie würdet Ihr das anzeigen???

Was willst du anzeigen?

MG Spess

von Milan (Gast)


Lesenswert?

Zac Hobson schrieb:
> Zum Problem... was spricht gegen eine Simulation auf dem PC?Da kann man
> wenigstens Singlesteppen und alles ueberpruefen.

Hallo,
wie kann ich das machen??? Ich benutze einen Xmega128a1 .
Gruss

von GPSy (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.