Arduino:尝试读取位置时出现 Neo 6M 问题

问题描述 投票:0回答:0

我正在尝试让 Neo 6M 模块运行,同时我也在使用其他传感器。当我尝试单独测试 Neo 6M 模块时没有问题,其他模块也没有。

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial gpsSerial(4, 5);

void setup(){
  Serial.begin(9600);
  gpsSerial.begin(9600);
}

void loop(){
  // This sketch displays information every time a new sentence is correctly encoded.

  while (gpsSerial.available() > 0){
    gps.encode(gpsSerial.read());
    if (gps.location.isUpdated()){
      Serial.print("Latitude= "); 
      Serial.print(gps.location.lat(), 6);
      Serial.print(" Longitude= "); 
      Serial.println(gps.location.lng(), 6);
      Serial.print("Altitude=");
      Serial.println(gps.altitude.meters());
      Serial.print("Speed=");
      Serial.println(gps.speed.mps());
    }
  }
}

与 Neo 6M 一起工作的代码

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <SD.h>

File myFile;
const int chipSelect = 10;

TinyGPSPlus gps;

SoftwareSerial radioserial(2,3);
SoftwareSerial gpsSerial(4,5);

int addr = 0x18;
byte buffer[2] = {0,0};
int status = 0;
Adafruit_BMP280 bmp;
 
void setup() {
  Serial.begin(9600);
  radioserial.begin(115200);
  gpsSerial.begin(9600);
  Wire.begin();
  delay(10);
  GammaRead(0xB4);
  GammaRead(0xA0);
  unsigned status;
  status = bmp.begin(0x76);
  bmp.reset();
  delay(10);
  if (!status) {
    while (1) delay(10);
  }
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
                  Adafruit_BMP280::SAMPLING_X2, 
                  Adafruit_BMP280::SAMPLING_X16,    
                  Adafruit_BMP280::FILTER_X16,      
                  Adafruit_BMP280::STANDBY_MS_500); 
  delay(100);
  radioserial.println("radio set mod lora");
  delay(100);
  radioserial.println("radio set pwr 4");
  delay(100);
  radioserial.println("radio set bw 250");
  delay(100);
  radioserial.println("radio set bitrate 300000");
  delay(100);
  radioserial.println("radio set freq 868100000");
  delay(100);
  radioserial.println("radio set sf sf12");
  delay(100);
  radioserial.println("radio get sync");
  delay(10);
  radioserial.stopListening();
  if (!SD.begin()) {
    return;
  }
  if (SD.exists("airdata.txt")){
    SD.remove("airdata.txt");        
  }
  delay(100);  
  myFile = SD.open("airdata.txt", FILE_WRITE);
  myFile.close();
  delay(100);
}

void loop() {
  delay(500);
  GammaRead(0xB3);
}

void GammaRead(int cmd){
  Wire.beginTransmission(addr);
  Wire.write(cmd);
  Wire.endTransmission();
  delay(10);
  Wire.requestFrom(addr, 2);
  byte i = 0;
  while(Wire.available())
  {
    buffer[i] = Wire.read();
    i++;
  }
  Result();
}

void Result(){
  
  float value = 0.0f;
  value = buffer[0] + (float)buffer[1]/100;

  String gamma = String(value);
  String temp = String(bmp.readTemperature());
  String press = String(bmp.readPressure());
  String alt = String(bmp.readAltitude(1015.25));

  myFile = SD.open("airdata.txt", FILE_WRITE);
  if (myFile) {
    myFile.println(temp + " " + press + " " 
    + alt + " " + gamma);
    myFile.close();
  }

  temp.replace('.','a');
  press.replace('.','a');
  alt.replace('.','a');
  gamma.replace('.','a');

  Serial.println("radio_tx "+temp + "b"+ press + "b"+ alt+ "b"+ gamma + " 1");
  radioserial.println("radio tx " + temp + "b"+ press + "b"+ alt+ "b"+ gamma + " 1");
}

项目其余部分的工作代码

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <SD.h>

File myFile;
const int chipSelect = 10;

TinyGPSPlus gps;

SoftwareSerial radioserial(2,3);
SoftwareSerial gpsSerial(4,5);

int addr = 0x18;
byte buffer[2] = {0,0};
int status = 0;
Adafruit_BMP280 bmp;
 
void setup() {
  Serial.begin(9600);
  radioserial.begin(115200);
  gpsSerial.begin(9600);
  Wire.begin();
  delay(10);
  GammaRead(0xB4);
  GammaRead(0xA0);
  unsigned status;
  status = bmp.begin(0x76);
  bmp.reset();
  delay(10);
  if (!status) {
    while (1) delay(10);
  }
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
                  Adafruit_BMP280::SAMPLING_X2, 
                  Adafruit_BMP280::SAMPLING_X16,    
                  Adafruit_BMP280::FILTER_X16,      
                  Adafruit_BMP280::STANDBY_MS_500); 
  delay(100);
  radioserial.println("radio set mod lora");
  delay(100);
  radioserial.println("radio set pwr 4");
  delay(100);
  radioserial.println("radio set bw 250");
  delay(100);
  radioserial.println("radio set bitrate 300000");
  delay(100);
  radioserial.println("radio set freq 868100000");
  delay(100);
  radioserial.println("radio set sf sf12");
  delay(100);
  radioserial.println("radio get sync");
  delay(10);
  radioserial.stopListening();
  if (!SD.begin()) {
    return;
  }
  if (SD.exists("airdata.txt")){
    SD.remove("airdata.txt");        
  }
  delay(100);  
  myFile = SD.open("airdata.txt", FILE_WRITE);
  myFile.close();
  delay(100);
}

void loop() {
  delay(500);
  GammaRead(0xB3);
  GPS();
}
void GPS(){
  while (gpsSerial.available() > 0){
    gps.encode(gpsSerial.read());
    if (gps.location.isUpdated()){
      Serial.print("Latitude= "); 
      Serial.print(gps.location.lat(), 6);
      Serial.print(" Longitude= "); 
      Serial.println(gps.location.lng(), 6);
      Serial.print("Altitude=");
      Serial.println(gps.altitude.meters());
      Serial.print("Speed=");
      Serial.println(gps.speed.mps());
    }
  }
}

void GammaRead(int cmd){
  Wire.beginTransmission(addr);
  Wire.write(cmd);
  Wire.endTransmission();
  delay(10);
  Wire.requestFrom(addr, 2);
  byte i = 0;
  while(Wire.available())
  {
    buffer[i] = Wire.read();
    i++;
  }
  Result();
}

void Result(){
  
  float value = 0.0f;
  value = buffer[0] + (float)buffer[1]/100;

  String gamma = String(value);
  String temp = String(bmp.readTemperature());
  String press = String(bmp.readPressure());
  String alt = String(bmp.readAltitude(1015.25));

  myFile = SD.open("airdata.txt", FILE_WRITE);
  if (myFile) {
    myFile.println(temp + " " + press + " " 
    + alt + " " + gamma);
    myFile.close();
  }

  temp.replace('.','a');
  press.replace('.','a');
  alt.replace('.','a');
  gamma.replace('.','a');

  Serial.println("radio_tx "+temp + "b"+ press + "b"+ alt+ "b"+ gamma + " 1");
  radioserial.println("radio tx " + temp + "b"+ press + "b"+ alt+ "b"+ gamma + " 1");
}

两个代码合并。

响应是:“1”,仅此而已。

你能帮帮我吗?

c++ arduino gps
© www.soinside.com 2019 - 2024. All rights reserved.