Есть какое то соединение, проводное, беспроводное, по которому данные с передатчика попадают на приемник с завидной регулярность. Что бы сделать задачу более конкретной и простой соединение будет UART, а данные должны будут подаваться не реже чем раз в 2 секунды.
Задача.Определить не отвалилось ли соединение и в случае чего произвести действие.
Задача очень простая , для тех кто хоть немного программирует, а для остальных пишу алгоритм.
Заводим 2 переменные, одну в формате uint32_t для таймера приема, вторую логическую, которая будет указывать есть соединение или нет.
При получении данных в 1-ую переменную запоминаем текущее время, вторую переменную делаем true
В бесконечном цикле loop проверяем время прошедшее с момента последнего приема по текущее время, и если такое время превышает интервал получения данных, то тогда считаем это потерей соединения. При этом если вторая переменная стоит в состоянии true, то эта потеря произошла только что, выводим сообщение и вторую переменную ставим в false
Как видите ничего сложного нет, надеюсь кому то это поможет.
Ниже простой демонстрационный код:
Задача.Определить не отвалилось ли соединение и в случае чего произвести действие.
Задача очень простая , для тех кто хоть немного программирует, а для остальных пишу алгоритм.
Заводим 2 переменные, одну в формате uint32_t для таймера приема, вторую логическую, которая будет указывать есть соединение или нет.
При получении данных в 1-ую переменную запоминаем текущее время, вторую переменную делаем true
В бесконечном цикле loop проверяем время прошедшее с момента последнего приема по текущее время, и если такое время превышает интервал получения данных, то тогда считаем это потерей соединения. При этом если вторая переменная стоит в состоянии true, то эта потеря произошла только что, выводим сообщение и вторую переменную ставим в false
Как видите ничего сложного нет, надеюсь кому то это поможет.
Ниже простой демонстрационный код:
C++:
void setup() {
Serial.begin(115200);
}
void loop() {
static uint32_t tmr = millis();
static bool state_pr = false;
if (Serial.available())
{
String s = Serial.readString();
tmr = millis();
state_pr = true;
Serial.println("Yes");
}
if (millis() - tmr > 5000)
{
if (state_pr)
{
state_pr = false;
Serial.println("No");
}
}
}