我一直在做一个项目,我需要根据 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 并导致其他问题的风险。
提前致谢!