Не работает дистанционное управление с NRF24.

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Здравствуйте жители форума.

Не могу победить НРФку.

Радиоуправляемая машинка- вперед/назад, вправо/влево, больше никаких функций нет.

Основа скетча стырена в инете, скетч переработан под себя.

Код передатчика (Nano):

#include <SPI.h>                                       
#include <nRF24L01.h>                                   
#include <RF24.h>                                       
RF24 radio(9, 10);                            
int data[2]; 
                                 
void setup()
{
radio.begin();                                     
radio.setChannel(5);                               
radio.setDataRate     (RF24_1MBPS);                  
radio.setPALevel      (RF24_PA_HIGH);                
radio.openWritingPipe (0x1234567890LL);             
}
void loop()
{
 pinMode(2,OUTPUT);
 pinMode(2,1);

data[0] = analogRead(A1);                             
data[1] = analogRead(A2);      
                  
radio.write(&data, sizeof(data));                 
}

Второй пин OUTPUT, HIGH это питание джойстика.

Код приемника (Uno):

#include <SPI.h>                                
#include <nRF24L01.h>                                  

#include <RF24.h>                                         

RF24 radio(9, 10);                            

int data[2];    
                             
void setup()
{
    radio.begin();                                        
    radio.setChannel(5);                              
    radio.setDataRate     (RF24_1MBPS);                 
    radio.setPALevel      (RF24_PA_HIGH);                 
    radio.openReadingPipe (1, 0x1234567890LL);           
    radio.startListening  ();                           
    radio.stopListening   ();                           
}
void loop()
{

if(radio.available()){                             
radio.read(&data, sizeof(data));                
       
if (data[0] > 510)
{
  digitalWrite (5, 0);
  digitalWrite (6, 1);
}

else if (data[0] < 500)
{
  digitalWrite (5, 1);
  digitalWrite (6, 0);
}

else 
{
  digitalWrite (5, 0);
  digitalWrite (6, 0);
}

if (data[1] > 510)
{
  digitalWrite (4, 0);
  digitalWrite (7, 1);
}

else if (data[1] < 500)
{
  digitalWrite (4, 1);
  digitalWrite (7, 0);
}

else 
{
  digitalWrite (4, 0);
  digitalWrite (7, 0);
}   

 }}

Вторая часть кода через пины 5,6,7,4 и драйвер моторов управляет моторами. Питание моторов отдельное.

Скетчи компелируются и грузятся без ошибок, Светодиоды на платах, на драйвере моторов, на модулях питания НРФок горят, но НЕ РАБОТАЕТ.

Помогите пожалуйста разобраться почему.

kalapanga
Offline
Зарегистрирован: 23.10.2016

А для чего в скетче приёмника radio.stopListening?

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Я сильно, сильно извиняюсь... вчера выложил промежуточный вариант, второй пин был без питания (джойстик не работал:)  ) и не присвоены пины приемника на управление моторами, но утро вечера мудренее, выкладываю окончательный. Тестировалось все на окончательном варианте, все равно не работает.

kalapanga ага, видимо уже долго смотрю на скетч - явных ошибок не вижу, конечно стопЛистенинг в приемнике не нужен, спасибо :)

передатчик

#include <SPI.h>                                       
#include <nRF24L01.h>                                   
#include <RF24.h>                                       
RF24 radio(9, 10);                            
int data[2]; 
                                 
void setup()
{
radio.begin();                                     
radio.setChannel(5);                               
radio.setDataRate     (RF24_1MBPS);                  
radio.setPALevel      (RF24_PA_HIGH);                
radio.openWritingPipe (0x1234567890LL);             
}
void loop()
{
  pinMode(2,OUTPUT);
  digitalWrite(2,1);

    data[0] = analogRead(A1);                             
    data[1] = analogRead(A2);      
                  
    radio.write(&data, sizeof(data));                 
}
 

приемник

#include <SPI.h>                                
#include <nRF24L01.h>                                  
#include <RF24.h>                                         

RF24 radio(9, 10);                            

int data[2];    
                             
void setup()
{
 pinMode (5, OUTPUT);
 pinMode (6, OUTPUT);
 pinMode (4, OUTPUT);
 pinMode (7, OUTPUT);

    radio.begin();                                        
    radio.setChannel(5);                              
    radio.setDataRate     (RF24_1MBPS);                 
    radio.setPALevel      (RF24_PA_HIGH);                 
    radio.openReadingPipe (1, 0x1234567890LL);           
    radio.startListening  ();    
    //radio.stopListening   ();                                               
}
void loop()
{

if(radio.available()){                             
radio.read(&data, sizeof(data));                
       
if (data[0] > 510)
{
  digitalWrite (5, 0);
  digitalWrite (6, 1);
}

else if (data[0] < 500)
{
  digitalWrite (5, 1);
  digitalWrite (6, 0);
}

else 
{
  digitalWrite (5, 0);
  digitalWrite (6, 0);
}

if (data[1] > 510)
{
  digitalWrite (4, 0);
  digitalWrite (7, 1);
}

else if (data[1] < 500)
{
  digitalWrite (4, 1);
  digitalWrite (7, 0);
}

else 
{
  digitalWrite (4, 0);
  digitalWrite (7, 0);
}   

 }}

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Так вы локализуйте ошибку. Что не работает именно? Связи нет или данные не так передаются, или они не так разбираются или в буфере не то что ожидаете. Это же элементарно проверить чтобы не гадать на кофейной гуще.

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Penni я не на столько разбираюсь :) Вот подключил монитор порта, три строчки данных и остановка, хотя должны бежать безконечно.

КонстантинБ
Offline
Зарегистрирован: 02.11.2017
 
Penni, исправил, бегут данные, на джойстик реагируют.
kasper007
Offline
Зарегистрирован: 23.05.2016

Автор, зачем передатчик сыпет данные non стопом. Отправляйте данные, если изменились значения data[0], data[1]

b707
Offline
Зарегистрирован: 26.05.2017

КонстантинБ пишет:

 
Penni, исправил, бегут данные, на джойстик реагируют.
 
ну отлично. Вот вы в передатчике вывод в сериал добавили - и сразу отловили несколько ошибок. - продолжайте. Теперь точно так же в приемнике. Принимает ли он что-либо?
kasper007
Offline
Зарегистрирован: 23.05.2016

Нет, нет, давайте все же еще посмотрим на передатчик. Автор, поясните зачем две эти строчки крутятся в loop.

pinMode(2,OUTPUT);

digitalWrite(2,1);

Это очень важно в рамках понимания программы. Этих строчек нет в том месте, откуда вы скопировали код. Т.е. вы вписали их намеренно.

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

Все заработало. Ура.

Данные принимаются, в мониторе порта на джойстик реагирует.

Всем спасибо!

 

КонстантинБ
Offline
Зарегистрирован: 02.11.2017

kasper007 подаю на пин 5в и с него питаю джойстик. 

Ну я вас понял, эти данные никогда не меняются, их надо в сетап перенести, спасибо :)

Над нон стоп передачей работаю :) спасибо.

Посмотрите еще пожалуйста на приемник.