我们使用的Arduino Due通过USB将串行数据发送到Visual Studio中生产的软件。
我们面临的问题在于应有的责任。我们有一段对时间要求严格的代码
PumpCycleTime = millis();
// Loop this until the pumpHIGH duration has expired
do
{
digitalWrite(Pump, HIGH);
SendSerialData();
}
while (millis() - PumpCycleTime < PumpHIGH);
// Record the pump cycle LOW start time
PumpCycleTime = millis();
// Loop this until the pumpLOW duration has expired
do
{
digitalWrite(Pump, LOW);
SendSerialData();
}
while (millis() - PumpCycleTime < 1);
最初,我们使用延迟来控制泵的频率。在示波器上进行测量时,这为我们提供了可靠的频率。但是,这当然会损害图表的绘制,因为数据中存在空白。
使用millis()时,我们无法产生相同的频率。显然,我们可以补偿以达到单个频率,但是我们需要能够可靠地使用范围频率。
似乎具有大约15个serial.print的函数的SendSerialData()正在影响时序,因为没有它,频率就会达到预期。
有人知道任何解决方案吗?数据记录和实时绘制到图形是必不可少的,不能妥协。
提前致谢
如果时间非常紧急不要使用delay()
,请使用有限状态机。除此之外,您的波特率是多少?如果是9600,则您的放慢速度很有可能是因为println();
,请尝试使用更大的波特率(例如115200)。
希望对您有所帮助。
约夫
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句