3

Работа с модулем NRF24L01,8 канальное управление (РЕЛЕ)

Всем привет,не так давно я выкладывал пост Нужна помощь с модулем NRF24L01 там я описал свою проблему,но естественно никто мне не помог,как говорится сидят там диванные эксперты,лишь бы побазарить о том что всё не так, я возращаюсь теперь сюда с решением своей проблемы,спросите меня зачем я это выкладываю,ведь я решил свою проблему,да потому что найдётся та часть людей с такой же проблемой, и я хочу им помочь.

Использую Arduino Mega 2560(выступает в качестве платы исполнения(приёмник)), Arduino Nano(выступает в качестве платы управления(передатчик)), два модуля NRF24L01 и 8-релейный модуль.

Кстати о подключении NRF24L01 к Arduino Nano: CE-D9, CSN-D10, SCK-D13, MO-D11, MI-D12,а к Arduino Mega 2560: CE-D10, CSN-D53, SCK-D52, MO-D51, MI-D50.(У меня модули подключены через специальные стабилизирующие платы на 3.3 вольта).

На пинах Arduino Megs 2560  2,3,4,5,6,7,8,9 подключены реле,а на передатчике Arduino Nano кнопки подключены к пинам D2,D3,D4,D5,D6,D7,D8,A0(Со стягивающим резистором к 5В).(Все пины замыкаются на землю).

Код:

RX (приёмник):

#include <SPI.h>

#include "nRF24L01.h"

#include "RF24.h"

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


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

byte recieved_data[8];

byte relay1 = 2; // реле на 2 цифровом

byte relay2 = 3; // реле на 3 цифровом

byte relay3 = 4; // реле на 4 цифровом

byte relay4 = 5; // реле на 5 цифровом

byte relay5 = 6; // реле на 6 цифровом

byte relay6 = 7; // реле на 7 цифровом

byte relay7 = 8; // реле на 8 цифровом

byte relay8 = 9; // реле на 9 цифровом

void setup(){


pinMode(relay1, OUTPUT); // настроить пин реле как выход

pinMode(relay2, OUTPUT); // настроить пин реле как выход

pinMode(relay3, OUTPUT); // настроить пин реле как выход

pinMode(relay4, OUTPUT); // настроить пин реле как выход

pinMode(relay5, OUTPUT); // настроить пин реле как выход

pinMode(relay6, OUTPUT); // настроить пин реле как выход

pinMode(relay7, OUTPUT); // настроить пин реле как выход

pinMode(relay8, OUTPUT); // настроить пин реле как выход


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(relay1, recieved_data[0]); // подать на реле сигнал с 0 места массива

//то бишь 0 или 1

digitalWrite(relay2, recieved_data[1]); // подать на реле сигнал с 1 места массива

//то бишь 0 или 1

digitalWrite(relay3, recieved_data[2]); // подать на реле сигнал с 2 места массива

//то бишь 0 или 1

digitalWrite(relay4, recieved_data[3]); // подать на реле сигнал с 3 места массива

//то бишь 0 или 1

digitalWrite(relay5, recieved_data[4]); // подать на реле сигнал с 4 места массива

//то бишь 0 или 1

digitalWrite(relay6, recieved_data[5]); // подать на реле сигнал с 5 места массива

//то бишь 0 или 1

digitalWrite(relay7, recieved_data[6]); // подать на реле сигнал с 6 места массива

//то бишь 0 или 1

digitalWrite(relay8, recieved_data[7]); // подать на реле сигнал с 7 места массива

//то бишь 0 или 1

}

}




TX(передатчик):

#include <SPI.h> // библиотека для работы с шиной SPI

#include "nRF24L01.h" // библиотека радиомодуля

#include "RF24.h" // ещё библиотека радиомодуля


RF24 radio(9, 10);

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

byte transmit_data[8];


byte button1 = 2; // кнопка на 2 цифровом

byte button2 = 3; // кнопка на 3 цифровом

byte button3 = 4; // кнопка на 4 цифровом

byte button4 = 5; // кнопка на 5 цифровом

byte button5 = 6; // кнопка на 6 цифровом

byte button6 = 7; // кнопка на 7 цифровом

byte button7 = 8; // кнопка на 8 цифровом

int button8 = 0; // кнопка на 0 аналоговом


void setup() {


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

radio.begin(); //активировать модуль

radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0, 15); //время между попыткой достучаться, число попыток

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах


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

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

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

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

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

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

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

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


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(button1); // сигнал с кнопки

transmit_data[1] = digitalRead(button2); // сигнал с кнопки

transmit_data[2] = digitalRead(button3); // сигнал с кнопки

transmit_data[3] = digitalRead(button4); // сигнал с кнопки

transmit_data[4] = digitalRead(button5); // сигнал с кнопки

transmit_data[5] = digitalRead(button6); // сигнал с кнопки

transmit_data[6] = digitalRead(button7); // сигнал с кнопки

transmit_data[7] = analogRead(button8); // сигнал с кнопки


radio.write(&transmit_data, sizeof(transmit_data)); //отправляем получившийся массив

}

Работа с модулем NRF24L01,8 канальное управление (РЕЛЕ) Arduino, Nrf24l01, Реле, Длиннопост
Работа с модулем NRF24L01,8 канальное управление (РЕЛЕ) Arduino, Nrf24l01, Реле, Длиннопост
Работа с модулем NRF24L01,8 канальное управление (РЕЛЕ) Arduino, Nrf24l01, Реле, Длиннопост
Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий

Чувак, повторно и настоятельно рекомендую пользоваться GitHub-ом. Твои темы обретут шарм лаконичности, а код - читаемости

раскрыть ветку (6)
1
Автор поста оценил этот комментарий

Он даже не понимает о чем речь. Я ему даже расписал, что можно выложить туда код и дать сюда ссылку, он даже и так не понял. Товарищ сейчас в эйфории, путем тыканья случайно удалось воспользоваться чужим кодом. Теперь он ощущает такой прилив самомнения, что использует словосочетание "диванные эксперты", подразумевая, что уж он-то эксперт настоящий.

раскрыть ветку (3)
Автор поста оценил этот комментарий

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

раскрыть ветку (2)
2
Автор поста оценил этот комментарий
Друг! Чуть меньше агрессии. Тут есть масса людей, которые Вам могут помочь.
есть группы, на которые подписаны любители это дела, есть будние дни, в которые активность выше.
Ваш пост мало кто видел из целевой аудитории вопроса.

Сам по работе несколько лет занимаюсь промышленными контроллерами, и до сих пор узнаю постоянно что то новое.
Тут и культура, Как спросить, Как уточнить вопрос. И английский учить надо, ибо все свежее техническое имеет всегда только английские версии текстов.
И менталитет учитывай, в русском сегменте интернета меньше помогают, ибо часто вместо помощи, люди требуют сделать все, и еще и ожидаются. Потому меньше у нас помогают, но все же помогают
1
Автор поста оценил этот комментарий

На самом деле, код несложный. Две недели занятий - и вы сами такой можете написать. Поэтому вам и пытались помочь - направить на путь истинный. А вы хотели просто, чтобы кто-то вам предоставил готовое. Так и дальше будете действовать?

Автор поста оценил этот комментарий

я с тобой согласен,но он в основном на английском)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

На ТЕХНИЧЕСКОМ английском, который намного легче в восприятии

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку