Помогите дописать gps трекер

Нет ответов
mrbsk
Offline
Зарегистрирован: 18.02.2014

Первый опыт програмирования, помогите пожалуйста дописать gps трекер.

Все, что мне нужно, это вычислять и сохранять расстояние пройденного пути.  

из железа Uno, gps шилд с microSD интерфейсом и 20х4 lcd.

По сути, мне бы реализовать следующий алгоритм:

1- вкл
2- загрузка из памяти числового значения (пройденное расстояние)
3- вывод на экран и serial значения п.2
4- определение текущего местоположения
5- запись точки
6- определение текущего местоположения
7- замер расстояния до точки, определенной в п.4
8- сложение значения в п.2 и значения в п.7
9- запись результата п.8 (обновление числового значение п.2)
 
Грубо говоря нужем gps одометр=)
 
 
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <TinyGPS.h>
#include <SD.h>
/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of SoftwareSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 3(rx) and 4(tx).
*/

TinyGPS gps;
SoftwareSerial ss(3, 2);
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
void setup()
{
  Serial.begin(9600);
  ss.begin(9600);
  lcd.begin(20, 4);
  lcd.setCursor(2, 0);
  lcd.print("\xA8""o""\xB8""c""\xBA");
  lcd.setCursor(0, 1);
  lcd.print( "c""\xBE""y""\xBF\xBD\xB8\xBA""o""\xB3");
  
}

void loop()
{
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;

  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

  if (newData)
  {
    float lat, lon;
    unsigned long age;
    gps.f_get_position(&lat, &lon);
    lcd.setCursor(0, 0);
    lcd.print("\xAC:");
    lcd.setCursor(2, 0);
    lcd.print(lat, 4);
    lcd.setCursor(0, 1);
    lcd.print("\xE0:");
    lcd.setCursor(2, 1);
    lcd.print(lon, 4);
    lcd.setCursor(17, 0);
    lcd.print("\xFA:");
    lcd.setCursor(18,0);
    lcd.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    lcd.setCursor(0,2);
    lcd.print("\xBA\xBC\x15\xC0:"); 
    lcd.setCursor(5,2);
    lcd.print(gps.f_speed_kmph(), 1); 
 
    Serial.print("LAT=");
    Serial.print(lat == TinyGPS::GPS_INVALID_F_ANGLE ? 0 : lat, 6);
    Serial.print(" LON=");
    Serial.print(lon == TinyGPS::GPS_INVALID_F_ANGLE ? 0 : lon, 6);
    Serial.print(" SAT=");
    Serial.print(gps.satellites() == TinyGPS::GPS_INVALID_SATELLITES ? 0 : gps.satellites());
    Serial.print(" KMPH=");
    Serial.println(gps.f_speed_kmph(), 1);
  }
  
  
}