【发布时间】:2019-05-22 18:12:57
【问题描述】:
我正在为一个大学项目开发 Arduino 板(微处理器:ATMega328P)。我想构建一个 GPS 跟踪器,它接收数据、存储数据并通过 SIGFOX 模块重新传输数据。 基本上,我可以接收数据,并且可以通过串口发送简单的 SIGFOX 命令。
#include <TinyGPS++.h>
#include <String.h>
#include <SoftwareSerial.h>
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 4800;
TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);
void setup()
{
Serial.begin(115200);
ss.begin(GPSBaud);
Serial.println(F("DeviceExample.ino"));
Serial.println(TinyGPSPlus::libraryVersion());
Serial.println();
}
void loop()
{
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0)
if (gps.encode(ss.read())) {
Serial.print(gps.location.lat(), 6); // 4 bytes
Serial.print(F(",")); // 1 byte
Serial.print(gps.location.lng(), 6); // 4 bytes
Serial.print('\n');
delay(4000);
}
if (millis() > 5000 && gps.charsProcessed() < 10){
Serial.println(F("No GPS detected: check wiring."));
while (true);
}
}
这会在屏幕上正确打印我需要存储的两个值(纬度和经度)。 这是 TinyGPS++.cpp 中的部分代码:
double TinyGPSLocation::lat()
{
updated = false;
double ret = rawLatData.deg + rawLatData.billionths / 1000000000.0;
return rawLatData.negative ? -ret : ret;
}
double TinyGPSLocation::lng()
{
updated = false;
double ret = rawLngData.deg + rawLngData.billionths / 1000000000.0;
return rawLngData.negative ? -ret : ret;
}
现在我想存储这些数据并通过 SIGFOX 模块发送。 SIGFOX 命令是:
'N X'
其中 N 表示要传输的字节数,X 是字节的值。例如:'1 255' 是 1 个字节,值为 255,并返回 FF 作为输出。
问题是值是双精度的,所以我不知道如何在 SIGFOX 命令中编写它们。 另一个问题是我不知道如何在代码中创建两个串行通信。我试过了,但它似乎不起作用。
非常感谢您。
【问题讨论】:
标签: c++ c serialization arduino gps