Помогите дописать gps трекер
- Войдите на сайт для отправки комментариев
Втр, 18/02/2014 - 19:52
Первый опыт програмирования, помогите пожалуйста дописать 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);
}
}