Ausgabe eines Wertes auf Display, nur bei Änderung des Wertes.

Hallo und einen schönes Wochenende zusammen,

ein kurze Frage, die Ihr mir sicher auch schnell beantworten könnt.

Ich gebe auf mein Display unter anderem die Werte eine GPS aus.

Das habe ich relativ simpel so gelöst:

        if (GPS.lat == 'N') 
        {genieWriteStr(1, "N" );}
        if (GPS.lat == 'S')
        {genieWriteStr(1, "S");}

Das Problem ist aber bei der Art, dass das "N" oder "S" bei jedem durchlauf neu geschrieben wird. Das verlangsamt zum einen die Performance, zum anderen "zittert" der Buchstabe dadruch. Wie könnte ich es elegant lösen, dass die Werte nur neu geschrieben werden, wenn sie sich auch änderen? Kommt ja auch eher selten vor, dass man zig mal über den Äquator schippert.

Vielen Dank und Gruß Michael

TEC_MICHL: Kommt ja auch eher selten vor, dass man zig mal über den Äquator schippert.

Bei mir kommt es sogar selten vor, dass ich mir überhaupt anzeigen lassen muß, ob ich nördlich oder südlich des Äquators bin. ;)

Eine Anzeige, die nur wechseln soll, wenn sich der Wert ändert, realisierst Du jedenfalls immer auf die gleiche Art: Du mußt Dir den zuletzt angezeigten Wert merken, z.B. in einer globalen oder einer static Variablen. Und nur wenn der aktuelle Wert vom zuletzt angezeigten Wert abweicht, schreibst Du den aktuellen Wert auf die Anzeige und merkst ihn Dir gleichzeitig als zuletzt angezeigten Wert.

Zahlen, Ziffern und einzelne Zeichen vergleichst Du mit == oder !=. Und C-Strings mit der strcmp-Funktion.

Du speicherst die Himmelsrichtung in einer Variablen ab. Wenn der Wert von GPS kommt kontrollierst Du ob er gleich dem Wert in der Variable ist. Ist er gleich gehst Du zur Ausgabe der anderen Daten über; ist er verschieden druckst du den neuen Wert aus und speicherst ihn in die Variable.

Grüße Uwe

Hallo,

zuerst eine Variable für den Wert deklarieren (ich nehme an der Typ muss char sein? Musst Du in Deinem Sketch nachsehen):

char gpsLatAlt = 'X';

Dann später die Ausgabe so:

if(gpsLatAlt != GPS.lat) {
  genieWriteStr(1, GPS.lat);
  gpsLatAlt = GPS.lat;
}

Ob diese genieWriteStr() so funktioniert musst Du schauen.

  • Autsch - Jetzt ist mir mitten im Schreiben der Monitor gestoren -

Muss jetzt erst mal speichern und meine Bildschirmauflösung und so neu einstellen.

Gruß, Ralf

Vielen Dank für die tollen antworten! Hat bestens geklappt! Schönen Sonntag noch! :) :)

@ jurs:

Ja in unseren Breiten/Längen braucht mans eher weniger. Aber der Optik wegen sollte es einfach da sein. Ist halt Standard.