помогите - Uno + GPS
- Войдите на сайт для отправки комментариев
Вс, 21/02/2016 - 22:07
Задумал сделать эмулятор DCF77. Будет DS1302 + генератор управляемый UNO. Получение точного времени по GPS.
На первом этапе нужно получить время от GPS. Приемник VK16U6 настроил для передачи только GPZDA ($GPZDA, hhmmss.s, xx, xx, xxxx, xx, xx *hh <CR><LF >) скорость 19200. Хочу обойтись без TinyGPS.
Код который должен получить по 1 символу GPZDA, склеить их и вывести в COM:
#include <SoftwareSerial.h>
SoftwareSerial gps(2, 3);
// variables
byte byteGPS = 0;
int i = 0;
int h = 0;
char GPS_ZDA[100]="";
void setup()
{
Serial.begin(115200);
gps.begin(19200);
Serial.print("Начало ...");
Serial.println();
delay(1000);
}
void loop()
{
bool newdata = false; // данные не получены
unsigned long start = millis(); // инициализируем чтение раз в 1 сек
while (millis() - start < 1000) {
if (readgps())
newdata = true;
}
if (newdata) {
Serial.print("GPZDA : "); // если данные получены выводим по 1 символу
h = 0;
while(h < 29){
Serial.print(GPS_ZDA[h]);
h++;
}
Serial.println();
}
}
bool readgps() {
while (gps.available()) { // когда данные доступны
byteGPS = gps.read(); // читаем байт
while(byteGPS != '$'){ // если не $ то читаем еще раз
byteGPS = gps.read();
}
GPS_ZDA[0]='$'; // как нашли $ начинаем заполнять GPS_ZDA
i = 1;
while(byteGPS != '*'){ // до того момента пока не появится * (или может тупо прочитать 30 байт - формат-то не меняется)
byteGPS = gps.read();
GPS_ZDA[i]=byteGPS;
i++;
}
return true; // GPS_ZDA - заполнено новыми данными
}
return false; // Если данных нет возвращанем "false"
}
Результат
Что- то не то... Знающие поможете?
Кто старое поменянет... Ну да ладно.
byteGPS = gps.read(); // читаем байт while(byteGPS != '$') byteGPS = gps.read(); GPS_ZDA[0]='$'; // как нашли $ начинаем заполнять GPS_ZDA i = 1; while(byteGPS != '*'){ // до того момента пока не появится * (или может тупо прочитать 30 байт - формат-то не меняется) byteGPS = gps.read(); GPS_ZDA[i]=byteGPS; i++; }А у меня, вроде, и так рабтает:
char chGpsLint[128]; // Переменная для хранения GPS-строки, byte btReaded; // её длина. ... btReaded = Serial.readBytesUntil('\n', chGpsLint, 128);