さまざまなソース (イーサネット クライアント/シリアル/など) からテキストを 1 行にプルし、それらを比較して、それらに基づいて他の関数を実行する関数を作成しようとしています。単純..
これは機能しますが、単純な Serial.println() を loop() 以外の関数から呼び出そうとすると問題が発生します。
これまでのところ、約 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 でも発生する場合がありました.