2014-12-03 58 views
2

因此,基本上下面的代碼永遠不會退出for循環,並且我需要它退出for循環以打印緩衝區最終包含的任何內容通過每個字符。然而,正如我之前所說,循環(據我所知)只是繼續前進,並沒有結束,因此爲什麼從來沒有打印緩衝區外循環(我知道它在循環內重複打印)。 我相當肯定,如果帶有break命令的語句會在這裏執行這個技巧,但是在盯着它一段時間之後,我仍然不知道它會是什麼。出於某種原因,永遠不會退出for循環打印出最終值

另外一個需要注意的是,該代碼不能是void loop()函數內部,且必須是void setup()功能

這是代碼

char iValue; 
const int bufflen = 10; 
char buffer[bufflen]; 

void setup() { 
    Serial.begin(9600); 

    Serial.println(buffer); 
    int index = 0; 
    int i = 0; 

    for(i=0;i<bufflen;i++) { 

     while (!Serial.available()) { 
      ; 
     } 
     iValue = Serial.read(); 
     buffer[index] = iValue; 
     //Serial.println(buffer); 
     //Serial.println(iValue); 
     Serial.println(buffer); 
     index++; 
     if (index > bufflen){ 
      break; 
     } 
    } 

    Serial.println(buffer); 
} 

void loop() { 

} 
+1

這不是'c'問題。刪除標籤。此外,請妥善縮進您的代碼。 – 2014-12-03 06:21:14

+0

您的while循環可能會導致此問題。 – Blacktempel 2014-12-03 06:26:28

+0

是否有任何可能導致Serial.available()變爲false的內容? – TheBigH 2014-12-03 06:30:52

回答

1

內是否有可能的是,雖然(!Serial.available() )循環導致掛起?如果串行對象沒有被另一個線程填充,那麼一旦進入while循環,它將阻止任何讀取更多數據的能力?

0

您必須使用條件',而(Serial.available()){//做一些事情}``

這種方式,主要loop()功能將繼續運行,並且while循環纔會執行條件滿足時,即有串行數據可供讀取時。

Serial.available()功能是一個回調到另一個功能之外運行的void loop()

這是一個真正的Arduino程序是什麼樣子:

int main(void) 
{ 
init(); 
initVariant(); 
#if defined(USBCON) 
USBDevice.attach(); 
#endif 

setup(); 

for (;;) { 
    loop(); 
    if (serialEventRun) serialEventRun(); 
} 

return 0; 
} 

正如你所看到的,如果你的程序是停留在while(!Serial.avalaible())在循環內部,沒有辦法達到'if(serialEventRun)serialEventrun();`行。因此你遇到的問題。

下面是關於Arduino的谷歌羣組這個問題的一個很有趣的討論:Defect In SerialEvent

希望這有助於。