【问题标题】:Sending GPS values via XBee and Arduino (Float problem!!!)通过 XBee 和 Arduino 发送 GPS 值(浮动问题!!!)
【发布时间】:2020-07-02 10:43:38
【问题描述】:

我有 XBEE S2C。我有 2 个 Arduino MEGA。其中一部分是接收器,另一部分是发射器。我沟通并配置了 XBee。我测试了它没关系。但问题是我无法发送像 longtitude= 38,45682469 latitude= 85,24698534 这样的浮点值。当我尝试这样做时,我只收到纬度 = 85 longtitude = 38。如何更改代码以接收健康数据。

发射器

    #include "SoftwareSerial.h"

#include <TinyGPS.h>

float lat,lon;

TinyGPS gps; 

SoftwareSerial XBee(10, 11);

void setup(){

Serial.begin(9600);

  XBee.begin(9600);

Serial.println("The GPS Received Signal:");

Serial3.begin(9600);

}
 
void loop(){

    while(Serial3.available()){ 

    if(gps.encode(Serial3.read()))

    {

    gps.f_get_position(&lat,&lon); 

    Serial.print("Position: ");

    Serial.print("Latitude: ");

    Serial.print(lat,8);

    Serial.print(",");

    Serial.print("Longitude: ");


    Serial.println(lon,8);

    }
  }
  
XBee.write("l");
  
XBee.write(lat);

delay(100);   
         
XBee.write("k");

XBee.write(lon);

delay(100);

}

【问题讨论】:

  • 您可以有几个十进制数字,浮点数在 +-180.xxx 范围内。但不是你想要的那么多,也不是通过 GPS 获得的。或许你看看 github.com/mikalhart/TinyGPSPlus ,它使用了一种特殊的数据类型来表示 lat 和 lon
  • 目前,您只能通过 XBee 传输一个字节。将XBee.write(lat); 更改为XBee.print(lat); 在接收端,您需要解析传入的文本。

标签: arduino gps xbee


【解决方案1】:

最健壮的是将浮点数转换为字符串,通过串口发送,然后让接收方转换回浮点数。

发件人:

XBee.write(String(lat,5)); // keep 5 decimals

接收者:

String inString = "";
while (Serial.available()) {
  char c = Serial.read(); 
  inString += c; 
}
float myFloat = inString.toFloat();

延伸阅读:
https://www.arduino.cc/en/Tutorial/StringToFloatExample https://www.arduino.cc/en/Reference.StringConstructor

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2015-05-19
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多