gpt4 book ai didi

c - 如果不在 loop() 中,Arduino Serial.println() 输出一个空行

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:06 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,将来自不同来源(以太网客户端/串行/等)的文本提取到一行中,然后比较它们并基于它们运行其他函数。简单..

虽然这可行,但我在尝试从 loop() 以外的函数调用简单的 Serial.println() 时遇到问题。

到目前为止,我有大约 140 行代码,但这是导致我出现问题的部分的精简版本:

boolean fileTerm;

setup() {
fileTerm = false;
}

loop() {
char character;
String content="";
while (Serial.available()) {
character = Serial.read();
content.concat(character);
delay(1);
}

if (content != "") {
Serial.println("> " + content);

/** Error from Serial command string.
* 0 = No error
* 1 = Invalid command
*/
int err = testInput(content);
}

int testInput(String content) {
if (content == "term") {
fileTerm = true;
Serial.println("Starting Terminal Mode");
return 0;
}

if (content == "exit" && fileTerm == true) {
fileTerm = false;
Serial.println("Exiting Terminal Mode");
return 0;
}
return 1;
}

(完整源代码在 http://pastebin.com/prEuBaRJ)

所以重点是捕捉“term”命令并进入某种文件系统终端模式(最终访问和操作 SD 卡上的文件)。 “exit”命令将退出终端模式。

但是,每当我实际编译这些命令并将其与其他命令一起输入串行监视器时,我都会看到:

> hello
> term

> test for index.html
> exit

> test
> foo
> etc...

我认为该函数正在捕获那些保留项并实际正确处理它们,但无论出于何种原因,都没有通过串行总线发送所需的响应。

只是为了语法正确,我还在一个单独的头文件中声明了 testInput() 函数,尽管我怀疑这与是否会发生此特定错误有任何关系。

有什么可以解释的原因吗?

谢谢。

型号:Arduino Uno R3,IDE 版本:1.0.4,尽管在某些情况下此行为也发生在 v1.0.5 上..

最佳答案

可以猜测您最终是如何将 delay(1) 放入您的代码中的,这是您代码中一个错误的解决方法。但是你没有正确解决它。你可能看到的是你的代码太急于处理命令,在你完成输入之前。所以你放慢了速度。

但这不是正确的解决方法,您真正想要做的是等待键入整个命令。直到您按下键盘上的 Enter 键。

现在您的代码中的错误是什么,content 变量不仅包含“term”,它还包含由终端的 Enter 键生成的字符。这就是您找不到匹配项的原因。

因此修正您的代码,添加一个测试来检查您是否获得了 Enter 键字符。然后然后处理命令。

关于c - 如果不在 loop() 中,Arduino Serial.println() 输出一个空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18283327/

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