我在一个简单的2节点Xbee网络上传输一个浮动时遇到了问题。
我知道Xbee系统通过字节传输包,所以我可以发送一个char,但我在发送更多字符时遇到了问题,而且我似乎找不到任何文档。
这是我当前的(基本)代码。
发件人:
(... appropriate setup...)
void loop()
{
sensorValue = analogRead(analogInPin);
sensorValueTemp = sensorValue / 9.31; //LM35 measurement into Centigrade
Serial.print(sensorValueTemp);
delay(1000);
}接收者:
(...appropriate setup...)
void loop() {
lcd.setCursor(0, 0);
if (Serial.available() > 0) {
lcd.print(incomingByte);
}
delay(1000);
}如果能让float成功传输,有什么建议就好了吗?或者,如果它已经被正确传输,如何正确阅读它?
谢谢
发布于 2012-04-14 18:45:10
您可以以字节为单位发送float,并在接收方重建float。
下面的示例可能会对您有所帮助:
发送方:
float x = 1128.476;
char b[sizeof(x)];
memcpy(b, &x, sizeof(x));
// Iterate over b and send bytes
// [...]接收器端:
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具有相同的表示形式。
发布于 2012-04-15 22:50:43
您可以在具有相同架构、内存布局、字节顺序等的两台机器之间发送所需的所有二进制数据,只需在“发送”端获取一个字节大小的指针(char *),然后迭代被引用对象以获取该对象中的字节数。在“接收”端,分配一个相同大小的对象(float,long,struct foo),并将字节一个接一个地接收到一个字节大小的指针中,该指针在接收到每个字节后递增。
在发送端--
void sendObject(const void *object, size_t size) {
char *outputCursor = (char *) object;
for (;size > 0;size--)
yourSendAByteFunction(*outputCursor++);
}在接收端,假设yourReceiveAByteFunction()返回0..255表示有效字节,-1表示“接收错误”,您可以这样做--
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(),以便根据输出中是否发生错误返回TRUE或FALSE。这完全取决于你能承受多大的复杂性,以及你是否有可靠的传输链路。
如果有不能传输的字节,还可以进行一点数据封装,方法是使用一个"shift“字节和一组以"shift”字节为前缀的字节值来表示其他字节。
发布于 2012-04-16 10:38:46
您的原始发件人正在发送表示浮点值的ASCII字符串。
为了接收和显示值,您需要修改行,如下所示:
(...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),则会更好;
https://stackoverflow.com/questions/10149589
复制相似问题