GPS tracker funktioniert braucht hilfe bei feinarbeit

Hallo zusammen,

es funktioniert soweit recht gut!

Aber folgende probleme:

  • was muss ich da noch dazu schreiben muss um kmh zu haben?

void draw(float lat, float lon, unsigned long l_date, unsigned long l_time, float f_alt)

(ich habe bei KM/H jetzt einfach nur als "platzhalter" den höhen wert hingeschrieben)

  • Bei uhr steht nur : AM mehr nicht.....

  • wie bekomme ich stat 2 nach koma stellen 4 bei längen und breiten grad?

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <U8glib.h>
#include <Wire.h>
#include <TimeLib.h>
 
U8GLIB_ST7920_128X64 u8g(13, 11, 10, U8G_PIN_NONE);
 
SoftwareSerial mySerial(0, 1);
TinyGPS gps;
static const uint32_t GPSBaud = 9600;
 
void gpsdump(TinyGPS &gps);
void printFloat(double f, int digits = 2);
 
void setup()
{
  Serial.begin(9600);
 
  // set the data rate for the SerialPort(use SoftwareSerial port on Arduino UNO)
 
 
  delay(1000);
 
 
  u8g.setFont(u8g_font_unifont);
  u8g.firstPage();
  do {
    u8g.setPrintPos(35, 20);
    u8g.print("Welcome ");
       u8g.setPrintPos(55, 40);
    u8g.print("to");
       u8g.setPrintPos(15, 60);
    u8g.print("your journey");
  } while ( u8g.nextPage() );
}
 
 
//This function converts a unix time to a String in the format HH:MM PM
String time_to_string(unsigned long int t) {
  String buf;
  if (hour(t) > 12) {
    buf = two_digit(hour(t)-12) + ":" + two_digit(minute(t)) + " PM";
  }
  else{
    buf = two_digit(hour(t)) + ":" + two_digit(minute(t)) + " AM";
  }
  return buf;
}
 
//returns string from int with preceding 0 if the integer is only one digit long
String two_digit(int digits) {
  if (digits < 10) {
    return "0" + digits;
  }
  else {
    return digits + "";
  }
}
 
void draw(float lat, float lon, unsigned long l_date, unsigned long l_time, float f_alt) {  
  u8g.setFont(u8g_font_6x10);
 
  u8g.firstPage();
  do {
    u8g.setPrintPos(0, 32);
    u8g.print("Lat: ");
    u8g.print(lat);  // latitude
    u8g.setPrintPos(0, 42);
    u8g.print("Long: ");
    u8g.print(lon); // longitude
    u8g.setPrintPos(0, 10);
    u8g.print("Datum: ");
    u8g.print(l_date); // date(ddmmyy, UTC 0)
    u8g.setPrintPos(0, 22);
    u8g.print("Uhr: ");
   u8g.print(time_to_string(l_time+9.5*3600));
    u8g.setPrintPos(0, 62);
    u8g.print("Alt: ");
    u8g.print(f_alt); // altitude(m)
       u8g.setPrintPos(0, 52);
    u8g.print("KM/H: ");
    u8g.print(f_alt); // altitude(m)
 
 
  } while ( u8g.nextPage() );
}
 
void loop() // run over and over
 
{
  bool newdata = false;
  unsigned long start = millis();
  float flat, flon, falt;
  unsigned long date, time, age;
 
  // Every 2 seconds we print an update
  while (millis() - start < 5000) {
    if (Serial.available() && gps.encode(Serial.read())) {
      newdata = true;
      // break;  // uncomment to print new data immediately!
    }
  }
 
  if (newdata) {
    gps.f_get_position(&flat, &flon, &age);
    gps.get_datetime(&date, &time, &age);
    falt = gps.f_altitude();
    draw(flat, flon, date, time, falt);
  }
}

Warum fängst Du dafür einen neuen Thread an?

Gruß Tommy

weil es ein anderer code ist und es dadurch andere fragen sind.....

dope-walker:
weil es ein anderer code ist und es dadurch andere fragen sind.....

Prima, dann hast du jetzt 2 Threads die wir beantworten dürfen.
Wer soll da noch durchsteigen ?

dope-walker:
es funktioniert soweit recht gut!

Kann gar nicht sein, du hast am Code in der loop nichts geändert. Und nein, es macht keinen Sinn für jede Frage einen Thread aufzumachen. Du kannst in deinem ersten Thread ruhig eine Frage nach der anderen stellen und wenn das nicht durcheinander zu geht, sondern Stück für Stück, behalten alle auch den Überblick und man sieht den Fortschritt. Ein paar Zeilen hinzufügen ist für mich auch kein anderer Code.