我試圖編寫一個函數,將從不同的來源(以太網客戶端/串行/等等)文本拉到一行,然後比較他們並根據他們運行其他功能。簡單..Arduino Serial.println()輸出一個空行,如果不在循環中()
雖然這個工程,我試圖調用一個簡單的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的烏諾R3,IDE版本:1.0.4,但這種行爲也發生在某些情況下,V1.0.5 ..
非常好!我現在不在我的試驗檯附近,但是我一會兒就會測試一下。 – depwl9992
但是,我只記得Arduino串口監視器無論如何都是緩衝的,並沒有完全按照你輸入的方式進行處理。因此,在我看來,輸入密鑰代碼可能永遠不會傳遞給要處理的單元,因爲它只用於告訴軟件「將緩衝區存儲到com端口」。這是一個正確的假設嗎? – depwl9992
不在Arduino中。如果它發生在任何地方,它應該或延遲(1)是不夠的,那麼它可能發生在你正在使用的任何終端程序中。 –