带SD卡数据的Arduino伺服电机控制

时间:2016-06-21 11:58:13

标签: arduino servo

我一直致力于一个项目,我需要根据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中所有抽象层下面都启用和禁用了各种硬件功能,并且由于某种原因延迟了延迟。

有没有人有这方面的经验?以设定速度驱动伺服的任何提示?我的替代解决方案是将数据加载到数组中;但是我不想冒着烧掉所有内存并导致其他问题的风险。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我最后修好了它。我在读取数据时禁用了中断,并且与微软()和毫秒()等计时器功能相混淆;他们依靠中断来跟踪经过的时间。 分离中断服务程序而不是默认禁用它们可能更有意义。