Попытка определить местоположение моего GPS, но серийный номер получил 0,00000; 0,00000 - PullRequest
0 голосов
/ 29 марта 2020

enter image description here

Код Arduino:

#include <SoftwareSerial.h>
#include <TinyGPS.h>
//long   lat,lon; // create variable for latitude and longitude object
float lat,lon ; // create variable for latitude and longitude object
SoftwareSerial gpsSerial(3,4);//rx,tx

TinyGPS gps; // create gps object
void setup(){
Serial.begin(9600); // connect serial
Serial.println("The GPS Received Signal:");
gpsSerial.begin(9600); // connect gps sensor

}

void loop(){


String latitude = String(lat,6);
String longitude = String(lon,6);
Serial.println(latitude+";"+longitude);
delay(1000);

}

Я пытаюсь определить местоположение моего GPS, но серийный номер получил 0,00000; 0,00000, что я Я делаю не так?

1 Ответ

1 голос
/ 29 марта 2020

У вас большая проблема, вы никогда не получите данные от вашего объекта GPS в свои переменные. Выполните следующие действия:

// create variable for latitude and longitude object
 double lat = 0; // The lib defines it as double!
 double lon = 0; // The lib defines it as double!
unsigned long lastGpsCheck = 0;
const unsigned long delayTime = 1000;
....

void loop(){
// Replaces the CPU stopping delay, does the same without blocking
 if(millis() - lastGpsCheck > delayTime) {
   lat = gps.location.lat(); // This is missing in your code
   lon = gps.location.lon(); // This is missing in your code

   Serial.println( lat,6 );
   Serial.print(";");
   Serial.print(lon,6 );
   lastGpsCkeck = millis();
  }
}

Примечание: я заменил задержку, рано научился никогда не использовать задержку в l oop, подпрограммах или библиотеках. Это нормально в настройке для ожидания инициализации оборудования или в качестве временной справки по отладке.
Избегайте преобразования в класс String. Всегда используйте фиксированные массивы. Класс String имеет плохой уровень памяти mgmt и ломает вашу кучу (утечки памяти -> cra sh), массивы исправлений скомпилированы в fla sh.

...