Sunt probleme în obținerea de date GPS

voturi
0

Am testat codul GPS fără coduri de senzor ultrasonic și accelerometru si a functionat foarte bine.

Dar acum am încercat să folosească GPS cu accelerometru și senzor cu ultrasunete, GPS-ul nu-mi dă date corespunzătoare înapoi la mine. Cu toate acestea, Accelerometru si senzor cu ultrasunete a da înapoi o valoare corectă pentru Arduino monitorului de serie.

Din moment ce eu sunt, folosind Adafruit Ultimate GPS Breakout v3, atunci când datele NMEA analizate, ar trebui să mă ceva de genul următoarele intervale de timp: xx: xx: xx.xxx Data: xx / xx / xxxx Locul de amplasare și etc

În schimb, devine doar Data și umplut cu 0 în loc.

Deja a incercat numai cu ajutorul codurilor de GPS pentru a verifica dacă aceasta a fost problema modulul GPS.

Întregul cod

//Declare Needed header file
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#define GPSSerial Serial1
Adafruit_GPS GPS(&GPSSerial);
#define GPSECHO false

uint32_t timer=millis();

//Declare the pins
#define echoPin 7
#define trigPin 8

//Define Accelerometer Address
const int MPU=0x68;

//Declare Accelerometer Variable
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

float f1=1.3;
byte *fp = (byte *) &f1;

//Declare the ultrasonic variables
long duration;
long distance;
void setup()
{
  //Join I2C bus as Slave with Address 8;
  Wire.begin (8);

  //Call SendData Command
  Wire.onRequest(SendData);

  //Setup Pins as output and input to operate ultrasonic sensor
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

  //Setup for Accelerometer Sensor
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);
  //Begin Serial Monitor

  Serial.begin (9600);
  //GPS Sensor Setting
  Serial.begin (9600);
  Serial.println(Adafruit GPS Test);
  GPS.begin (9600);
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_10HZ);
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  delay(1000);
}

void loop ()
{
  dist();
  GY521();
  readGPS();
  delay(3000);
}
//Obtain Ultrasonic Data
void dist()
{
  digitalWrite (trigPin,LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(2);
  digitalWrite(trigPin,LOW);
  duration=pulseIn(echoPin,HIGH);
  distance=duration/58.2;
  Serial.print(distance);
  Serial.println( cm);
}
//Obtain Accelerometer Data
void GY521()
{
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,12,true);
  AcX=Wire.read()<<8|Wire.read();
  AcY=Wire.read()<<8|Wire.read();
  AcZ=Wire.read()<<8|Wire.read();
  GyX=Wire.read()<<8|Wire.read();
  GyY=Wire.read()<<8|Wire.read();
  GyZ=Wire.read()<<8|Wire.read();

  Serial.println(Accelerometer: );
  Serial.print(X= ); Serial.println(AcX);
  Serial.print(Y= ); Serial.println(AcY);
  Serial.print(Z= ); Serial.println(AcZ);

//  Serial.print(f1= );
//  Serial.print(fp[0], HEX);
//  Serial.print(fp[1], HEX);
//  Serial.print(fp[2], HEX);
//  Serial.print(fp[3], HEX);
//  Serial.println();

}

void readGPS()
{
  // read data from the GPS in the 'main loop'
  char c = GPS.read();
  // if you want to debug, this is a good time to do it!
  if (GPSECHO)
    if (c);
  // if a sentence is received, we can check the checksum, parse it...
  if (GPS.newNMEAreceived()) {
    // a tricky thing here is if we print the NMEA sentence, or data
    // we end up not listening and catching other sentences!
    // so be very wary if using OUTPUT_ALLDATA and trying to print out data
    // this also sets the newNMEAreceived() flag to false
    if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
      return; // we can fail to parse a sentence in which case we should just wait for another
  }
  // if millis() or timer wraps around, we'll just reset it
  if (timer > millis()) timer = millis();

  // approximately every 2 seconds or so, print out the current stats
  if (millis() - timer > 2000) {
    timer = millis(); // reset the timer
    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);
    Serial.print(Date: );
    Serial.print(GPS.day, DEC); Serial.print('/');
    Serial.print(GPS.month, DEC); Serial.print(/20);
    Serial.println(GPS.year, DEC);
    Serial.print(Fix: ); Serial.print((int)GPS.fix);
    Serial.print( quality: ); Serial.println((int)GPS.fixquality);
    if (GPS.fix) {
      Serial.print(Location: );
      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(, );
      Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
      Serial.print(Speed (knots): ); Serial.println(GPS.speed);
      Serial.print(Angle: ); Serial.println(GPS.angle);
      Serial.print(Altitude: ); Serial.println(GPS.altitude);
      Serial.print(Satellites: ); Serial.println((int)GPS.satellites);
    }
  }
}

void SendData()
{
  byte test[]={distance,AcZ>>0x8, AcZ, fp[0], fp[1], fp[2], fp[3]};
  Wire.write(test,7);
}

Numai Cod GPS

#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
#include <Wire.h>
#define GPSSerial Serial1
Adafruit_GPS GPS(&GPSSerial);
#define GPSECHO false

uint32_t timer=millis();
void setup()
{
  Serial.begin (9600);
  Serial.println(Adafruit GPS Test);
  GPS.begin (9600);
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_10HZ);
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  delay(1000);
}

void loop()
{
  readGPS();
}

void readGPS()
{
  // read data from the GPS in the 'main loop'
  char c = GPS.read();
  // if you want to debug, this is a good time to do it!
  if (GPSECHO)
    if (c);
  // if a sentence is received, we can check the checksum, parse it...
  if (GPS.newNMEAreceived()) {
    // a tricky thing here is if we print the NMEA sentence, or data
    // we end up not listening and catching other sentences!
    // so be very wary if using OUTPUT_ALLDATA and trying to print out data
    // this also sets the newNMEAreceived() flag to false
    if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
      return; // we can fail to parse a sentence in which case we should just wait for another
  }
  // if millis() or timer wraps around, we'll just reset it
  if (timer > millis()) timer = millis();

  // approximately every 2 seconds or so, print out the current stats
  if (millis() - timer > 2000) {
    timer = millis(); // reset the timer
    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);
    Serial.print(Date: );
    Serial.print(GPS.day, DEC); Serial.print('/');
    Serial.print(GPS.month, DEC); Serial.print(/20);
    Serial.println(GPS.year, DEC);
    Serial.print(Fix: ); Serial.print((int)GPS.fix);
    Serial.print( quality: ); Serial.println((int)GPS.fixquality);
    if (GPS.fix) {
      Serial.print(Location: );
      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(, );
      Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
      Serial.print(Speed (knots): ); Serial.println(GPS.speed);
      Serial.print(Angle: ); Serial.println(GPS.angle);
      Serial.print(Altitude: ); Serial.println(GPS.altitude);
      Serial.print(Satellites: ); Serial.println((int)GPS.satellites);
    }
  }
}

Am nevoie pentru a obține aceste date

      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(, );
      Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
      Serial.print(Speed (knots): ); Serial.println(GPS.speed);
      Serial.print(Angle: ); Serial.println(GPS.angle);
      Serial.print(Altitude: ); Serial.println(GPS.altitude);
      Serial.print(Satellites: ); 
      Serial.println((int)GPS.satellites);
Întrebat 24/10/2019 la 12:53
sursa de către utilizator
În alte limbi...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more