Помогите пожалуйста. Хочу заставить лампочку гореть, после того как нажал-отпустил кнопку, и нажал-отпустил перестала гореть и всё через NRF24 модули связи. Весь интернет перешарил, у Алексгайвера такого нет, только демонстрация нажал кнопку горит, отпустил погасла.
Код передатчика
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
byte address[][6] = { "1Node", "2Node", "3Node", "4Node", "5Node", "6Node" }; //возможные номера труб
int valX = A3; // значения с джойстика по оси Х
int valY = A1; // значения с джойстика по оси Y
int button = 7; // кнопка у джойстика
bool flag = false;
int transmit_data[3]; // массив, хранящий передаваемые данные ( 3 значения с джойстика )
void setup() {
Serial.begin(9600); //открываем порт для связи с ПК
pinMode(button, INPUT_PULLUP);
radio.begin(); //активировать модуль
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); //размер пакета, в байтах
radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных
radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)
radio.setPALevel(RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate(RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
//должна быть одинакова на приёмнике и передатчике!
//при самой низкой скорости имеем самую высокую чувствительность и дальность!!
radio.powerUp(); //начать работу
radio.stopListening(); //не слушаем радиоэфир, мы передатчик
}
void loop() {
transmit_data[0] = analogRead(valX); // присваиваем массиву 0 значение с джойстика по оси X
transmit_data[1] = analogRead(valY); // присваиваем массиву 1 значение с джойстика по оси Y
bool btnState = !digitalRead(button);
if (btnState && !flag) { // обработчик нажатия
flag = true;
Serial.println("press");
}
if (!btnState && flag) { // обработчик отпускания
flag = false;
Serial.println("release");
}
transmit_data[2] = flag
radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
Serial.print(transmit_data[0]);
Serial.println(transmit_data[1]);
Serial.println(transmit_data[2]);
}
Код приёмника
#include "GyverMotor.h"
#include "RF24.h"
#include "nRF24L01.h"
#include <SPI.h>
#include <Servo.h>
GMotor motorR(DRIVER3WIRE, 4, 2, 3);
GMotor motorL(DRIVER3WIRE, 7, 8, 6);
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
byte address[][6] = {"1Node", "2Node", "3Node",
"4Node", "5Node", "6Node"}; //возможные номера труб
int recieved_data[4]; // массив принятых данных
int valX; // данные с джойстика по оси X
int valY; // данный с джойстика по оси Y
boolean butt_flag = 0;
int led = A0;
int sig = A1; // сигнальная лампа для связи
Servo servo;
void setup() {
// Пины D5 и D6 - 7.8 кГц
TCCR0B = 0b00000010; // x8
TCCR0A = 0b00000011; // fast pwm
// Пины D3 и D11 - 62.5 кГц
TCCR2B = 0b00000001; // x1
TCCR2A = 0b00000011; // fast pwm
Serial.begin(9600); //открываем порт для связи с ПК
servo.attach(5);
pinMode(sig, OUTPUT); // настроить пин реле как выход
pinMode(led, OUTPUT); // совещение
motorR.setDirection(REVERSE);
motorL.setDirection(REVERSE);
motorR.setMode(AUTO);
motorL.setMode(AUTO);
motorR.setSpeed(0);
motorL.setSpeed(0);
motorL.setMinDuty(1);
motorR.setSmoothSpeed(30);
motorL.setSmoothSpeed(30);
radio.begin(); //активировать модуль
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); //размер пакета, в байтах
radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0
radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)
radio.setPALevel(RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN,
//RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate(RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS,
//RF24_1MBPS, RF24_250KBPS
//должна быть одинакова на приёмнике и передатчике!
//при самой низкой скорости имеем самую высокую чувствительность и дальность!!
radio.powerUp(); //начать работу
radio.startListening(); //начинаем слушать эфир, мы приёмный модуль
servo.write(90);
}
void loop() {
byte pipeNo;
while (radio.available(&pipeNo)) { // слушаем эфир со всех труб
radio.read(&recieved_data, sizeof(recieved_data)); // чиатем входящий сигнал
valX = recieved_data[0]; // назначить массив принятых данных 0 на данные с
// джойстика по оси Х
valY = recieved_data[1]; // назначить массив принятых данных 1 на данные с
// джойстика по оси Y
butt_flag = recieved_data[2]; // освещение
// джойстик на А0 и А1
int signalX = 255 - valX / 2;
motorL.smoothTick(signalX);
motorR.smoothTick(signalX);
valY = map(valY, 950, 0, 40, 122);
servo.write(valY);
digitalWrite(sig, butt_flag);
digitalWrite(led, butt_flag);
}
}
В чем тут может проблема?