Не работает дистанционное управление с NRF24.
- Войдите на сайт для отправки комментариев
Чт, 02/11/2017 - 22:13
Здравствуйте жители форума.
Не могу победить НРФку.
Радиоуправляемая машинка- вперед/назад, вправо/влево, больше никаких функций нет.
Основа скетча стырена в инете, скетч переработан под себя.
Код передатчика (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 и драйвер моторов управляет моторами. Питание моторов отдельное.
Скетчи компелируются и грузятся без ошибок, Светодиоды на платах, на драйвере моторов, на модулях питания НРФок горят, но НЕ РАБОТАЕТ.
Помогите пожалуйста разобраться почему.
А для чего в скетче приёмника radio.stopListening?
Я сильно, сильно извиняюсь... вчера выложил промежуточный вариант, второй пин был без питания (джойстик не работал:) ) и не присвоены пины приемника на управление моторами, но утро вечера мудренее, выкладываю окончательный. Тестировалось все на окончательном варианте, все равно не работает.
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 я не на столько разбираюсь :) Вот подключил монитор порта, три строчки данных и остановка, хотя должны бежать безконечно.
Автор, зачем передатчик сыпет данные non стопом. Отправляйте данные, если изменились значения data[0], data[1]
Нет, нет, давайте все же еще посмотрим на передатчик. Автор, поясните зачем две эти строчки крутятся в loop.
pinMode(2,OUTPUT);digitalWrite(2,1);Это очень важно в рамках понимания программы. Этих строчек нет в том месте, откуда вы скопировали код. Т.е. вы вписали их намеренно.
Все заработало. Ура.
Данные принимаются, в мониторе порта на джойстик реагирует.
Всем спасибо!
kasper007 подаю на пин 5в и с него питаю джойстик.
Ну я вас понял, эти данные никогда не меняются, их надо в сетап перенести, спасибо :)
Над нон стоп передачей работаю :) спасибо.
Посмотрите еще пожалуйста на приемник.