Как читать данные GPS постоянно с помощью Arduino Pro Mini - PullRequest
0 голосов
/ 04 декабря 2018

Я работаю над проектом, в котором я собираю данные о температуре и влажности, gps и гирометре, собираю json из всех этих данных и отправляю в последовательный порт.Я могу сделать для температуры, влажности и гирометра, но не могу получить данные из GPS.

Используемые модули:

  1. DHT11 для температуры и влажности
  2. ADXL для показаний гирометра
  3. GY NMEO6MV2 для GPS

Это фрагмент кода для GPS

#include <dht.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
TinyGPSPlus gps;
dht DHT;
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
// Defining pin for humidity sensor
#define DHT11_PIN 7
// Defining pin for ADXL Analog pins
const int xPin = 3;
const int yPin = 4;
const int zPin = 5;
//ADXL Data
double x,y,z;
// Defining Static values ADXL. TO CHANGE AS NEEDED
int xStatic = 504;
int yStatic = 493;
int zStatic = 617;
void setup()
{      
  //int error;
  //uint8_t c;
  Serial.begin(19200);
  ss.begin(GPSBaud);
}
void loop()
{
  //int error;
  //double dT;
  //char buffer[100];
  //read the analog values from the accelerometer
  int xRead = analogRead(xPin);
  int yRead = analogRead(yPin);
  int zRead = analogRead(zPin);
  x = xStatic - xRead;
  y = yStatic - yRead;
  z = zStatic - zRead;
  //Serial.print("{\"x\":");
  Serial.print(x);
  Serial.print("#");
  //Serial.print(",\"y\":");
  Serial.print(y);
  Serial.print("#");
 //Serial.print(",\"z\":");
 Serial.print(z);
 //DHT
 if (int chk = DHT.read11(DHT11_PIN)) {
   Serial.print("#");
   //Serial.print(",\"temperature\":");
   Serial.print(DHT.temperature);
   Serial.print("#");
   //Serial.print(",\"humidity\":");
   Serial.print(DHT.humidity);
 }
 while (ss.available() > 0)
    if (gps.encode(ss.read()))
       if(gps.location.isValid())
       {
        //Serial.print(",\"latitude\":");
          Serial.print("#");
          Serial.print(gps.location.lat(), 6);
       // Longitude in degrees (double)
        //Serial.print(",\"longitude\":");
          Serial.print("#");
          Serial.print(gps.location.lng(), 6);
       //DATE
          String date;
          // Day (1-31) (u8)
          date= gps.date.day();
          // Month (1-12) (u8)
          date+= "-";
          date+= gps.date.month();
          // Year (2000+) (u16)
          date+= "-";
          date+= gps.date.year();
          //Serial.print(",\"date\":");
          Serial.print("#");
          Serial.print("\""+date+"\"");
          //TIME
          String time;
          // Hour (0-23) (u8)
          time= gps.time.hour();
          time+= ":";
          // Minute (0-59) (u8)
          time+= gps.time.minute();
          time+= ":";
          // Second (0-59) (u8)
          time+= gps.time.second();
          time+= ":";
          // 100ths of a second (0-99) (u8)
          time+= gps.time.centisecond();
          //Serial.print(",\"time\":");
          Serial.print("#");
          Serial.print("\""+time+"\"");
          //GPS SPEED AND ALTITUDE
          // Speed in kilometers per hour (double)
          Serial.print("#");
          //Serial.print(",\"speed\":");
          Serial.print(gps.speed.kmph());
          //Serial.println("}");
          //Serial.println("$");
          delay(2000);
   }
   Serial.print("$");
   delay(3000);
   if (millis() > 5000 && gps.charsProcessed() < 10)
   {
     Serial.println(F("No GPS detected: check wiring."));
     while(true);
   }

 }

Значения не поступают непрерывно из GPS.Может ли кто-нибудь помочь мне в этом отношении.Заранее спасибо

...