Мы используем Arduino Due для отправки последовательных данных через USB в программу, созданную в Visual Studio.
Проблема, с которой мы сталкиваемся, связана с Due. У нас есть участок кода, который критичен по времени
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() мы не можем получить ту же частоту. Очевидно, что мы могли бы компенсировать достижение одной частоты, однако нам нужно иметь возможность надежно использовать диапазон частот.
Кажется, что SendSerialData(), функция с примерно 15 serial.print, влияет на тайминги, так как без нее частота соответствует ожидаемой.
Кто-нибудь знает какие-нибудь решения? Регистрация данных и построение графика в режиме реального времени необходимы и не могут быть скомпрометированы.
заранее спасибо