[英]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.