Передача и прием нескольких потоков данных nrf24l01

bobjob
Offline
Зарегистрирован: 14.10.2017

Здравствуйте, подскажите как осуществить передачу и прием нескольких потоков данных с модулем nrf24l01

Вот пример 2 переменных резистора на передатчике, 2 сервопривода на приемнике 

#include <SPI.h>
#include "RF24.h" // Подключаем скачанную библиотеку RF24.
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала передачи
int msg[1]; //переменная для отправки радио сигнала
int potpin_1 = A0; // potentiometer 
int val_1; 
int potpin_2 = A1; // potentiometer 2
int val_2; 
void setup(void){
radio.begin();
radio.openWritingPipe(pipe); // Открываем канал передачи
}
void loop() {
val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1);
}

 

#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo servo_1; //даём имена servo
Servo servo_2;
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL; // адрес канала
int msg[1]; //переменная для приёма радио сигнала
int data; //переменная для servo
int pos;
void setup()
{
servo_1.attach(3); // servo 1 pin3
servo_2.attach(6); // servo 2 pin6
radio.begin();
radio.openReadingPipe(1,pipe); // Открываем один из 6-ти каналов приема
radio.startListening(); // Начинаем слушать эфир
}
void loop()
{
if (radio.available())radio.read(msg, 1);
if (msg[0] <128 && msg[0] >-1)data = msg[0], pos = map(data, 0, 127, 7, 177),servo_1.write(pos);
if (msg[0] >127 && msg[0] <255)data = msg[0], pos = map(data, 128, 254, 9, 177),servo_2.write(pos);
}

 Допустим мне надо передать значения с 3го переменного резистора и принять эти данные на пина 4 на приемнике для мотора (в виде шим сигнала)

Как происходит разделение сигналов у nrf24l01  ведь данные с резистора 1 и 2 идут одновременно и разделяются лиш по значению данных  (msg[0] <128 && msg[0] >-1) и  (msg[0] >127 && msg[0] <255) а как сделать полноценное разделение сигналов? как то через msg[0], msg[1], msg[2] ?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Передавайте/принимайте структурой, в которой скопом все значения - profit.

bobjob
Offline
Зарегистрирован: 14.10.2017

А может есть способ разделить сигналы по каналам? Встречал в примерах скетчей такой код 

#define channel_number 4  //set the number of channels, in this case: 4 channels

 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

bobjob пишет:

А может есть способ разделить сигналы по каналам? Встречал в примерах скетчей такой код 

#define channel_number 4  //set the number of channels, in this case: 4 channels

По каналам - нет, по трубам - да.

bobjob
Offline
Зарегистрирован: 14.10.2017

Что значит по трубам?  можно пример?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

bobjob пишет:

Что значит по трубам?  можно пример?

В терминологии nRF24L01 - Pipe, читайте доку, там всё есть. До шести труб поддерживается, передавать можно к любую трубу, принимать - тоже из любой. При этом номер канала (несущая, грубо говоря) - у приёмника и передатчика должны быть одинаковы. Рассматривайте трубы как сделанные за вас идентификаторы пакетов разного типа, примерно в таком разрезе.

В доке к библиотеке всё описано, даже с примерами ;)

bobjob
Offline
Зарегистрирован: 14.10.2017

спасибо буду разбираться