我正在尝试让 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”,仅此而已。
你能帮帮我吗?