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, Реле, Длиннопост
1
Автор поста оценил этот комментарий

Ваш прежний пост все еще доступен. Там в коде описано все для трех кнопок и реле.

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

потомучто я исходный код гайвера туда закинул как бы

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

Я прямо написал, в чем ошибка. Если бы вас читать научили, то можно было бы прочитать:

Вот у вас в коде всего 3 кнопки и 3 реле. Как же будут остальные работать?
Ну поменяли вы размер массива...
раскрыть ветку (1)
Автор поста оценил этот комментарий

Леонид,как бы я и кнопки добавлял и выходы

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

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

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

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

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

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

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

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

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

Разобрался - молодец. Только называть диванными экспертами тех, кто считает, что вы начали не с той стороны, несколько заносчиво. К тому же, многие писали, в чем ваша ошибка, но вы из-за собственной некомпетентности теперь пишете, что вам никто не помог. И еще - что это за тон такой, выкладывать код в посте? Что нет для этого специализированных ресурсов для выкладывания кода, чтобы потом ссылку на него дать? Тут, кроме того, есть сообщество Arduino & Pi , В котором выкладывать такие посты более рационально.

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

знаете,мне посрать,вы мне не помогли-идите мимо

показать ответы