#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;
}
}
}