2013-11-21 75 views
0
void setup() 
{ 
    Serial.begin(9600); //Set serial baud rate 9600 
    pinMode(13,OUTPUT); //Set LED for output 
} 
String str; 
void loop() 
{ 
    if(Serial.available() > 0) 
    { 
     char ch = Serial.read(); 
     str += ch; 
    } 
    if (str == "Hi") 
    { 
     digitalWrite(13,HIGH); //Turns on the LED if "Hi" is entered. 
    } 
    if (str == "Bye") 
    { 
     digitalWrite(13,LOW);  //Turns off the LED if "Bye" is entered. 
    } 
} 

的方式,我有一個問題。我想我不清楚Arduino在讀取String時是如何工作的。 這是我的素描。 如您所見,如果輸入「Hi」,則打算打開LED,如果輸入「Bye」,則打開LED。 編譯的很好,但每當我連接串口時,上傳它並打開帶有「Hi」字樣的LED,我無法用「再見」一詞關閉LED。 另外,如果我先輸入「再見」,然後再輸入「Hi」,則LED不亮。混淆的Arduino處理字符串

什麼是我的代碼有問題嗎?我如何修改它?

+1

我將在http://arduino.cc/en/Serial/Read讀了。也可以使用寫入串行作爲調試日誌。因此,經常將str寫入串行,並將其值與預期值進行比較,以確定代碼出錯的位置。 – DrCord

+1

它應該用'「HiBye」禁用嗎?問題必須證明對解決問題的最低限度的理解...... –

+0

@LS_dev不,我的意思是,如果我用'Hi'字打了一個'hit',後來用'Bye'打了'hit',那麼「Bye」不會任何與LED。關於「HiBye」,LED打開,但對於「ByeHi」,它不會 –

回答

0

您必須清除str命令後接受(或拒絕):

str=NULL; 

str=""; 

str=new String(); 

所有這些都會分配一個空的(或空)字符串到str

我建議你開始學習

+0

太棒了!太感謝了。我正在尋找這個答案:) –

+0

你能向我解釋爲什麼你推薦我學習C++嗎?我是一名新生,不知道接下來要學什麼。我正在學習C. –

+0

好的,你是對的!很好地學習C,然後從C++開始。 'String'和'Serial'是對象(C++),但你應該先學習C,就像你在做的一樣。 –

1

好了,它看起來像你對我應該清理出你的STR變種,一旦你有一個打擊。因爲它聽起來像在第一個字符串上工作,但從不在第二個字符串上。

一旦檢測到高或輪空,您可以設置輸出和清晰的海峽。

+0

感謝您的回覆。你能告訴我如何清空字符串嗎? –