2

Нужна помощь с модулем NRF24L01

Итак,история такая,у меня есть Arduino Mega на микроконтроллере ATMEGA2560, Arduino Nano (для тех кто незнал таже Arduino Uno),два NRF24L01,кнопки и 8-релейный модуль.

Из этих составляющих у меня получилось осуществить управление только трёх реле из восьми.

Далее в скетче где написано про массив принятых данных в RX цифра 3,я её менял на большее значение,после этого всё переставало работать (ну и в TX тоже менял соответственно)

TX

#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"}; //возможные номера труб


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

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

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


byte transmit_data[3]; // массив, хранящий передаваемые данные

byte latest_data[3]; // массив, хранящий последние переданные данные

boolean flag; // флажок отправки данных


void setup() {

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


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

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

pinMode(button3, 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] = digitalRead(button1); // сигнал с кнопки

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

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


for (int i = 0; i < 3; i++) { // в цикле от 0 до числа каналов

if (transmit_data[i] != latest_data[i]) { // если есть изменения в transmit_data

flag = 1; // поднять флаг отправки по радио

latest_data[i] = transmit_data[i]; // запомнить последнее изменение

}

}


if (flag == 1) {

radio.powerUp(); // включить передатчик

radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио

flag = 0; //опустить флаг

radio.powerDown(); // выключить передатчик

}

RX

#include <SPI.h>

#include "nRF24L01.h"

#include "RF24.h"

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

//RF24 radio(9,53); // для Меги


byte recieved_data[3]; // массив принятых данных

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

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

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


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


void setup() {

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


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

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

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

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

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

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


}

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

Вы это сами написали?

У вас же нет ни одной строчки вывода в монитор порта. Как же вы увидите, что передается, что принимается. А пробовали просто задавать значения на приемнике?

Или вы просто чей-то код взяли и пробуете его под свои цели переделать?

раскрыть ветку (12)
1
Автор поста оценил этот комментарий
На сколько Вы понимаете что запостили? Вы просто изменили размерность массива?
раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Я?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Ошибся)
0
Автор поста оценил этот комментарий
Выводить что либо в уарт необязательно
раскрыть ветку (3)
2
Автор поста оценил этот комментарий

Если работает, то необязательно. Но ведь оно не работает. Как узнать что и где? Вы как это делаете? Шаманизм? А просто подсказать ответ человеку - зачем? Если интересно, пусть разбирается. Не нужно лишать его мук творчества.

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

Но я вас прошу помощи,не один день с этой проблемой(

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

Вам план предложить по изучению скетча Гайвера?
Ну тогда первый пункт. Скетч нужно писать самому. Пользоваться другими - да. Но писать свой. Причем постепенно. Сначала берете одну Ардуину Мега и подключаете 8 кнопок и 8 реле. Программируете, проверяете. Так вы научитесь передавать команды и управлять реле. Потом вы просто подключаете 2 платы и приемник с передатчиком и просто пытаетесь передавать данные, а смотреть то, что получаете с мониторе порта.

А потом уже собираете все, как положено. И да, почти все есть в скетче, вам нужно только копировать нужное  вставлять в свой.
Если вы думаете, что можно просто так, взять чужой скетч, не понимая что там и зачем, переделать его для своих целей, то вы ошибаетесь. Если вы думаете, что кто-то для вас его перепишет просто - это вряд ли. Хотя бы потому, что все имеют свои привычки. Я бы этот скетч написал по-другому.
Ну и не понятен ваш уровень. Вы можете просто подключить кнопку, реле к ардуино и заставить включаться реле от кнопки?

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

Код Alex Gyver разработал,я его немного подогнал под свои цели,но довести до ума не особо получается (Я новичок,сильно не осуждайте),а и про вывод в монитор порта изначально в коде было,хотя я знаю что он не обязателен и нечего не выводит...

раскрыть ветку (4)
1
Автор поста оценил этот комментарий
Я новичок,сильно не осуждайте

Не судите, да не судимы будете. Никто не запрещает брать чужой код. Но лучше брать такой, чтобы понимать, что там написано. Если вы новичок, то почему сразу управлять реле. Почему сначала не просто передавать массивы?

вывод в монитор порта изначально в коде было,хотя я знаю что он не обязателен и нечего не выводит..

Как это не выводит? Вот автор специально его использовал. А вам он не нужен. Он предназначен для отладки. Например вы можете посмотреть, что передает передатчик. Или что принимает приемник.
Вот у вас в коде всего 3 кнопки и 3 реле. Как же будут остальные работать? Ну поменяли вы размер массива, ну будет там 0 какой-нибудь приходить. А если бы вы посмотрели в монитор порта, то увидели бы это.

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

понятно,но вы можете мне помочь с моей проблемой,буду признателен

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

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

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

Зайдите на второй пост,я уже разобрался

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

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества