Вопрос по wi-fi модулю nRF24l01

Здравствуйте, я начинающий ардуинщик. Занимаюсь реализацией проекта, который заключается в передаче дискретного сигнала с четырех герконовых датчиков на одно устройство-приемник (с помощью Wi-fi модуля nRF24l01). Каждый передатчик сообщает приемнику о том, что он среагировал на магнит, а устройство приемник подсчитывает, сколько раз среагировал каждый передатчик. Проблема заключается в том, что период опроса всех четырех передатчиков в среднем составляет 2 секунды, вследствие чего, когда какой либо из передатчиков проходит мимо магнита, он может просто не успеть передать эту информацию приемнику и срабатывание не будет засчитано. Программно задал максимальную скорость передачи пакетов данных. Подключены передатчики к питанию через понижающие модули, конденсаторы припаяны, как и все контакты. Возможно ли, что дело в скорости взаимодействия между nRF модулем и самой платой ардуино? Или это никак не влияет на скорость опроса? Возможно ли сделать так, чтобы передатчик (если за период опроса прошел магнит, но не успел отправить об этом информацию, пока значение на нем было High), каким либо образом отправил информацию о пройденной метке в следующий опрос?

TX

#include <SPI.h>                            // Подключаем библиотеку для работы с шиной SPI.
#include <nRF24L01.h>                       // Подключаем файл настроек из библиотеки RF24
#include <RF24.h>                           // библиотека для работы с nRF24L01+ https://yadi.sk/d/nX_akvzEusyGz
RF24 radio(9, 10);                          // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN).
                                            // Создаём переменную для передачи данных
int buttonPin = 2;                          // Номер пина, к которому подключен геркон
int buttonState = 0;                        // Переменная для записи состояния геркона
                

void setup() {
  pinMode(buttonPin, INPUT);                // Включаем второй пин на ввод
                                            // LED. процесс приёма / передачи, подтверждаем миганием светодиода
  radio.begin();                            // Инициируем работу nRF24L01+.
  radio.setChannel(100);                    // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц.(на одном канале можно, одновременно иметь "1 передатчик-рот-труба" или "6 приёмников-ушей-трубы"
  radio.setDataRate     (RF24_2MBPS);         // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS). При скорости 2 Мб/с, задействуются сразу два канала (выбранный и следующий за ним). (самая дальнобойная 250KBPS, но скорость меньше)
  radio.setPALevel      (RF24_PA_MIN);      // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm).
  radio.openWritingPipe (0xAABBCCDD33LL);   // Открываем трубу с идентификатором 0xAABBCCDD11 (для передачи данных). на одном канале может быть только 1 труба, для передачи). (последний байт "идентификатора-передатчика (11)" нужен для распознавания трубами приёмника, которых может быть до 6-на одном канале).
}
void loop () {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {               
    radio.write(&buttonState, sizeof(buttonState));  // отправляем данные на другую Arduino. sizeof(TEST)))-указываем, сколько байт мы хотим отправить)(Приемник отправляет передатчику сигнал подтверждения приёма данных (без смены режима работы).
  }
  else{
    radio.write(&buttonPin, sizeof(buttonPin));
    }
  delay(50);                                         // "delay" устанавливаем задержку на 50 мс, за это время приемник успеет принять и обработать данные этого и другого передатчика.
}

RX

#include <SPI.h>                             // Подключаем библиотеку  для работы с шиной SPI
#include <nRF24L01.h>                        // Подключаем файл настроек из библиотеки RF24
#include <RF24.h>                            // библиотека для работы с nRF24L01+ https://yadi.sk/d/nX_akvzEusyGz
#include <SoftwareSerial.h>                  // библиотека для создания дополнительного UART порта из двух пинов


RF24           radio(9, 10);                 // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN)
byte pipe;                                    // Создаём переменную  для хранения номера трубы, по которой пришли данные                                    // Создаём переменную для приема данных
int TEST;
int pipe_i = 1;

int sum[] = {0, 0, 0, 0};
int TEST_1[] = {1, 1, 1, 1};
int res1 = 0;
int res2 = 0;

int result = 0;
int A = 0;
int B = 33;
int C = 66;
int D = 100;

void setup() {
 
  Serial.begin(9600);
  
  delay(1000);                               // перед первой командой инициализацией nRF24L01+, лучше сделать паузу. припаять конденсатор между выводами плюс и минус nRF24L01+
  radio.begin();                             // Инициируем работу nRF24L01+
  radio.setChannel(100);                       // Указываем канал приёма данных (от 0 до 127), 5 - значит приём данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков)
  radio.setDataRate     (RF24_2MBPS);      // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS). При скорости 2 Мб/с, задействуются сразу два канала (выбранный и следующий за ним). (самая дальнобойная 250KBPS, но скорость меньше)
  radio.setPALevel      (RF24_PA_MIN);      // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
  radio.openReadingPipe (1, 0xAABBCCDD11LL); // Открываем 1 трубу с идентификатором 0xAABBCCDD11 для приема данных ("приёмник"-на одном канале может быть открыто до 6 разных труб), (которые должны отличаться только последним байтом идентификатора)
  radio.openReadingPipe (2, 0xAABBCCDD22LL); // Открываем 2 трубу с идентификатором 0xAABBCCDD22 для приема данных (То есть может одновременно ловить сигнал от шести таких же модулей, передающих на одном частотном канале)
  radio.openReadingPipe (3, 0xAABBCCDD33LL);
  radio.openReadingPipe (4, 0xAABBCCDD44LL);
  radio.startListening  ();                  // Включаем приемник, начинаем прослушивать открытую трубу
  //  radio.stopListening   ();              // Выключаем приёмник, если потребуется передать данные

}

void loop() {
    
  if (radio.available(&pipe)) {              // Если в буфере имеются принятые данные, то получаем номер трубы, по которой они пришли, по ссылке на переменную pipe
    radio.read(& TEST, sizeof(TEST));         // Читаем данные в переменную TEST и указываем сколько байт читать
    
    if (pipe == pipe_i){                                //конструкция для поочередного опроса передатчиков с 1 по 4
      if (TEST != TEST_1[pipe_i-1] && TEST == 2){        //С помощью этого условия фиксируется переход состояния геркона передатчика с High на Low и наоборот
        sum[pipe_i-1] += 1;
        }
        TEST_1[pipe_i-1] = TEST;
        pipe_i++;
        if (pipe_i == 5)
        pipe_i = 1;
        }
  }
}

проблема не в этом :

а в том, что за 50 мс, ваш датчик на ТХ может подняться в ‘1’ ,например 2 раза ,то есть быть в состояниях 1010 в течении < 50мс, и вы этого не узнаете на стороне приемника.
так же ,допустим датчик на стороне ТХ не изменил состояния в течении 150 мс , и остался в ‘1’ , на стороне приемника вы посчитаете это как 3 раза т.е. RX будет “думать” что ТХ был `101010’.
на стороне ТХ вам надо отслеживать не состояние пина а его изменение.

так же ,если проблема проэктирования , если завтра, на стороне ТХ вы повесите датчик на другий пин , то прийдеться и на стороне приемника корректировать код(если я понял вашу задумку правильно)

Ну назвать nRF24L01 wi-fi модулем можно только спьяну.
А по поводу скорости - тут много зависит от расстояния, антенны, питания модуля и ещё х.з. чего. По идее - скорость большая, но в реалии - это только в чистом поле вдали от любых источников 2,4ГГц.

@Grover , действительно, Вам бы сначала следует заняться проектированием, а только потом писать код.
Во-первых, если датчик герконовый, у него неизбежно будет дребезг. Опрос раз в 50 мс отчасти эту проблему решает, но это не лучшее решение.
Во-вторых, как уже было отмечены ранее, Вам нужен не факт нахождения датчика в каком-либо состоянии, а переход между состояниями.
В-третьих, нужно изобрести протокол, который бы хоть минимально защищен от помех и, в частности, позволял отслеживать пропущенные посылки. Самое простое - подсчитывать количество срабатываний и слать, скажем, младший байт от него. Тогда при пропуске не более 255 срабатываний на приемном конце их количество можно будет восстановить.
В-четвертых, незачем делать посылки, когда ничего не изменилось. Посылать только в случае изменения сигнала. И опрашивать при этом лучше почаще (вот тут и вылезет п.1). Правда, может оказаться полезным время от времени слать сигнал, свидетельствующий об исправности линии связи.

В общем: проектировать, проектировать и проектировать.

А он и Wi-Fi умеет? Точно? Не знал.