ARDUINO Простой алгоритм проверки соединения с чем либо.

Старик Похабыч

★★★★★★★
14 Авг 2019
4,222
1,291
Москва
Есть какое то соединение, проводное, беспроводное, по которому данные с передатчика попадают на приемник с завидной регулярность. Что бы сделать задачу более конкретной и простой соединение будет UART, а данные должны будут подаваться не реже чем раз в 2 секунды.
Задача.Определить не отвалилось ли соединение и в случае чего произвести действие.

Задача очень простая , для тех кто хоть немного программирует, а для остальных пишу алгоритм.
Заводим 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");
    }
  }
}
 
  • Лойс +1
Реакции: denispy45