Обновление GPS через каждые 30 секунд с помощью NeoGPS и NeoSWSerial Libray
Я использую Adafruit Ulitimate Breakout GPS module и NeoGPS и NeoSWSerial Library. Теперь я хочу, чтобы GPS обновлялся через 30 секунд один раз (1 раз в 30 секунд).После его обновления я хочу проверить местоположение, если новое местоположение равно старому местоположению, то оно должно быть обновлено через 60 секунд один раз (1 раз в 60 секунд).Если нет, то место должно быть новым местом. Он должен отображать местоположение каждые 60 секунд. Я попробовал этот поток в библиотеке Adafruit GPS, которая работает, но я хочу использовать библиотеку NeoGPS и сделать то же самое. Ниже приведен мой код библиотеки adafruit:
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 10);
Adafruit_GPS GPS(&mySerial);
#define GPSECHO true
uint32_t timer = millis();
float old_lat,old_lon,new_lat,new_lon;
void setup()
{
Serial.begin(9600);
delay(1000);
Serial.println("Adafruit GPS library basic test!");
GPS.begin(9600);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
GPS.sendCommand("$PMTK220,30000*1F");
mySerial.println(PMTK_Q_RELEASE);
}
void loop() // запускайте снова и снова
{
char c = GPS.read();
if (GPS.newNMEAreceived()) {
//Serial.println(GPS.lastNMEA()); // это также устанавливает флаг newNMEAreceived() в false
if (!GPS.parse(GPS.lastNMEA())) // это также устанавливает флаг newNMEAreceived() в false
return; // мы можем не разобрать предложение, и в этом случае мы должны просто ждать другого
}
if (GPS.fix) {
old_lat = GPS.latitudeDegrees;
old_lon = GPS.longitudeDegrees;
if (timer > millis()) timer = millis();
if (millis() - timer > 60000) {
timer = millis();
Serial.println("Location 1 minute:");
displaytime();
new_lat = GPS.latitudeDegrees;
new_lon = GPS.longitudeDegrees;
if (new_lat == old_lat){
new_lat = old_lat;
}
else{
new_lat = GPS.latitudeDegrees;
}
Serial.print("Final Latitude: ");
Serial.println(new_lat,6);
if (new_lon == old_lon){
new_lon = old_lon;
}
else{
new_lon = GPS.longitudeDegrees;
}
Serial.print("Final Longitude: ");
Serial.println(new_lon,6);
}
}
}
void displaytime(){
Serial.print("\nTime: ");
if (GPS.hour < 10) { Serial.print('0'); }
Serial.print(GPS.hour, DEC); Serial.print(':');
if (GPS.minute < 10) { Serial.print('0'); }
Serial.print(GPS.minute, DEC); Serial.print(':');
if (GPS.seconds < 10) { Serial.print('0'); }
Serial.print(GPS.seconds, DEC); Serial.print('.');
if (GPS.milliseconds < 10) {
Serial.print("00");
} else if (GPS.milliseconds > 9 && GPS.milliseconds < 100) {
Serial.print("0");
}
Serial.println(GPS.milliseconds);
}
Это мой код библиотеки NeoGPS, в котором я использую NeoSWSerial:
#include <NMEAGPS.h>
#include <NeoSWSerial.h>// импорт последовательной библиотеки
NeoSWSerial gpsPort(11, 10); // RX - 11 (для GPS tx), TX -10 (для GPS rx)
NMEAGPS gps; // синтаксический
gps_fix fix; // структура со всеми проанализированными значениями
void setup() {
gpsPort.begin(9600);
Serial.begin(9600);
Serial.println("GPS Start");
}
void loop() {
if (gps.available( gpsPort)) {
fix = gps.read();
Serial.println("Latitude:");
Serial.println( fix.latitude(), 6);
Serial.println("Longitude:");
Serial.println( fix.longitude(), 6);
}
}
@Krupali Mistry, 👍1
Обсуждение1 ответ
Похоже, что использование функции расстояния в NeoGPS было бы хорошим решением этой проблемы, и это должно позволить вам создать буфер вокруг исходного местоположения, чтобы отфильтровать часть шума от показаний GPS.
Вот страница с обзором использования расстояния в NeoGPS https://github.com/SlashDevin/NeoGPS/blob/master/examples/NMEAdistance/NMEAdistance.ino
Пожалуйста, отредактируйте этот ответ и добавьте в него дополнительную информацию по ссылке. Если ссылка по какой-либо причине пропадает, остальная часть текста в том виде, в каком она у вас есть, не отвечает на вопрос., @sa_leinad
- Насколько "быстро" могут обновляться данные GPS во время движения и зависит ли это от mcu?
- avrdude ser_open() can't set com-state
- Не могу загрузить скетч в Arduino Nano
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- SIM800C, CPIN: НЕ ГОТОВ (КОД ОШИБКИ: +CME ОШИБКА: 10)
- Проблема с Arduino Nano 33 IOT
- Можно ли обновить загрузчик Arduino (Nano) через себя и Arduino IDE или требуется ISP?
- Не удалось преобразовать «digitalWrite(8u, 1u)» из «void» в «bool»
вы дали неполное описание того , как должна вести себя программа .... что произойдет, если показания местоположения не совпадут?, @jsotola
Я внес изменения, если местоположение не совпадает, то оно должно занять новое место. Но я хочу, во-первых, как обновить GPS., @Krupali Mistry
@jsotola Все в порядке с местоположением, но изначально я хочу изменить частоту обновления., @Krupali Mistry