2015-06-28 45 views
2

這裏的大圖片:計時問題使用PySerial與Arduino的烏諾

我試圖通過記錄設定的位置,然後回放它們來控制步進電機。要控制步進器,我正在使用AccelStepper。

由於移動數據很大,我需要將它存儲在我的Mac上,並使用串行連接將其發送到Arduino。

另外,由於AccelStepper的工作方式,我無法承受延遲。

這裏的問題:

下面的代碼時,我插入約60毫秒以上的延時工作。但是,這將AccelStepper搞砸了。

我的理解是,第一個while循環「聽」到串口線。如果沒有可讀的內容,我會向Mac發送'A'以請求一些數據。當有數據可供讀取時,此循環會中斷。

第二個循環讀取串行線,直到遇到換行符。此代碼適用於延遲,並且沒有延遲。

這有道理嗎? 謝謝你。

================================

if (stepper.distanceToGo() == 0) 
{ 
    while (Serial.available() <= 0) {   // Ask Mac for more data. 
     Serial.print("A"); 
     delay(60);       // Argh line! 
     stepper.runSpeedToPosition(); 
    } 

while(Serial.available() > 0) {  // There's info on the serial line 
    character = Serial.read(); 
    content.concat(character); 
    if (character == '\n') break;  // Keep reading until newline 

    stepper.runSpeedToPosition(); 
} 

回答

0

沒有延遲,while循環會採取「全部」您的系統(CPU)資源,實際上延遲串行線路的中斷。 60是非常具體的價值,但。

因此,一個選項是重寫循環和測試,如果這有助於:

if (stepper.distanceToGo() == 0) { 
    while (true) {   
     if(Serial.available() <= 0) { // Ask Mac for more data. 
      Serial.print("A"); 
      stepper.runSpeedToPosition(); 
     } else { 
// the case for (Serial.available() > 0) There's info on the serial line 
      character = Serial.read(); 
      content.concat(character); 
      if (character == '\n') break; // Keep reading until newline 
      stepper.runSpeedToPosition(); 
     } 
    } 
} 
+0

感謝您考慮這一點。不幸的是,我仍然需要Serial.print(「A」)之後的延遲。因爲它一直工作。 – ixodid