ARDUINO нужна помощь nrf24l01

maks665

✩✩✩✩✩✩✩
29 Май 2019
10
0
очень нужна помощь в прошивки. У меня есть два модуль nrf24l01 и две реле, хочу сделать так, при нажатии на кнопку одно реле открылось и при отпускании кнопки реле закрылось, это у меня получилось но вторая кнопка должна работать так, при нажатии и отпускании кнопки второе реле должно открыться и при нажатии и отпускании кнопки реле должно закрыться. Помогите пожалуйста два дня не могу сделать очень нужно.
 

maks665

✩✩✩✩✩✩✩
29 Май 2019
10
0
это передатчик
как я понял кнопку надо делать через флажок


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

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
boolean butt_flag = 0;
byte butt = 6;
byte button1 = 3; // кнопка на 3 цифровом
byte potent = 0; // потенциометр на 0 аналоговом
byte slider = 1; // движковый потенциометр на 1 аналоговом пине

byte transmit_data[4]; // массив, хранящий передаваемые данные
byte latest_data[4]; // массив, хранящий последние переданные данные
boolean flag; // флажок отправки данных



void setup() {

pinMode(3, INPUT); // настроить пин кнопки

pinMode(6, INPUT);
Serial.begin(9600);

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] = digitalRead(3); // инвертированный (!) сигнал с кнопки

transmit_data[1] = digitalRead(6);
if (butt == 1 && butt_flag == 0) {
butt_flag = 1;
}
if (butt == 0 && butt_flag == 1) {
butt_flag = 0;
}
transmit_data[2] = map(analogRead(potent), 0, 1023, 0, 180); // получить значение
// в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве
transmit_data[3] = map(analogRead(slider), 0, 1023, 0, 255);





for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов
if (transmit_data != latest_data) { // если есть изменения в transmit_data
flag = 1; // поднять флаг отправки по радио
latest_data = transmit_data; // запомнить последнее изменение
}
}


if (flag == 1) {
radio.powerUp(); // включить передатчик
radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио
flag = 0; //опустить флаг
radio.powerDown(); // выключить передатчик
}


}



а это приемник
здесь я ваще не догоняю как делать
или в приемнике не надо не чего изменять тока в передатчике
аааа как все сложно
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <Servo.h>

RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte recieved_data[4]; // массив принятых данных
byte relay = 2;
byte relay1 = 6;
byte servo = 7;
byte mosfet = 5;
Servo myservo;

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

void setup() {
Serial.begin(9600); //открываем порт для связи с ПК

pinMode(2, OUTPUT); // настроить пин реле как выход
pinMode(6, OUTPUT);
pinMode(mosfet, OUTPUT); // настроить пин мосфета как выход

myservo.attach(servo);

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(); //начинаем слушать эфир, мы приёмный модуль
}

void loop() {
byte pipeNo;
while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб
radio.read( &recieved_data, sizeof(recieved_data) ); // чиатем входящий сигнал
digitalWrite(2, recieved_data[0]); // подать на реле сигнал с 0 места массива

digitalWrite(6, recieved_data[1]);

myservo.write(recieved_data[1]); // повернуть серво на угол 0..180
// значение получено с 1 элемента массива
analogWrite(mosfet, recieved_data[2]); // подать на мосфет ШИМ сигнал
// в соответствии с принятыми данными со 2 места массива, диапазон 0...255
}
}
 
Последнее редактирование:

maks665

✩✩✩✩✩✩✩
29 Май 2019
10
0
просто очень нужно сделать
и походу пьесы разбираюсь
застрял на какой-то гребаной кнопки
получается мне на одну кнопку надо сделать флажок типа что бы нажал отпустил реле открылось но не хрена не получается в этом nrf
 

Александр Симонов

★★★✩✩✩✩
2 Авг 2018
527
136
Пересмотри ещё раз урок №6, твой случай. И три раза сравни код в уроке со своим. И определись, где у тебя будет логика отработки нажатий, в приёмники, или в передатчике.
 
  • Лойс +1
Реакции: Тоха

maks665

✩✩✩✩✩✩✩
29 Май 2019
10
0
я этот урок раз 30 буду смотреть ну это ладно там еще в чем фишка там идет управление светодиодом а у меня управление реле
и у меня еще там две кнопки
 

maks665

✩✩✩✩✩✩✩
29 Май 2019
10
0
ну вот допустим в уроке там led_flag = !led_flag; а у меня что должно на приемнике быть relay_flag = !relay_flag или не в том направлении думаю
 

maks665

✩✩✩✩✩✩✩
29 Май 2019
10
0
получается в передатчик я должен поместить дополнительно вот это?

boolean butt_flag = 0;


boolean butt;

void loop() {
butt = digitalRead(6);

if (butt == 1 && butt_flag == 0) {
butt_flag = 1;
Serial.println("Button pressed");
led_flag = !led_flag;
digitalWrite(13, led_flag);

}

if (butt == 0 && butt_flag == 1) {
butt_flag = 0;
Serial.println("Button released");
}
}
 

maks665

✩✩✩✩✩✩✩
29 Май 2019
10
0
да антидребезг подождет надо как то сначала эту этот код в приемник вместить а как? я его уже как не вставлял все бестолку
 

Александр Симонов

★★★✩✩✩✩
2 Авг 2018
527
136
Лучше код обработки кнопок в передатчик засунь, и передавай уже желаемое состояние первого и второго реле вместо состояния пинов кнопок.

И не спрашивай как. Если ты элементарный кусок кода не можешь в свой скетч внедрить, то возвращайся к изучению основ: что такое переменная, массив, функция, цифровые входы/выходы.
 
  • Лойс +1
Реакции: neonid

maks665

✩✩✩✩✩✩✩
29 Май 2019
10
0
всм не спрашивай как, ну если ты видишь что я тока начал работу с ардуино тебе что трудно помочь?