我的 arduino 上有一些非常奇怪的东西。我画了一个草图(我无法发布它,因为我对其进行了编辑,现在它还有其他问题)并且它有一些问题:
当我使用阅读时它完美运行
char c;
String cmd = "";
while (Serial.available()) {
c = Serial.read();
cmd.concat(c);
}
但是在我添加了一个新函数(我什至没有调用它)之后它开始只读取前 2 个字符。如果我再添加一个(相同,我不调用它),则该字符串为空。发生了什么??
我也试过了
char c;
String cmd = "";
while (Serial.available()) {
c = Serial.read();
Serial.println(c);
cmd.concat(c);
}
它会准确地打印出我输入的内容。看起来 concat 被窃听了。我阅读后发现这是一个内存分配错误或其他问题,但它真的很奇怪。我意识到这取决于我的代码的二进制大小(如果它有大约 10.000 个字节,它工作正常,11.000 个仅适用于前 2 个字符,更多根本不起作用)。
请帮忙。我知道我的代码没有错,我需要帮助解决这个错误。
最好的问候, 马泰亚鲁
最佳答案
在 arduino 中,我想这就是你所拥有的:
void loop(){
char c;
String cmd = "";
while (Serial.available()) {
c = Serial.read();
Serial.println(c);
cmd.concat(c);
}
}
在该代码中,当一个新字符被发送(并且您已经读取了整个缓冲区)时,您已经
Serial.available() = FALSE
所以主循环设置
cmd = ""
并且您丢失了以前的数据。修复在主循环外初始化 cmd
,并在循环外初始化 c
:
char c;
String cmd = "";
void loop(){
while (Serial.available()) {
c = Serial.read();
Serial.println(c);
cmd.concat(c);
}
}
关于c++ - arduino 上发生了奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23571460/