2014-10-12 67 views
0

我有一個簡單的Arduino代碼:結算的Arduino的串行緩衝器

void loop() 
{ 
    if serial.available 
    { 
    c = serial.read(); 
    if (c == 'a') 
    { 
     blinkled(); 
    } 
    else 
     offled(); 
    } 
} 

應該煥發領導,如果我發送一個字符「A」。 ,當我循環進入下一個回答時,我什麼都不給出,它就會關閉。

但一旦我給'一個'。它開始發光,從不熄滅。

它是從緩衝區中讀取char'a'嗎? 如果是的話怎麼清除它?

Serial.flush()不起作用。

任何想法請。 剛剛接觸arduino。 對不起,如果它愚蠢。

回答

0

您已將您的offled函數INSIDE放入Serial.available()路徑。您只能通過Serial.available()將其關閉,並且您推送不同的字符,以便讀取除「a」以外的內容。

不幸的是,上述示例出現同樣的錯誤。

建設社會主義,使LED熄滅外,如果聲明

+0

謝謝!是的,這是一個錯誤! – 2014-10-12 14:03:44

0

你可以使用這樣的事情:

void loop() { 
    while (Serial.available() > 0) 
    { 
     char received = Serial.read(); 
     inData += received; 

     // Process message when new line character is received 
     if (received == '\n') 
     { 
      Serial.print("Arduino Received: "); 
      Serial.print(inData); 

      // You can put some if and else here to process the message juste like that: 

      if(inData == "a\n"){ // DON'T forget to add "\n" at the end of the string. 
       Serial.println("OK, I'll blink now."); 
       blinkled(); 
      } 
      else if (inData == "b\n") { 
       offled(); 
      } 

      inData = ""; // to flush the value. 
     } 
    } 
} 

編輯:我基於正確答案修改我的答案。

+0

三江源去指正! – 2014-10-12 14:05:15

+0

@JonesJoseph我做了更正:) – ladislas 2014-10-12 17:07:54