gpt4 book ai didi

serial-port - Arduino 串行通信未收到完整消息

转载 作者:行者123 更新时间:2023-12-02 22:27:27 24 4
gpt4 key购买 nike

我的 Arduino 通讯有问题。这很难描述,所以我不能把它放在标题中。无论如何,这里有以下内容:

所以我的接收端有这段代码:

if(Serial1.available())
{
while(Serial1.available())
{
uint8_t inByte = Serial1.read();

inByte = inByte ^ k;

Serial.write(inByte);
}

Serial.println(" done");
}

它应该在一行中打印并在完成时打印完成。 Serial1.available() 好像跳过了下一个Serial1.available(),不知道怎么回事。无论如何,这是我当前的错误输出:

h done
e done
l done
l done
o done

done

什么时候应该:

hello done

很抱歉,如果可以用更好的措辞表达,但我现在只能输入这些了,我的大脑有点疼。我从未在 Windows C++ 控制台应用程序中遇到过这种行为。

最佳答案

如果您在 loop() 中调用该例程,那么是的,它将从串行缓冲区读取并立即返回,因为您发送数据的速度可能不够快。

处理此类事情的更好方法是使用指示消息结尾的控制字符,或者如果您有希望接收的特定数据格式,则对传入的字符进行计数,直到已达到数据格式限制。

这里有一些您可能会觉得有用的讨论:Serial Duplex using Arduino还有 Arduino IDE 附带的示例草图:菜单:示例:通信:

此外,请阅读 Serial 下的所有条目Arduino 上市。那里有好东西。

因此,您为使用串行输入而开发的例程实际上取决于您的项目和您接收的数据类型。在上面的示例中,如果您要使用控制字符,它可能如下所示:

 while(Serial1.available()){
char c = Serial1.read();

if (c == '*'){
Serial.println(" done");
} else {
Serial.write(c);
}
}

关于serial-port - Arduino 串行通信未收到完整消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com