Помогите дописать 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); } }