помогите - 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" }
Результат Что- то не то... Знающие поможете?
Кто старое поменянет... Ну да ладно.
А у меня, вроде, и так рабтает: