Вы посылает единицу, целое число, а на приёме сравнивает с символом 1.
Т.е. на выходе код 1, а на входе почему то ждете 49 - это код символьной 1.
Уберите кавычки и по читайте чем отличается целое число 1 от символа '1'.
- Mega заменил на Nano, питание от акб 4,5 В 700 mah
- NRF24 PA + LA - перепаял кондеры возле кварца, организовал отдельное питание от стабилизатора AMS1117 2,5 В, на питание впаял пару кондеров по 470 мкФ, на крепление антены припаял медный провод длинной десь 30 см.
Результат.
Проблема, описанная ранее (Передача не выполняется до тех пор, пока до какой-либо части Mega, или радиомодуля nrf24l01+pa+lna не коснуться рукой.) ушла. Теперь все работает, как надо.
Возможно, истоки проблемы в схемотехнике NRF24 + PA + LA.
Попробую организовать экранирование радиомодуля, посмотрю, как будет работать.
Последние наблюдения показали, что если запитать Nano (Vin) от 4,7 .. 5 В, то радиомодуль NRF24 + PA + LA работает стабильно, от 6..12 В передача не работает.
Добрый вечер, столкнулся с такой проблемой, схема пара nano+NRF24L01 подключены к USB портам компа запускаю стандартные примеры из библиотеки http://github.com/maniacbug/RF24, но обмена между ними совсем нет запросы отсылаються но не принимаються, менял их ролями таже беда, замеря напряжение на ножках модуля 3.2 В, может ли ему не хватать что бы осуществлять нормально прием-передачу. Пробовал еще питание подавать на vin с usb результат тот же.
Пока еще нет, надеялся что не будет такой необходимости, оставил на ночь, оказываеться они таки общаются но, из наверное милиона запросов было только 2-3 удачных судя по логу монитора порта. Таки кондер? А какие его ориентировочные параметры должны быть?
All, определяют ли функции установки адреса режим работы? Т. е. если я собираюсь по очереди принимать/передавать, надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?
All, определяют ли функции установки адреса режим работы? Т. е. если я собираюсь по очереди принимать/передавать, надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?
Библиотеки какие?
Я работаю с NRF24Network
В setup() собственный адрес устройства.
При передаче использую структуру RF24NetworkHeader для заголовка.
Прием заголовка тоже в нее осуществляется
Их можно хоть сотню насоздовать на передачу и работать без всяких передергиваний.
> надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?
При работе с библиотекой RF24 мне показалось, что адреса пайпов запоминаются во встроенной в радиочип флешпамяти. То есть адреса можно устанавливать однократно, а не при каждом включении. Извините, если ответ не по теме вопроса.
есть такая плата. называется iboard. на ней nrf24l01 висит на софтварном spi. это первый вариант
второй вариант sd вешать на софтварный
третий использовать chip select и работать с одним spi. но тут скорее всего придется библиотеки править. а может и нет
проще всего 1
Эк тебя понесло. Не нужно там ничего править. Хорошо все работает. Просто нужно всегда помнить. Что шина одна а устройств много на ней. И не работать одновременно.
> надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()? При работе с библиотекой RF24 мне показалось, что адреса пайпов запоминаются во встроенной в радиочип флешпамяти. То есть адреса можно устанавливать однократно, а не при каждом включении. Извините, если ответ не по теме вопроса.
Настройки там сохраняются , если не было отключено питание радиомодуля. Если микроконтроллер не менял настройки, то они остаются прежними
На счёт одновременной работы - работать могут без проблем любые устройства SPI .если они опрашиваются не обновременно ! Если ,например, имеется вызов события работы внутри прерывания через вывод IRQ, то при использовании SPI другими устройствами будут глюки..
Амммм что сделать? У меня нет настроения играть в угадайку.
Если бы я хотел чтобы мне помогли. Я бы начал с того чтоь я хочу получить в итоге. Потом приложил схему того что я собрал. Потом прикрутил бы код который я накорябал. Дальше бы оформил все ошибки что вылазят и особо отметил что именно беспокоит.
Потому что я не вижу проблемы в работе двух хреновин на одной шине. Главное что бы памяти хватало на временное хранение той чухни что вы перекидываете между сд и радио. И не забывать выключать пин cs радио после того как с ним закончили.
#include <SPI.h>
/*
* This sketch will list all files in the root directory and
* then do a recursive list of all directories on the SD card.
*
*/
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
/************ ETHERNET STUFF ************/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 177 };
Server server(80);
/************ SDCARD STUFF ************/
Sd2Card card;
SdVolume volume;
SdFile root;
// store error strings in flash to save RAM
#define error(s) error_P(PSTR(s))
void error_P(const char* str) {
PgmPrint("error: ");
SerialPrintln_P(str);
if (card.errorCode()) {
PgmPrint("SD error: ");
Serial.print(card.errorCode(), HEX);
Serial.print(',');
Serial.println(card.errorData(), HEX);
}
while(1);
}
void setup() {
Serial.begin(9600);
PgmPrint("Free RAM: ");
Serial.println(FreeRam());
// initialize the SD card at SPI_HALF_SPEED to avoid bus errors with
// breadboards. use SPI_FULL_SPEED for better performance.
pinMode(10, OUTPUT); // set the SS pin as an output (necessary!)
digitalWrite(10, HIGH); // but turn off the W5100 chip!
if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!");
// initialize a FAT volume
if (!volume.init(&card)) error("vol.init failed!");
PgmPrint("Volume is FAT");
Serial.println(volume.fatType(),DEC);
Serial.println();
if (!root.openRoot(&volume)) error("openRoot failed");
// list file in root with date and size
PgmPrintln("Files found in root:");
root.ls(LS_DATE | LS_SIZE);
Serial.println();
// Recursive list of all directories
PgmPrintln("Files found in all dirs:");
root.ls(LS_R);
Serial.println();
PgmPrintln("Done");
// Debugging complete, we start the server!
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
Client client = server.available();
if (client) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if we've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so we can send a reply
if (c == '\n' && current_line_is_blank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// print all the files, use a helper to keep it clean
//ListFiles(client, 0);
client.println("<h2>Files:</h2>");
ListFiles(client, 0);
break;
}
if (c == '\n') {
// we're starting a new line
current_line_is_blank = true;
} else if (c != '\r') {
// we've gotten a character on the current line
current_line_is_blank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
client.stop();
}
}
void ListFiles(Client client, uint8_t flags) {
// This code is just copied from SdFile.cpp in the SDFat library
// and tweaked to print to the client output in html!
dir_t p;
root.rewind();
while (root.readDir(p) > 0) {
// done if past last used entry
if (p.name[0] == DIR_NAME_FREE) break;
// skip deleted entry and entries for . and ..
if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue;
// only list subdirectories and files
if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;
// print file name with possible blank fill
//root.printDirName(*p, flags & (LS_DATE | LS_SIZE) ? 14 : 0);
for (uint8_t i = 0; i < 11; i++) {
if (p.name[i] == ' ') continue;
if (i == 8) {
client.print('.');
}
client.print(p.name[i]);
}
if (DIR_IS_SUBDIR(&p)) {
client.print('/');
}
// print modify date/time if requested
if (flags & LS_DATE) {
root.printFatDate(p.lastWriteDate);
client.print(' ');
root.printFatTime(p.lastWriteTime);
}
// print size if requested
if (!DIR_IS_SUBDIR(&p) && (flags & LS_SIZE)) {
client.print(' ');
client.print(p.fileSize);
}
client.println("<br>");
}
}
я пытаюсь програмно включать на ардуино нано реле для включения лампочки с меги 2560. при нажатии на кнопку все работает но когда в программ сую dht11 ,nrf2401 не хочет работать . при sd card тоже самое было.
// передатчик
#include <SPI.h>
#include "RF24.h"
#include <nRF24L01.h>
#include "DHT.h"
int msg[1];
RF24 radio(48,49);
// адреса каналов приема и передачи
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи
//кнопки подключены к этим пинам
int buttonPin1 = 2;
int buttonPin2 = 3;
#define DHTPIN 22 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
float h = 0;
float t = 0;
void setup(void){
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
radio.begin();
radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
radio.startListening(); // Начинаем слушать эфир
pinMode(buttonPin1, OUTPUT);
pinMode(buttonPin2, OUTPUT);
}
void loop(void){
// t = dht.readTemperature();
//if (t >=28){
//Serial.print(t);
//пока кнопка
if (digitalRead(buttonPin1) == HIGH){
msg[0] = 111;
radio.stopListening();
radio.write(msg, 1);
radio.startListening();
Serial.print("ok");
}
if (digitalRead(buttonPin2) == HIGH){
msg[0] = 112;
radio.stopListening();
radio.write(msg, 1);
radio.startListening();
}
//float h = dht.readHumidity();
//float t = dht.readTemperature();
// }
}
//приемник
#include <SPI.h>
#include "RF24.h"
#include <nRF24L01.h>
int msg[1];
RF24 radio(9,10);
//светодиоды подключены к этим пинам
int LEDpin1 = 2;
int LEDpin2 = 3;
// адреса каналов приема и передачи
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи
void setup(void){
radio.begin();
radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
radio.startListening(); // Начинаем слушать эфир
pinMode(LEDpin1, OUTPUT);
pinMode(LEDpin2, OUTPUT);
}
void loop(void){
if (radio.available()){
bool done = false;
while (!done){
done = radio.read(msg, 1);
//если пришел пакет от Arduino №1 (111) вКлючается светодиод (горит)LEDpin1, HIGH
if (msg[0] == 111){
delay(10);
digitalWrite(LEDpin1, HIGH);
}
else {
digitalWrite(LEDpin1, LOW);
}
delay(10);
if (msg[0] == 112){
delay(10);
digitalWrite(LEDpin2, HIGH);
}
else {
digitalWrite(LEDpin2, LOW);
}
delay(10);
}
}
}
Мыши плакали, кололись но продолжали жрать кактус. Я так понимаю что обьяснения о том что нужно выключать одно устройство прежде чем общаться с другим. Это вообще ни о чем для вас.
radio.startListening() и radio.stopListening() пробовал везде сувать эффект такой же
А не нужно его везде сувать. Слушать нужно тольк когда нужно. Гыы масло масляное.
Старый пример с трубой. Вы можете с соседом перекрикиваться через канализационую трубу. И все будет прекрасно пока не решите смыть по этой же трубе какашки. Что будет если вы всегда слушаете трубу , вдруг сосед позовет, а он в это время смоет унитаз. :) поэтому слушать нужно только когда к вам обращаются. Как узнать что вас зовут к трубе? Можно по батарее постучать. В данном случае это прерывания
я не могу понять где ошибка что делаю не так ?
вы можете поправить ?
Вы посылает единицу, целое число, а на приёме сравнивает с символом 1.
Т.е. на выходе код 1, а на входе почему то ждете 49 - это код символьной 1.
Уберите кавычки и по читайте чем отличается целое число 1 от символа '1'.
я понимаю разницу между числом и символом.
я прошу помочь исправить код так как сам не особо силен в этом !
Внимательно прочитайте мои оба сообщения, я уже написал как исправить
Уважаемые участники форума, помогите разобраться с проблемой, может, кто сталкивался с ней.
Есть пара дуин, которые общаются просредством радиомодулей nrf24l01+.
Схема: 1. Mega & nrf24l01+pa+lna -(запрос параметра)> 2. Nano & nrf24l01+ - (передача параметра)> 1. Mega & nrf24l01+pa+lna
Логика взаимодействия - Mega отправляет запрос в Nano на передачу параметра, Nano принимает запрос и отправляет в Mega его значение.
Все работает, за исключением такого момента.
Передача не выполняется до тех пор, пока до какой-либо части Mega, или радиомодуля nrf24l01+pa+lna не коснуться рукой.
Если заменить радиомодуль nrf24l01+pa+lna на nrf24l01+, то такой проблемы нет.
Проблема отмечена и в случае использования nrf24l01+pa+lna с Nano, т.е. от МК по идее, зависимости нет. Тестировалось три штуки nrf24l01+pa+lna.
Питание радиомодулей отдельное от LiPo 4,0V (не сгорело пока ни одного), на разъем питания радиомодуля припаян конденсатор.
Приветствую.
Подскажите..
ВСЕ РАЗОБРАЛСЯ :)
Провел серию экспериментов:
- Mega заменил на Nano, питание от акб 4,5 В 700 mah
- NRF24 PA + LA - перепаял кондеры возле кварца, организовал отдельное питание от стабилизатора AMS1117 2,5 В, на питание впаял пару кондеров по 470 мкФ, на крепление антены припаял медный провод длинной десь 30 см.
Результат.
Проблема, описанная ранее (Передача не выполняется до тех пор, пока до какой-либо части Mega, или радиомодуля nrf24l01+pa+lna не коснуться рукой.) ушла. Теперь все работает, как надо.
Возможно, истоки проблемы в схемотехнике NRF24 + PA + LA.
Попробую организовать экранирование радиомодуля, посмотрю, как будет работать.
Последние наблюдения показали, что если запитать Nano (Vin) от 4,7 .. 5 В, то радиомодуль NRF24 + PA + LA работает стабильно, от 6..12 В передача не работает.
в гугле есть ссылки на свежие материалы по теме nrf24l01 bootloader
получил модулей парочку
через 4 часа лампочки моргают
Почему у меня все работает?
Что я делаю не так?
дебило-картинку подправил конечно
http://yadi.sk/d/HbkmL8cCR8EFn
код взял от товарища
" урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
Прекрасная работа.
Этот товарищ сюда заглядывает?
Добрый вечер, столкнулся с такой проблемой, схема пара nano+NRF24L01 подключены к USB портам компа запускаю стандартные примеры из библиотеки http://github.com/maniacbug/RF24, но обмена между ними совсем нет запросы отсылаються но не принимаються, менял их ролями таже беда, замеря напряжение на ножках модуля 3.2 В, может ли ему не хватать что бы осуществлять нормально прием-передачу. Пробовал еще питание подавать на vin с usb результат тот же.
а кондер ставили по питанию?
Пока еще нет, надеялся что не будет такой необходимости, оставил на ночь, оказываеться они таки общаются но, из наверное милиона запросов было только 2-3 удачных судя по логу монитора порта. Таки кондер? А какие его ориентировочные параметры должны быть?
Половина НРФ-ок кое-как работает без кондёра, а половина -не работает. Ставьте что найдёте- 47, 100, 220.....
2200 мкФ на 16 В нормально будет? или надо поменьше?
Можно, только зачем ( там 3.3 Вольта), да и мелкие очень удачно паяются .
Похоже на это, только ножки надо согнуть и положить кондёр на разъём (торчком бысто отломается ).
http://arduino.ru/forum/programmirovanie/nrf24l01?page=2#comment-31054
http://forum.arduino.cc/index.php?PHPSESSID=lk7r6uqtbhnppru3f4kk1akh44&t...
Добрый вечер) Таки кондер)) припаял 470 мкФ 10 В на питание модуля как на картинке и все ок. Спасибо огромное!!
керамику 0805 или 1206 купите 10-20 в китае на 1-10мкф и все. я ставлю 1206 10мкф прозапас
Добрый день,
не нашел ветку по NRF24LE1, ее здесь обсуждают?
Добрый день,
не нашел ветку по NRF24LE1, ее здесь обсуждают?
а чего их обсуждать?
они работают
а их пользуют
NRF24LE1 ну просто никак не относится к ардуино , там свой микроконтроллер встроенный..
All, определяют ли функции установки адреса режим работы? Т. е. если я собираюсь по очереди принимать/передавать, надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?
возник вопрос. есть код, может из примеров, чтобы проверить что радиомодуль подключен верно?
возник вопрос. есть код, может из примеров, чтобы проверить что радиомодуль подключен верно?
Там в примерах есть пыыынг
All, определяют ли функции установки адреса режим работы? Т. е. если я собираюсь по очереди принимать/передавать, надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?
Библиотеки какие?
> надо ли делать каждый раз setRAddr перед приёмом и setTAddr перед передачей, или достаточно один раз оба адреса установить в setup()?
При работе с библиотекой RF24 мне показалось, что адреса пайпов запоминаются во встроенной в радиочип флешпамяти. То есть адреса можно устанавливать однократно, а не при каждом включении. Извините, если ответ не по теме вопроса.
возник вопрос. есть код, может из примеров, чтобы проверить что радиомодуль подключен верно?
из всех примеров в мегу 8 влез только сканер. но этого достаточно. можно легко проверить работает или нет
Гуд. Спасибо, могучий all.
jeka_tm
на меге подключаю sd card и nrf24l01 по шине spi начинает конфликтовать nrf24l01 а отдельно все работает
что надо при этом сделать
Puhlyaviy
есть такая плата. называется iboard. на ней nrf24l01 висит на софтварном spi. это первый вариант
второй вариант sd вешать на софтварный
третий использовать chip select и работать с одним spi. но тут скорее всего придется библиотеки править. а может и нет
проще всего 1
.
есть такая плата. называется iboard. на ней nrf24l01 висит на софтварном spi. это первый вариант
второй вариант sd вешать на софтварный
третий использовать chip select и работать с одним spi. но тут скорее всего придется библиотеки править. а может и нет
проще всего 1
Эк тебя понесло. Не нужно там ничего править. Хорошо все работает. Просто нужно всегда помнить. Что шина одна а устройств много на ней. И не работать одновременно.
хз. не проверял что без изменений либы не будут конфликтовать
Настройки там сохраняются , если не было отключено питание радиомодуля. Если микроконтроллер не менял настройки, то они остаются прежними
На счёт одновременной работы - работать могут без проблем любые устройства SPI .если они опрашиваются не обновременно ! Если ,например, имеется вызов события работы внутри прерывания через вывод IRQ, то при использовании SPI другими устройствами будут глюки..
Puhlyaviy
может подскажешь как сделать
Puhlyaviy
может подскажешь как сделать
Амммм что сделать? У меня нет настроения играть в угадайку.
Если бы я хотел чтобы мне помогли. Я бы начал с того чтоь я хочу получить в итоге. Потом приложил схему того что я собрал. Потом прикрутил бы код который я накорябал. Дальше бы оформил все ошибки что вылазят и особо отметил что именно беспокоит.
Потому что я не вижу проблемы в работе двух хреновин на одной шине. Главное что бы памяти хватало на временное хранение той чухни что вы перекидываете между сд и радио. И не забывать выключать пин cs радио после того как с ним закончили.
Это и есть пример софтового SPI?
я пытаюсь програмно включать на ардуино нано реле для включения лампочки с меги 2560. при нажатии на кнопку все работает но когда в программ сую dht11 ,nrf2401 не хочет работать . при sd card тоже самое было.
-----------------------------------------------
в передатчике не могу запустить код
при температуре больше или равно включить тумблер
помогите пожалуста
Мыши плакали, кололись но продолжали жрать кактус. Я так понимаю что обьяснения о том что нужно выключать одно устройство прежде чем общаться с другим. Это вообще ни о чем для вас.
28 radio.startListening(); // Начинаем слушать эфир
nrlf24 я неделю только разбираюсь. Puhlyaviy подмогни пожалуста в проге
nrlf24 я неделю только разбираюсь. Puhlyaviy подмогни пожалуста в проге
Шина spi это не только nrfl24. Это довольно развитая штука. Так что разбирайтесь дальше. Пригодится.
radio.startListening() и radio.stopListening() пробовал везде сувать эффект такой же
radio.startListening() и radio.stopListening() пробовал везде сувать эффект такой же
А не нужно его везде сувать. Слушать нужно тольк когда нужно. Гыы масло масляное.
Старый пример с трубой. Вы можете с соседом перекрикиваться через канализационую трубу. И все будет прекрасно пока не решите смыть по этой же трубе какашки. Что будет если вы всегда слушаете трубу , вдруг сосед позовет, а он в это время смоет унитаз. :) поэтому слушать нужно только когда к вам обращаются. Как узнать что вас зовут к трубе? Можно по батарее постучать. В данном случае это прерывания
ну вы как мой физик смысл то понял как это в коде сделать
pinMode(2, INPUT);
digitalWrite(2, HIGH);
типа так
Нужно убрать прослушку эфира. И все сразу заработает. :) и даже sd
ну вы как мой физик смысл то понял как это в коде сделать
Кстати у due есть 3 spi и они могут одновременно работать :)