簡體   English   中英

帶有SD卡數據的Arduino伺服電機控制

[英]Arduino Servo Motor Control with SD Card Data

我一直在進行一個項目,該項目需要基於SD卡上保存的數據來控制伺服電機。 到目前為止,一切進展順利,但是我在控制伺服電機運動的時間和速度方面遇到了問題。 我將解釋我要完成的工作以及一些示例代碼。

我正在使用帶有SD模塊的Arduino Mega。 在SD卡上,我有四個不同的.txt文件。 每個文件包含30個整數值,每行包含一個整數,並以(,)結尾。 這只是測試數據,因此我可以掃過多個角度來檢查我正在讀取並正確轉換值。 但是,當我嘗試使用計時器,延遲等來降低伺服器速度時,它會像加速器一樣加速代碼的速度。 就我而言,代碼如下所示:

string dataRead ="";                  // String object to read bytes from
unsigned long int motorTime = 250;    // Refresh time of the motor (250 ms)      
unsigned long int lastMotor = (long) micros();
while (entry.available()) {           // While there are bytes in the file to be read
   dataRead = entry.readStringUntil(',');
   while((long) micros() - lastMotor <= (motorTime * 1000));    // Do nothing until refresh time has elapsed

   myServo.write(dataRead.toInt());
   lastMotor = (long) micros();
}

可以很好地讀取數據,並且電動機根據數據運行,但是由於某些原因,正時代碼似乎被取反了。 我懷疑這是因為在Arduino IDE的所有抽象層下都啟用和禁用了各種硬件功能,並且由於某種原因而忽略了延遲。

有人對此有經驗嗎? 有什么技巧可以以設定的速度驅動伺服器? 我的替代解決方案是將數據加載到數組中。 但我不想冒着燒毀所有RAM並引起其他問題的風險。

提前致謝!

我最終修復了它。 我在讀取數據時禁用了中斷,並中斷了諸如micros()和millis()之類的定時器功能; 他們依靠中斷來跟蹤經過的時間。 分離中斷服務例程可能比在默認情況下禁用它們更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM