2012-10-11 96 views
0

我正在使用Arduino來控制幾個Victor 884'sArduino - 非阻塞脈衝

經過一番研究,我發現你需要發送一些不同持續時間的脈衝來使其消失(我不知道這裏有什麼合適的術語)。

要控制它,請執行以下操作。

Stop = 1.5 ms on and 0.5 ms off. 
Forward Full Power = 2 ms on and 0 ms off 
Backward Full Power = 1 ms on and 1 ms off 

所以爲了使電機停止,我可以使用這樣的代碼。

void setup() { 
    pinMode(13, OUTPUT); 
} 

void loop() { 
    digitalWrite(13, HIGH); 
    delayMicroseconds(1500); 
    digitalWrite(13, LOW); 
    delayMicroseconds(500); 
} 

問題是,這段代碼被阻塞,所以我不能做任何事情,而不會弄亂時間。 解決方案是擺脫延遲陳述。

我能夠根據BlinkWithoutDelay示例製作非阻塞版本。

當我嘗試控制3-4 Victors時出現問題。我嘗試了複製,粘貼,重命名的方式,但是代碼很快就變得混亂了。

所以我的問題是,我該怎麼做?我應該編寫一些類來處理它(因爲我不知道如何用C++編寫類),或者我應該考慮使用Arduino的定時器來實現我的目標。

+2

我會去與中斷 - 他們沒有阻塞和處理程序將使用硬件定時器,這樣你纔會有確切的時間被調用。 – Pawel

回答

0

您可以同時使用Timer庫和創建自己的類來保持乾淨。您也可以創建一個附加的.pde/.ino文件,其中包含驅動884的函數。

如果你正在運行windows,那麼抓一份Visual Studio Professional和Arduino插件。它有一個選項來創建新的Cpp文件,它會自動爲您創建一個類。 http://www.visualmicro.com

當你看到一個工作時,類很容易。另一種選擇是創建自己的庫來處理884代碼,但這更復雜。

編輯:如果您要學習更多C++,請按照上面Pawel的評論。帕維爾是正確的中斷是最好的,尤其是如果使用microSeconds,我錯過了我第一次看到你的請求。

+0

我想我會藉此機會學習更多的C++。 – giodamelio

+0

當我完成後,我將包括鏈接到圖書館(這個問題已經在搜索「arduino victor 884」的谷歌的第一頁) – giodamelio