Модуль NRF24L01+PA+LNA и зависание ардуино

Здравствуйте!
Возникла необычная проблема с системой из двух ардуино плат, соединенных по модулю NRF24L01+PA+LNA. На прошлых версиях программ приемника и передатчика все работало отлично как часы в течение недель, и проблем не испытывало. Недавно изменил один датчик на передатчике на два других, и теперь все стало троить. Передатчик шлет данные вроде бы исправно. Приемник после начала работы эти данные исправно получает, и пишет в uart примерно следующее
248
185
247
186
Эти цифры - это данные с двух датчиков в два цикла передатчика. Но внезапно, через час - два -три после начала приема сигнала приемник как бы зависает, я это определяю по отсутствию моргания Tx, так как оба модуля не подключены к ноутбуку постоянно. Вот сегодня я оставил ноутбук на модуле, чтобы читать uart, и он через два часа снова завис, с последними сообщениями
248
185
185
0
То есть данные с одной передачи с одного из датчиков не были получены, но потом откуда взялся 0, и после этого он завис. После перезагрузки приемника он снова начинает исправно получать сообщения. Вот не пойму, от чего зависает, может кто поймет. Сейчас, пока писал, подумал, может из-за того, что в передатчике обе цифры с датчиков отправляются без перерыва, и, может, они там смешиваются как-то время от времени, не знаю. Код передатчика и приемника отправляю также в тему
Передатчик

#include <SPI.h>
#include "RF24.h"
#include <NewPing.h>

RF24 radio(9, 10); // Пины CE и CSN
const byte address[6] = "00001"; // Адрес модуля
const int d2 = 0001; // Сигнал, отправляемый при получении на порт D2

// Параметры для датчика HC-SR04
#define TRIGGER_PIN3 3 // Пин 3 для подачи сигнала Trigger
#define TRIGGER_PIN5 5 // Пин 5 для подачи сигнала Trigger
#define ECHO_PIN2 2 // Пин 2 для чтения сигнала Echo
#define ECHO_PIN4 4 // Пин 4 для чтения сигнала Echo
#define MAX_DISTANCE 500 // Максимальное расстояние в сантиметрах

// Параметры для светодиода
#define LED_PIN 13 // Пин светодиода на плате Arduino

// Объект для работы с датчиком HC-SR04
NewPing sonar2(TRIGGER_PIN3, ECHO_PIN2, MAX_DISTANCE);
NewPing sonar3(TRIGGER_PIN5, ECHO_PIN4, MAX_DISTANCE);

unsigned long previousMillisSensor = 0; // Переменная для хранения предыдущего времени опроса датчика
unsigned long previousMillisUART = 0; // Переменная для хранения предыдущего времени вывода в UART
unsigned long previousMillisIf = 0; // Переменная для хранения предыдущего времени вывода в UART
const unsigned long intervalSensor = 200; // Интервал опроса датчика (в миллисекундах), 5 раз в секунду
const unsigned long intervalUART = 1000; // Интервал вывода в UART (в миллисекундах), 1 раз в секунду
const unsigned long intervalIf = 10000; // Интервал 10 секунд

int data1;
int data2;

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT); // Устанавливаем пин светодиода на вывод
  
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);
  radio.stopListening();
}

void loop() {
  unsigned long currentMillis = millis(); // Получаем текущее время в миллисекундах

  // Опрос датчика HC-SR04
  if (currentMillis - previousMillisSensor >= intervalSensor) {
    previousMillisSensor = currentMillis; // Сохраняем текущее время как предыдущее

    // Опрашиваем датчик HC-SR04
    data1 = sonar2.ping_cm(); // Получаем расстояние в сантиметрах
    delay(100);
    data2 = sonar3.ping_cm(); // Получаем расстояние в сантиметрах
    delay(100);

    /*// Если расстояние меньше 150 см (1,5 метра)
    if (data[0] < 150 || data[1] < 150) {
      digitalWrite(LED_PIN, HIGH); // Включаем светодиод
    } else {
      digitalWrite(LED_PIN, LOW); // Выключаем светодиод
    }*/
  }

  // Вывод в UART
  if (currentMillis - previousMillisUART >= intervalUART) {
    previousMillisUART = currentMillis; // Сохраняем текущее время как предыдущее

    Serial.print("Distance: "); // Выводим заголовок
    Serial.print(sonar2.ping_cm()); // Выводим расстояние в сантиметрах
    Serial.print(", ");
    Serial.print(sonar3.ping_cm()); // Выводим расстояние в сантиметрах
    Serial.println(" cm"); // Выводим единицу измерения

    radio.write(&data1, sizeof(data1)); // Отправка по радио сигнала с тем-же интервалом
    radio.write(&data2, sizeof(data2));
  }

  

  if (data1 < 110 || data2 < 110) {
    previousMillisIf = currentMillis;
  }

  if (currentMillis - previousMillisIf <= intervalIf) {

    radio.write(&d2, sizeof(d2));
    Serial.print("Sent: ");
    Serial.println(d2);
  }
}

Приемник

#include <SPI.h>
#include "RF24.h"

RF24 radio(9, 10); // Пины CE и CSN
const byte address[6] = "00001"; // Адрес модуля
const int LED2 = 8; // Пин светодиода
const int LED = 13; // Пин светодиода 2
unsigned long lastTime = 0;

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);
  radio.startListening();
  digitalWrite(LED, LOW);
  digitalWrite(LED2, LOW);
}

void loop() {
  unsigned long currentMillis = millis(); // Получаем текущее время в миллисекундах
  
  if (radio.available()) {
    int data;
    radio.read(&data, sizeof(data));
    Serial.print("Received: ");
    Serial.println(data);
    if (data <= 110) {
      lastTime = millis();
      //digitalWrite(LED2, HIGH);
      loop2();
    }
    if (data > 110) {
      lastTime = millis();
      //digitalWrite(LED2, LOW);
    }
    if (data == 0001) {
      lastTime = millis();
      loop2();
    }
  }
  if (millis() - lastTime > 20000) {
    digitalWrite(LED2, HIGH);
    Serial.println(millis() - lastTime);
    //loop1();
  }
}

void loop1() {
  int i1 = 0;
  do{
    digitalWrite(LED, HIGH);
  delay(500);
  digitalWrite(LED, LOW);
  delay(500);
  }
  while(i1 < 1);
}

void loop2() {
  int i1 = 0;
  do{
    digitalWrite(LED2, HIGH);
  delay(1000);
  digitalWrite(LED2, LOW);
  delay(1000);
  }
  while(i1 < 1);
}

Почему вот тут есть delay()

А здесь его нет?

Почему вот тут есть delay()

А здесь его нет?
В опросе датчика delay нужен для того, чтобы сигналы датчиков не перекрывали друг друга, т.к. он ультразвуковой. А вывод в uart, который все равно не подключен никуда, значения не имеет, и выводится 1 раз в 1 секунду, тогда как опрос 5 раз в секунду

Т.е. распространение УЗ и влияние его на другие приборы обуславливается подключенностью UART куда-либо?

В том и дело, что взаимосвязи никакой. У обоих функций, если можно так их назвать, свои переменные по таймингу

Предлагаю эксперимент - закомментируйте все вызовы sonar3 и посмотрите на стабильность.

Хорошо, попробую, через несколько дней отпишусь насчет этой попытки, т.к. доступа к передатчику прямо сейчас не имею

С проблемой разобрался. Была проблема, когда приемник, якобы, получал 0. Это была связано с тем, что были слабо закреплены штекеры питания, на ветру слегка отходили от платы приемника и он получал якобы 0. Впоследствии стал регулярно получать число -28160. Оказалось, это было связано с тем, что передатчик отправлял “d2 = 000111000” (в коде вверху написана другая цифра, 0001, оказалось я залил программу, а потом отредактировал файл). Возникает какая-то проблема по типу данных, и передатчик отправляет вместо 000111000 число -28160. В целом, проблем нет, сегодня исправлю и перезалью программы