C++ 从GPS向SIGFOX传输数据

C++ 从GPS向SIGFOX传输数据,c++,c,serialization,arduino,gps,C++,C,Serialization,Arduino,Gps,我正在为一个大学项目制作Arduino板(微处理器:ATMega328P)。我想建立一个GPS跟踪器,它接收数据,存储数据,然后通过SIGFOX模块重新传输数据。 基本上,我能够接收数据,并且我能够通过串口发送简单的SIGFOX命令 #include <TinyGPS++.h> #include <String.h> #include <SoftwareSerial.h> static const int RXPin = 4, TXPin = 3; stat

我正在为一个大学项目制作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);
      }

}
现在我想存储这些数据并通过SIGFOX模块发送。 SIGFOX命令是:

“nx”

其中N表示要传输的字节数,X表示字节值。例如:“1255”是值为255的1字节,并返回FF作为输出

问题是这些值是双倍的,所以我不知道如何在SIGFOX命令中写入它们。 另一个问题是,我不知道如何在代码中创建两个串行通信。我试过了,但似乎不起作用


提前非常感谢。

我在SIGFOX上看到了一些API信息,我猜是这样的。即使它不是,它可能已经足够接近我想要表达的观点了

您需要在某种程度上理解IEEE 754是什么,根据我的经验,如果您查看原始比特流,这就是设备如何来回传递数据

所以,在大多数平台上发送8个字节以上的数据是双倍的,浮点值发送4个字节。当您在调试模式下打印到悬停在变量上的屏幕时,IDE/编译器会为您处理这个问题,并为您提供带小数点的数字

为了创建另一个串行端口,您需要创建另一个变量并传入该设备的波特率等

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;
}