Есть 3 модуля связанные по nrf24l01. Подтверждение отключено везде. Речь пойдет только о двух модулях.
Старт постоянно принимает. Финиш постоянно передает.
Отсылаю 20 пакетов с номером попытки отправки один раз в 200 миллисекунд.
Если на приемник приходит 0й пакет - задержки на попытку не было (можно пренебречь), время не компенсируем.
Если 0й потерялся, а пришел 1й пакет - компенсируем 200мс т.к передатчик затратил это время на ожидание между попытками.
Проблема в том, что 1й пакет приходит раньше 200мс и время компенсируется с избытком.
Например, модули настроены на авто-тестирование. Нажимают «старт-финиш» автоматом со строго определёнными интервалами. Настроены на результат 10000мс.
Когда приходит попытка 0 - результат фиксируется от 10003-9999 (это устраивает)
Когда приходит попытка 1 - результат фиксируется 10158-10161. (Хотя на передатчике настроено 200мс между попытками)
Когда приходит попытка 2 - результат фиксируется 10352-10353
Лог с приёмника приложил.
Команда отправки: radio.writeFast(&data, sizeof(data));
В data лежит структура вида:
struct FinStruct {
unsigned long finishID;
byte tryNumber;
int finishPacketCode;
};
- Вложения
-
- Лог c millis. Ожидаемый результат 2000мс.txt
- Блоки настроены на 2000мс. pong это фиксация пакета который отсылается раз в 333мс для проверки связи.
- (5.39 КБ) 87 скачиваний
-
- Лог без millis. Ожидаемый результат 10000мс.txt
- Блоки настроены на 10000мс. pong это фиксация пакета для проверки связи.
- (3.39 КБ) 92 скачивания


