Arduino UNO+NRF24L01 & Nano+NRF24L01

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Здравствуйте.

Собираю игрушку по такой схеме:

 

Крупно http://radikal.ru/fp/edee09d8a9ba4d8ea91bd2a3677e284a

Собрал всё как на рисунке, но у меня не заработало.

Почитав коменты на источнике, я понял, что проблема именно у меня.

Разломав всё свое творение и собрав его еще раз, перепроверив всё 10 раз снова ничего не заработало.

(При подключении серва начинает крутиться по часовой стрелке, упирается в ограничитель и пытается его преодолеть..., при этом никакие другие команды с "пульта" не работают(как я понял угол поворота моей сервы отличается от того, что был в скетче к этой схемке), тут я решил проверить, а работает ли вообще что-либо "по воздуху", отрубил серву, подключил только двигло(+драйвер) - ноль эмоций.)

Решил проверить все компоненты по отдельности на тестовых скетчах, пришел к выводу, что l298n, серва, и двигло работают(всё крутится, вертится как надо и куда надо), а вот с NRF вошел в тупик.

Полопатив форумы, нашел вот такой пример проверки двух плат: http://nrf24l01.pp.ua/nrf24l01/pristupaya-k-rabote-s-nrf24l01-na-arduino/ и вот что у меня получилось:

1 плата VISduino uno (ch340) китайка и первый нрф выдал мне это:

Крупно http://radikal.ru/fp/29bb99959abe4fae934ed4f738562c66

2 плата arduino nano (ch340) китайка и второй нрф выдал мне это:

Крупно http://radikal.ru/fp/f9771627d30542fdbd6fe15ae5d358a5

При подключении обеих и нажатии кнопки Т ничего не происходит.

Вешал 470мкф 16в на нрф - ничего не изменилось.

Питание ардуины от ЮСБ (3.3в на нрф идет с платы ардуин)

 

Вопросы:

1) NRF брал в комплекте 2 штуки(NRF24L01),  но в мониторе выдает, что на уно NRF24L01+ (16 bits), а на nano NRF24L01 (8 bits) - меня обманули и выдали разные?))

2) Что я делаю не так? (Желательно конкретно, очень конкретно, прямо тыкнуть пальцем) 

3) Как их подружить? (Очень конкретно, если можно с примерами)

4) Где прочитать? (Ссылку, возможно с такой проблемой уже кто-то сталкивался)

 

 

 

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015
Kamaz_master
Offline
Зарегистрирован: 21.11.2015

 

 

Да подключаю я это, все равно в мониторе бегут в одну строчку буквы "а" с квадратиками..

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

в конце есть примеры с джойстиком, залейте их и проверьте

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Valera19701 пишет:

в конце есть примеры с джойстиком, залейте их и проверьте

 

Именно их и проверяю, с джойстиком, даже менял местами уно с нано, результат один - в мониторе бежит много букв "а" с квадратиками

 

Даже без включенного передатчика подключаю приемник, включаю монитор и там бегут эти буквы

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

а в мониторе скорость какая стоит?

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Valera19701 пишет:

а в мониторе скорость какая стоит?

57600 бод

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

а в примере какая?

тогда для начала вам сюда

http://arduino.ru/Arduino_environment

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Valera19701 пишет:

а в примере какая?

тогда для начала вам сюда

http://arduino.ru/Arduino_environment

 

Благодарю, в примере скорость то я и не посмотрел))

 

 

 

Я правильно понимаю что он должен просто неостанавливаясь писать 

x = y = , а не именно когда нажмешь в сторону х или у ?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

правильно, должны менятся только значения x и y

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Valera19701 пишет:

правильно, должны менятся только значения x и y

 

У меня не меняется, лиж изредка проскакивают какие-то значения(и без каких либо нажатий на джойстик), что опять я накосячил?)

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

смотрите правильность подключения

Kamaz_master
Offline
Зарегистрирован: 21.11.2015
X = 192 Y = 0
X = 0 Y = 0
X = 0 Y = 0
X = -1 Y = -1793
X = -1 Y = -7937
X = 192 Y = 0
X = 0 Y = 0
X = 0 Y = 0
X = -1 Y = 128
X = 0 Y = 0
X = 0 Y = 0
X = 0 Y = 0
X = 224 Y = 0
 
 
вот такое вот проскакивает.. 
Подключено все верно
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

https://yadi.sk/d/CXjuENmaEEwun

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

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

jeka_tm пишет:

https://yadi.sk/d/CXjuENmaEEwun

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

 

Залил, запустил - тишина.

Залил предыдущий - no radio available

 

Заметил, что на уно горит диод TX, а на nano RX не горит.. куда копать?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а терминал открывал у приемника? скорость правильно выставил?

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Скорость 9600, в мониторе пустота

 

 

UPD:

 

Заработал ваш пример, в мониторе 9600, бежит в столбик цифры 

 

 
128
0
0
0
0
0
0
0
0
128
0
0
0
0
224
128
224
0
0
0
0
0
0
0
0
128
0
0
0
0
0
224
0
0
0
0
0
128
248
0
0
0
0
0
0
0
0
0
0
128
0
192 и тд
 
 
Эти скетчи загрузил
x = 0 y = 0
x = 0 y = 0
x = 0 y = 0 и тд при нажатии кнопок значения не меняются
 
Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

а джойстик подключен Х на А0 У на А1?

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Да.

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

а vcc на 5в ? и тестер у вас есть?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

странно. или проблема с питанием, особенно на нано, где 3.3В берется с ch340 или подключением. конденсатор керамика на радиомодуль нужен. подключение первоначально проверить примером status. моя библиотека немного отличается от стандартной. поэтому примеры для нее не будут скорее всего работать на обычной. плюс возможно не тот сом порт выбран и слушаешь передатчик а не приемник. эти примеры сам проверял лично не раз. рабочие

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Valera19701 пишет:

а vcc на 5в ? и тестер у вас есть?

Джойстик - Ардуино

GND - GND

+15v - 5v

VRx - A0

VRy - A1

 

Тестера к сожалению нет

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

jeka_tm пишет:

странно. или проблема с питанием, особенно на нано, где 3.3В берется с ch340 или подключением. конденсатор керамика на радиомодуль нужен. подключение первоначально проверить примером status. моя библиотека немного отличается от стандартной. поэтому примеры для нее не будут скорее всего работать на обычной. плюс возможно не тот сом порт выбран и слушаешь передатчик а не приемник. эти примеры сам проверял лично не раз. рабочие

Питание - может быть, замерить нечем

Кондер висит 470мкф 16в

Ком порт выбираю для передатчика(передний вход юсб ком4) и задний вход для приемника(ком5), собственно через диспетчер устройств узнал входы

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

[quote=jeka_tm]

подключение первоначально проверить примером status. моя библиотека немного отличается от стандартной. поэтому примеры для нее не будут скорее всего работать на обычной.

[/quote]

 

Поделитесь пожалуйста библией и примером

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

13 пост читай

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Пример статус вроде работает, причем на обеих платах.

А пример с джойстиком так и не заработал.

Куплю на днях новых комплект НРФ, попробую его подключить, потому что мне кажется что косячная какая-то из плат

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

лучше тестер дешевый для начала купите

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Я подал им отдельное питание (3.7в), результат тот же, что и от 3.3 с ардуины, статус показывает, а пример с джойстиком не работает

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

С вашей либой:

Статус передатчика:

 

 

Статус приемника:

 

При подключении примера монитор ничего не выдает (пусто)

 

 

Кстати, почему приемник в сканере выдает то что на фото, а не 40 канал, 250 скорость и тд. ? Не в этом ли случайно вся моя беда?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

кстати да. что то не то со вторым модулем. настройки игнорит

Kamaz_master
Offline
Зарегистрирован: 21.11.2015

Как попробывать его полечить?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

tika
Offline
Зарегистрирован: 22.07.2015

Думаю , что оптимальная работа в использование NRF24L01+ это возможность двухсторонней связи-возможность приема  и передачи модуля. В  чем я и нуждаюсь. Задача передача с модуля 3х команд(кнопок) прием с выводом на светодиоды 3х команд с 1секундной свечением. Все три модуля одинаковы и дублируют друг друга.  Есть рабочий скеч передатчика и приемника рабочие– но не могу соединить в одно целое - не получается. Нужна ваша помощь. Направте в нужное русло хоть сылкой на пример. Спасибо.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

оптимальная для кого? для тебя скорее всего

вообще в либе есть возомжность отвечать autoasc вроде называется. но это вроде для 1 параметра развером в байт, не интересовался особо

вообще непонятно немного. у каждого модуля кнопки и светодиоды? уж не управление освещением/обогревателем и т.п. делаешь?

tika
Offline
Зарегистрирован: 22.07.2015

Спасибо за комментарии –наверно Вы правы . В моем случае использование в системе старта и финиша и обмена между ними и отдельно выведенного табло результатов (использование без проводной связи – с работке кнопки и работа светодиода  о получение информации для дальнейшей обработки.

Пытаюсь соеденить 2-половинки в 1 цело.

Передатчик.

 

#include <SPI.h> // 
#include "RF24.h" // 
byte data[1]; // 
const uint64_t pipe = 0xF0F0F0F0A1LL; // 
RF24 radio(9,10); // 

void setup(){
pinMode(2, INPUT_PULLUP); // 
pinMode(3, INPUT_PULLUP); // 
pinMode(4, INPUT_PULLUP); // 
radio.begin(); // 
radio.openWritingPipe(pipe); // 
}

void loop(){
if(digitalRead(2)==HIGH || digitalRead(3)==HIGH || digitalRead(4)==HIGH){
data[0]=0;
}
if(digitalRead(2)==LOW){
data[0]=1;
}
if(digitalRead(3)==LOW){
data[0]=2;
}
if(digitalRead(4)==LOW){
data[0]=3;
}
radio.write(data, 1); //
}


 

Приемник.

#include <SPI.h> // 
#include "RF24.h" // 
byte data[1]; // 
boolean var; // 
const uint64_t pipe = 0xF0F0F0F0A1LL; // 
RF24 radio(9,10); // 

void setup(){
pinMode(5, OUTPUT); // 
pinMode(6, OUTPUT); // 
pinMode(7, OUTPUT); // 
radio.begin(); // 
radio.openReadingPipe(1,pipe); // 
radio.startListening(); 
}

void loop(){
if(radio.available()){
var = false;
while(!var){
var = radio.read(data, 1); 
if(data[0] == 0){
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}
if(data[0] == 1){
digitalWrite(5, HIGH);
delay(100);
digitalWrite(5, LOW);
}
if(data[0] == 2){
digitalWrite(6, HIGH);
delay(100);
digitalWrite(6, LOW);
}
if(data[0] == 3){
digitalWrite(7, HIGH);
delay(100);
digitalWrite(7, LOW);
}
}
}
}



 



 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

почитай

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

еще раз что должно получится. просто есть один метод. все модули слушают постоянно, но когда нужно что то передать переводятся в режим передачи шлют и снова слушают. в момент передачи случашть не может

а есть еще RF24Network. почитай про нее. незнаю что тебе лучше подойдет потому что непонятно что ты делаешь

tika
Offline
Зарегистрирован: 22.07.2015

Как Вы правы - мне нужно 3 одинаковых устройства на NRF24L01+ c 3- мя. кнопками на них и 3-мя светодиодами  с индикацией от 100 до 1000 мс. времени которые выполняют индикацию нажатой  той или иной кнопки на принимающих  блоках и наоборот. ( 1-я передает все принимают. 2-я передает все принимают, 3-передает все принимают с индикацией свечения 100мс. времени) 

Есть даже такой вариант но не могу включить задержку светодиодов на 1000мс. времени.

орегинал в http://mybotic.com.my/webshaper/store/viewProd.asp?pkProductItem=414

Хотя верхний вариант отдельно передатчик и отдельно приемник работает лучше - может по этому и лучше.

 

 #include "NRF24L01.h"

 
//***************************************************
#define TX_ADR_WIDTH    5   //5 не подписанных символы Техас (RX) ширина адрес
#define TX_PLOAD_WIDTH  23  //   без знака символы Техас полезной нагрузки
 
//define LED pin// определяем LED штифт
#define LED1 5
#define LED2 6
#define LED3 7
 
//define button pin// определить кнопку штифт
#define BUTTON1 A0
#define BUTTON2 A1
#define BUTTON3 A2
//***************************************************
 
unsigned char TX_ADDRESS[TX_ADR_WIDTH]  = 
{
  0xaa,0xbb,0xcc,0xdd,0xee
}; // Define a static TX address// Определить статический адрес TX
unsigned char rx_buf[TX_PLOAD_WIDTH] = {0}; // Инициализировать значение
unsigned char tx_buf[TX_PLOAD_WIDTH] = {0};// Инициализировать значение
//***************************************************
 
void setup() // недействительными установки
{
  SPI_DIR = ( CE + SCK_pin + CSN + MOSI_pin);
  SPI_DIR &=~ ( IRQ + MISO_pin);
  init_io();                        // Инициализировать IO порт
  unsigned char status=SPI_Read(STATUS);
  initialize_R_T();
  
  //initialize LEDs// инициализировать светодиодов
  digitalWrite(LED1, LOW);
  digitalWrite(LED2, LOW);//индикатор 2
  digitalWrite(LED3, LOW);
}
void loop()// недействительными цикл ()
{
    unsigned char Rx_szTemp[1] = {0}; // держать полученные данные
  
    //Start TX mode // Запуск режима TX 
    if(digitalRead(BUTTON1) == 0)
    {
       RF_SendData("1");   // отправить '1' через модуль РФ
    }
    else if(digitalRead(BUTTON2) == 0)// иначе, если
    {
       RF_SendData("2");   //send '2' through RF module
    }
    else if(digitalRead(BUTTON3) == 0)
    {
       RF_SendData("3");  //send '3' through RF module
    }
    
    //RX mode// Режим приема
    RF_ReceiveData(&Rx_szTemp[0]); // получить данные от модуля РФ
     
    if(Rx_szTemp[0] == '1')   // если = полученные данные '1'
    {
      digitalWrite(LED1, HIGH);// индикатор 1 ВКЛЮЧЕН 
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
    }
    else if(Rx_szTemp[0] == '2')  // если = полученные данные '2'
    {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);// индикатор 2 ВКЛЮЧЕН 
      digitalWrite(LED3, LOW);
    }
    else if(Rx_szTemp[0] == '3')  // если = полученные данные '3'
    {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, HIGH);// индикатор 3 ВКЛЮЧЕН
      
      
     
    }
}
 
 
//**************************************************
// Function: init_io();// Функция: init_io ();
// Description:// Описание:
// flash led one time,chip enable(ready to TX or RX Mode),// Светодиодной вспышкой один раз, чип позволит (готовый TX RX или режим),
// Spi disable,Spi clock line init high// Спи отключить, SPI часы линии инициализировать высокой
//**************************************************
void init_io(void)//недействительными init_io (недействительными)
{
  SPI_PORT&=~CE; // Чип позволит
  SPI_PORT|=CSN; // Спи отключить
  SPI_PORT&=~SCK_pin; // Спи часы линии инициализировать высокой
}
 
/**************************************************
 * Function: SPI_RW();//Функция: SPI_RW ();
 * 
 * Description:// Описание:
 * Writes one unsigned char to nRF24L01, and return the unsigned char read
 * from nRF24L01 during write, according to SPI protocol
   Пишет один неподписанный символ для NRF24L01, и вернуть неподписанные символ читать
 * От NRF24L01 во пишут, в соответствии с протоколом SPI
 **************************************************/
unsigned char SPI_RW(unsigned char Byte)//подписанные символ SPI_RW (неподписанные символ байт)
{
  unsigned char i;                      //неподписанные символ я;
  for(i=0;i<8;i++)                      // выход 8-бит
  {
    if(Byte&0x80)                       //если (байт & 0x80)
    {
      SPI_PORT |=MOSI_pin;    // Выход "неподписанные символ ', MSB для MOSI_pin
    }
    else                     //другой        
    {
      SPI_PORT &=~MOSI_pin;
    }
    SPI_PORT|=SCK_pin;                     // Установить SCK_pin высокий ..
    Byte <<= 1;                         // Сдвиг следующий бит в MSB ..
    if(SPI_IN & MISO_pin) //если (SPI_IN & MISO_pin)
    {
      Byte |= 1;              // Захватить текущее MISO_pin немного
    }
    SPI_PORT&=~SCK_pin;                   // ..то Установить SCK_pin низкий снова
  }
  return(Byte);                 // Возврат прочитать неподписанные символ
}
/**************************************************/
 
/**************************************************
 * Function: SPI_RW_Reg(); // Функция: SPI_RW_Reg ();
 * 
 * Description:// Описание:
 * Writes value 'value' to register 'reg'// Записывает значение '' значение для регистрации '' рег
/**************************************************/
unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)//неподписанные символ SPI_RW_Reg (неподписанные символ рег, символьное значение без знака)
{
  unsigned char status;// неподписанных статус символ;
 
  SPI_PORT&=~CSN;                   // ДНС низкий, инициализировать сделка SPI
  status = SPI_RW(reg);             // Выбрать регистр
  SPI_RW(value);                    // ..и Значение записи к нему ..
  SPI_PORT|=CSN;                    // ДНС высокой снова
 
  return(status);                   // Вернуть NRF24L01 статус неподписанные символ
}
/**************************************************/
 
/**************************************************
 * Function: SPI_Read();//Функция: SPI_Read_Buf ();
 * 
 * Description://Описание:
 * Read one unsigned char from nRF24L01 register, 'reg'Читайте одну неподписанные символ из регистра NRF24L01, "рег"
/**************************************************/
unsigned char SPI_Read(unsigned char reg)//неподписанные символ SPI_Read (неподписанные символ рег)
{
  unsigned char reg_val;// неподписанные символ reg_val;
 
  SPI_PORT&=~CSN;                // ДНС низкий, инициализировать SPI связь ...
  SPI_RW(reg);                   // Выбор зарегистрируйтесь, чтобы читать из ..
  reg_val = SPI_RW(0);           // ..то Прочитать значение регистра
  SPI_PORT|=CSN;                 // ДНС высокий, прекратить общение SPI
 
  return(reg_val);               // Возвращаемое значение регистра
}
/**************************************************/
 
/**************************************************
 * Function: SPI_Read_Buf();//Функция: SPI_Write_Buf ();
 * 
 * Description://Описание:
 * Reads 'unsigned chars' #of unsigned chars from register 'reg' //Читает неподписанные символы 'неподписанных симв' #of из 'рег' регистра
 * Typically used to read RX payload, Rx/Tx address//Обычно используется для чтения RX полезной нагрузки, прием / передача адрес
/**************************************************/
unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)//неподписанные символ SPI_Read_Buf (неподписанные символ рег, неподписанные символ * pBuf, неподписанные символ байт)
{
  unsigned char status,i;//неподписанных статус символ, я;
 
  SPI_PORT&=~CSN;                   // Установить ДНС низкий, инициализации SPI tranaction
  status = SPI_RW(reg);          // Выберите зарегистрируйтесь, чтобы написать и прочитать статус неподписанные символ
 
  for(i=0;i<bytes;i++)             //для (я = 0; я <байт; я ++)
  {
    pBuf[i] = SPI_RW(0);    // // Выполнить SPI_RW читать неподписанные символ из NRF24L01
  }
 
  SPI_PORT|=CSN;                   // Установить ДНС высокой снова
 
  return(status);                  // Вернуть NRF24L01 статус неподписанные символ
}
/**************************************************/
 
/**************************************************
 * Function: SPI_Write_Buf();//Функция: SPI_Write_Buf ();
 * 
 * Description://Описание:
 * Writes contents of buffer '*pBuf' to nRF24L01//Записывает содержимое буфера '*', чтобы pBuf NRF24L01
 * Typically used to write TX payload, Rx/Tx address//Обычно используется, чтобы написать полезную нагрузку TX, Rx / Tx адрес
/**************************************************/
unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)//неподписанные символ SPI_Write_Buf (неподписанные символ рег, неподписанные символ * pBuf, неподписанные символ байт)
{
  unsigned char status,i;//неподписанных статус символ, я;
 
  SPI_PORT&=~CSN;                   // Установить ДНС низкий, инициализации SPI tranaction
  status = SPI_RW(reg);             //  Выберите зарегистрируйтесь, чтобы написать и прочитать статус неподписанные символ
  for(i=0;i<bytes; i++)             // затем написать все неподписанные символ в буфере (* pBuf)
  {
    SPI_RW(*pBuf++);                
  }
  SPI_PORT|=CSN;                   // Установить ДНС высокой снова
  return(status);                  // Вернуть NRF24L01 статус неподписанные символ
}
/**************************************************/
 
/**************************************************
 * Function: Initialize TX & RX mode;//Функция: Инициализировать режим TX & RX;
 * 
 * Description://Описание:
 * This function initializes one nRF24L01 device to//Эта функция инициализирует один NRF24L01 устройство к
 * TX mode, set TX address, set RX address for auto.ack,//Режим Техас, установить TX-адрес, установите адрес RX для auto.ack,
 * fill TX payload, select RF channel, datarate & TX pwr.//Заполнить TX полезной нагрузки, выберите радиочастотный канал, DataRate & TX PWR.
 * PWR_UP is set, CRC(2 unsigned chars) is enabled, & PRIM:TX.//PWR_UP установлен, КПР (2 неподписанные символов) включена, и ПРИМ: TX.
 * 
 * ToDo: One high pulse(>10us) on CE will now send this//ToDo: Один высокий пульс (> 10us) на CE теперь отправить это
 **************************************************/
void initialize_R_T(void)//недействительными initialize_R_T (недействительными)
{
  SPI_PORT&=~CE;
 
  SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Записывает TX_Address в NRF24L01
  SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 же, как TX_Adr для Auto.Ack
 
  SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Включить Auto.Ack: Pipe0
  SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Включить Pipe0
 
  SPI_RW_Reg(WRITE_REG + RF_CH, 50);        // Выбор радиочастотного канала 50
  SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x26);   // TX_PWR: 0 дБм, DataRate: 250 Мбит, МШУ: HCURR
 
  SPI_PORT|=CE;
}
/**************************************************
 * Function: TX_Mode(); //Функция: TX_Mode ();
 * 
 * Description: //Описание:
 * This function initializes one nRF24L01 device to //Эта функция инициализирует один NRF24L01 устройство к
 * TX mode, set TX address, set RX address for auto.ack, //Режим Техас, установить TX-адрес, установите адрес RX для auto.ack,
 * fill TX payload, select RF channel, datarate & TX pwr. //Заполнить TX полезной нагрузки, выберите радиочастотный канал, DataRate & TX PWR.
 * PWR_UP is set, CRC(2 unsigned chars) is enabled, & PRIM:TX. //PWR_UP установлен, КПР (2 неподписанные символов) включена, и ПРИМ: TX.
 * 
 * ToDo: One high pulse(>10us) on CE will now send this //ToDo: Один высокий пульс (> 10us) на CE теперь отправить это
 * packet and expext an acknowledgment from the RX device. //Пакет и expext подтверждение от устройства RX.
 **************************************************/
void TX_Mode(void) //недействительными TX_Mode (недействительными)
{
  SPI_PORT&=~CE;
 
  SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1f); // 500us + 86us, 10 Retrans ...
  SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);     // Установить PWR_UP немного, включите CRC (2 неподписанные знаков) и Прим: TX. MAX_RT & TX_DS включен ..
  SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
 
  SPI_PORT|=CE;
}
 
/**************************************************
 * Function: RX_Mode();//Функция: RX_Mode ();
 * 
 * Description://Описание:
 * This function initializes one nRF24L01 device to//Эта функция инициализирует один NRF24L01 устройство к
 * RX Mode, set RX address, writes RX payload width,//RX Режим установите RX адрес, пишет ширину RX полезной нагрузки,
 * select RF channel, datarate & LNA HCURR.//Выберите радиочастотный канал, DataRate & МШУ HCURR.
 * After init, CE is toggled high, which means that//После инициализации, CE переключается высокой, что означает, что
 * this device is now ready to receive a datapacket.//Это устройство готово для приема datapacket.
/**************************************************/
void RX_Mode(void)//недействительными RX_Mode (недействительными)
{
  SPI_PORT&=~CE;
  
  SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Выбор же RX ширину полезной нагрузки как TX шириной Payload
  SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);     //Установить PWR_UP немного, включите CRC (2 неподписанные символов) & Прим: RX. Включен RX_DR ..
  
  SPI_PORT|=CE;                             // Установить CE контактный высокой для того, чтобы устройство RX
}
 
//RF transmit data function// Функция передачи данных РФ
void RF_SendData(char *TXdata)
{
    TX_Mode();  // Включить режим Tx                                                // activate Tx mode
    
    for(short i=0; i<23;i++)// для (короткий я = 0; я <23; я ++)
    {
      tx_buf[i] = (unsigned char)*(TXdata+i);  // Сохранить данные в массив                                   // store the data to an array 
    }      
      
    unsigned char status = SPI_Read(STATUS);   // Читаем значение регистра статуса в                // read register STATUS's value
    
    if(status&TX_DS)    // если данные готовы получить (TX_DS) прервать                                       // if receive data ready (TX_DS) interrupt
    {
      SPI_RW_Reg(FLUSH_TX,0);                                  
      SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);       // Запись в TX_FIFO playload
    }
    if(status&MAX_RT)                                         // если принимать данные готовые (MAX_RT) прервать это повтора чем SETUP_RETR
    {
      SPI_RW_Reg(FLUSH_TX,0);
      SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);      // Отключение режима Standy
    }
    SPI_RW_Reg(WRITE_REG+STATUS,status);                     // Ясно RX_DR или TX_DS или MAX_RT флаг прерывания
    delay(50);
    RX_Mode();    
}
 
//RF receive data function// РФ получить функцию передачи данных
void RF_ReceiveData(unsigned char *RXdata)// недействительными RF_ReceiveData (неподписанные символ * RXdata)
{
    RX_Mode();      // Включить режим RX                                                
    unsigned char status = SPI_Read(STATUS);  // Читаем значение регистра статуса в
    if(status&RX_DR)                                                 // если данные готовы получить (TX_DS) прервать
    {
      SPI_Read_Buf(RD_RX_PLOAD, rx_buf, TX_PLOAD_WIDTH);             // Прочитать playload в rx_buf
      SPI_RW_Reg(FLUSH_RX,0);                                        // Ясно RX_FIFO                               
      
      *RXdata = rx_buf[0];                                           // передать полученные данные в RXdata
      Serial.println(rx_buf[0]);
    }
    SPI_RW_Reg(WRITE_REG+STATUS,status);                             // Ясно RX_DR или TX_DS или MAX_RT флаг прерывания
    delay(50);
    TX_Mode(); 
}
 

 

 А нужно добавить такой вариант. но так не работает с 058 строчки.
//RX mode// Режим приема
    RF_ReceiveData(&Rx_szTemp[0]); // получить данные от модуля РФ
     
    if(Rx_szTemp[0] == '1')   // если = полученные данные '1'
    digitalWrite(LED1, HIGH);// индикатор 1 ВКЛЮЧЕН на 1сек
      delay(1000);
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
          }
    else if(Rx_szTemp[0] == '2')  // если = полученные данные '2'
    {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);// индикатор 2 ВКЛЮЧЕН на 1сек
      delay(1000);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
     
    }
    else if(Rx_szTemp[0] == '3')  // если = полученные данные '3'
    {
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, HIGH);// индикатор 3 ВКЛЮЧЕН на 1 сек
      delay(1000);
      digitalWrite(LED3, LOW);

 

 
  

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

почему 

Rx_szTemp[0] == '1'

а не 

Rx_szTemp[0] ==1

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

tika
Offline
Зарегистрирован: 22.07.2015

 орегинал в http://mybotic.com.my/webshaper/store/viewProd.asp?pkProductItem=414

Думаю года написания древние - но работает. Там и сылка на скеч. Собилал все на макетке- работает.

в #35 работает передатчик и приемник четко - но не могу соеденить вместе. Управление кнопками и выходы на светодиоды распределены конфликта нет - Нуждаюсь в куске управление слияния приема-передачи в модуле NRF24L01+.

Но не тяну я просто..

 

tika
Offline
Зарегистрирован: 22.07.2015

А самое интересное- что ни где и не кто не показал работу в скетче обмена NRF24L01+  между собой не команд ни информации именно между 2х блоков-(обмена). Я не прав? Только прием и передачу.