首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Xbee网络传输浮点值

通过Xbee网络传输浮点值
EN

Stack Overflow用户
提问于 2012-04-14 07:31:32
回答 3查看 2.1K关注 0票数 4

我在一个简单的2节点Xbee网络上传输一个浮动时遇到了问题。

我知道Xbee系统通过字节传输包,所以我可以发送一个char,但我在发送更多字符时遇到了问题,而且我似乎找不到任何文档。

这是我当前的(基本)代码。

发件人:

代码语言:javascript
复制
(... appropriate setup...)
void loop()
{
  sensorValue = analogRead(analogInPin);
  sensorValueTemp = sensorValue / 9.31; //LM35 measurement into Centigrade
  Serial.print(sensorValueTemp);
  delay(1000);
}

接收者:

代码语言:javascript
复制
(...appropriate setup...)
void loop() { 
  lcd.setCursor(0, 0);
    if (Serial.available() > 0) {
    lcd.print(incomingByte);
  }
  delay(1000);
}

如果能让float成功传输,有什么建议就好了吗?或者,如果它已经被正确传输,如何正确阅读它?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-14 18:45:10

您可以以字节为单位发送float,并在接收方重建float

下面的示例可能会对您有所帮助:

发送方:

代码语言:javascript
复制
float x = 1128.476;

char b[sizeof(x)];
memcpy(b, &x, sizeof(x));

// Iterate over b and send bytes
// [...]

接收器端:

代码语言:javascript
复制
float y = 0;

char b[sizeof(x)];

// Store 4 bytes representing the float into b
// [...]

// Rebuild the float
memcpy(&y, b, sizeof(y));

最后,接收方的float y与发送方的float x具有相同的表示形式。

票数 3
EN

Stack Overflow用户

发布于 2012-04-15 22:50:43

您可以在具有相同架构、内存布局、字节顺序等的两台机器之间发送所需的所有二进制数据,只需在“发送”端获取一个字节大小的指针(char *),然后迭代被引用对象以获取该对象中的字节数。在“接收”端,分配一个相同大小的对象(float,long,struct foo),并将字节一个接一个地接收到一个字节大小的指针中,该指针在接收到每个字节后递增。

在发送端--

代码语言:javascript
复制
void sendObject(const void *object, size_t size) {
  char *outputCursor = (char *) object;

  for (;size > 0;size--)
    yourSendAByteFunction(*outputCursor++);
}

在接收端,假设yourReceiveAByteFunction()返回0..255表示有效字节,-1表示“接收错误”,您可以这样做--

代码语言:javascript
复制
int receiveObject(void *object, size_t size) {
  char *inputCursor = (char *) object;

  for (;size > 0;size--) {
    int nextByte = yourReceiveAByteFunction();
    if (nextByte < 0)
      return FALSE;

    *inputCursor++ = nextByte;
  }
  return TRUE;
}

您可以在sendObject()函数中执行相同的I/O错误检查,方法是声明yourSendAByteFunction(),以便根据输出中是否发生错误返回TRUEFALSE。这完全取决于你能承受多大的复杂性,以及你是否有可靠的传输链路。

如果有不能传输的字节,还可以进行一点数据封装,方法是使用一个"shift“字节和一组以"shift”字节为前缀的字节值来表示其他字节。

票数 0
EN

Stack Overflow用户

发布于 2012-04-16 10:38:46

您的原始发件人正在发送表示浮点值的ASCII字符串。

为了接收和显示值,您需要修改行,如下所示:

代码语言:javascript
复制
(...appropriate setup...)
void loop() { 
  lcd.setCursor(0, 0);
  while (Serial.available() > 0) {       //Changed Line
      incomingByte = Serial.read();      //Added Line
      lcd.print(incomingByte);
  }
  delay(1000);
}

注:如果使用CR终止串行输出,以使设备同步,而不是延迟(1000),则会更好;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10149589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档