nrf24l01 несколько каналов

darkjorik
Offline
Зарегистрирован: 08.11.2014

в разных описаниях есть небольшая путаница с каналами которых вроде ка 128

и меткой.

под каналом я понимаю вот это radio.setChannel(0xE8E8F0F0E1LL);

под меткой radio.openReadingPipe(1, pipe);

где pipe - как я понял метка погонялово в сети.

при этом за раз меток может быть много

radio.openReadingPipe(2, pipe2);

radio.openReadingPipe(3, pipe3);

но если на одном канале несколько предатчиков на одной и той же частоте то канал они делят поровну и как следствие скорость передачи.

 

Тут вопрос такой.

Если я на одном канале который в сетапе задаю слушаю эти пайпы - метки, то все вроде как норм.

Но если начинаю в loop ставить смену канала (radio.setChannel), все время. То вроде как работает , но глючно.

Может кто знает как обстоят дела с каналами, можно ли их все время менять, без глюков ?

 

 

LouizSaviours
Offline
Зарегистрирован: 08.07.2017

darkjorik пишет:
в разных описаниях есть небольшая путаница с каналами которых вроде ка 128
читайте только описания от производителя. Каналов 128 (#0...#127), но #127 и #126 недокументированно отключены в некоторых  TX режимах  из-за проблем.

darkjorik пишет:
под каналом я понимаю вот это radio.setChannel(0xE8E8F0F0E1LL);
тип аргумента должен быть uint8_t

darkjorik пишет:
Может кто знает как обстоят дела с каналами, можно ли их все время менять, без глюков ?
Можно , например на TX.

Glabas
Offline
Зарегистрирован: 07.07.2017

darkjorik пишет:
Но если начинаю в loop ставить смену канала (radio.setChannel), все время. То вроде как работает , но глючно.  Может кто знает как обстоят дела с каналами, можно ли их все время менять, без глюков ?
Выкладывай фрагмент кода ответственный за переключение, укажу на твои ошибки.

darkjorik
Offline
Зарегистрирован: 08.11.2014

примерно так

void setup(void){
// бла бал бла
  radio.begin();
}
   void loop(void){
 radio.setChannel(20);
      radio.setDataRate(RF24_2MBPS);
    radio.openReadingPipe(1,pipe);
    //radio.openReadingPipe(2,pipe2);
    radio.startListening();
    
    if (radio.available(&pipeNum)){
  if (pipeNum==1){
   radio.read(msg, sizeof(msg));
// if (msg[0]==5){ бла бла бла;}

}}

radio.setChannel(10);
      radio.setDataRate(RF24_2MBPS);
    //radio.openReadingPipe(1,pipe);
    radio.openReadingPipe(2,pipe2);
    radio.startListening();
    
  if (radio.available(&pipeNum)){
      //Serial.println(" "); 

 if (pipeNum==2){
    radio.read(msg2, sizeof(msg2));

// if (msg2[1]==9){ бла бла бла;}
}}
        }

 

Glabas
Offline
Зарегистрирован: 07.07.2017

darkjorik пишет:
примерно так
Сначала исправь мелкие ошибки и дальше будем смотреть по существу.

- Всю инициализацию включая первичное присвоение канала перенеси из loop   в setup, в loop оставь только текущее переключение каналов. Помни, что после начала Listening нужна пауза не менее 20 мсек  по даташиту.  Не делая паузы, можно поиметь проблему. Код напиши для приема и передачи в разных файлах, тогда может быть увидим  где произошла рассинхронизация канала или режима между двумя устройствами.