我正在尝试编写一个函数,它将文本从不同的源(以太网客户端/串行/等)拉到一行,然后比较它们并运行基于它们的其他函数。简单..
虽然这有效,但是在尝试从函数OTHER而不是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上..
答案 0 :(得分:3)
有点可以猜测你是如何在你的代码中放置延迟(1)的,这是代码中的错误的解决方法。但你没有正确解决它。您可能看到的是,在您完成键入之前,您的代码太急于处理命令。所以你放慢了速度。
但这不是正确的修复,你真正想要做的就是等待输入整个命令。直到你按下键盘上的Enter键。
现在代码中的错误是什么, content 变量不只包含“term”,它还包含终端的Enter键生成的字符。这就是为什么你没有得到匹配。
因此,修复代码,添加测试以检查是否有Enter键字符。然后然后处理命令。