Не работает прием с двух передатчиков в 1 приемник модуля nrf24l01

Тема в разделе "Arduino & Shields", создана пользователем UdalovPS, 8 авг 2021.

  1. UdalovPS

    UdalovPS Нуб

    Уважаемые знатоки, пытаюсь настроить передачу с двух ардуинок соединенных с модулем
    nrf24L01 на один общий приемник по разным трубам, но сигнал приходит только по 1 трубе, а по остальным нет. Никак не могу понять в чем дело.
    Скетч Передатчика №1
    Код (C++):
    #include <SPI.h>                          
    #include "nRF24L01.h"                      
    #include "RF24.h"    
                         
    RF24 radio(9, 10);                        
    byte data = 10;
    unsigned long tmp_time = 0;
    //uint8_t  pipe;
     
                             
    void setup() {
      Serial.begin(9600);                    
      radio.begin();
      radio.setAutoAck(1);
      radio.setRetries(0, 15);
      radio.enableAckPayload();
      radio.setPayloadSize(32);
                               

      radio.openWritingPipe (0xAABBCCDD11LL);
      radio.setChannel(0x60);
                         
      radio.setDataRate (RF24_250KBPS);    
      radio.setPALevel (RF24_PA_MAX);  

      radio.powerUp();
      radio.stopListening();
    }
     
    void loop () {
      if (millis() - tmp_time > 1000) {
        if (radio.write(&data, sizeof(data)) ){
          Serial.print ("OK sent: "); Serial.println(data);
        }
        else {
          Serial.print ("Not sent: "); Serial.println(data);
        }
        tmp_time = millis();
      }
      if (millis() == 0) {
        tmp_time = 0;
      }
    }
    Скетч передачика №2
    Код (C++):
    #include <SPI.h>                          
    #include "nRF24L01.h"                      
    #include "RF24.h"    
                         
    RF24 radio(9, 10);                        
    byte data = 20;
    unsigned long tmp_time = 0;
    //uint8_t  pipe;
     
                             
    void setup() {
      Serial.begin(9600);                    
      radio.begin();
      radio.setAutoAck(1);
      radio.setRetries(0, 15);
      radio.enableAckPayload();
      radio.setPayloadSize(32);
                               

      radio.openWritingPipe (0xAABBCCDD22LL);
      radio.setChannel(0x60);
                         
      radio.setDataRate (RF24_250KBPS);    
      radio.setPALevel (RF24_PA_MAX);  

      radio.powerUp();
      radio.stopListening();
    }
     
    void loop () {
      if (millis() - tmp_time > 1000) {
        if (radio.write(&data, sizeof(data)) ){
          Serial.print ("OK sent: "); Serial.println(data);
        }
        else {
          Serial.print ("Not sent: "); Serial.println(data);
        }
        tmp_time = millis();
      }
      if (millis() == 0) {
        tmp_time = 0;
      }
    }
    Скетч приемника
    Код (C++):
    #include <SPI.h>                          
    #include "nRF24L01.h"                      
    #include "RF24.h"    
                         
    RF24 radio(9, 10);                        
    byte myData;
    unsigned long tmp_time = 0;
    uint8_t  pipe;
     
                             
    void setup() {
      Serial.begin(9600);                    
      radio.begin();
      radio.setAutoAck(1);
      radio.setRetries(0, 15);
      radio.enableAckPayload();
      radio.setPayloadSize(32);
                               

     
      radio.openReadingPipe (1, 0xAABBCCDD11LL);
      radio.openReadingPipe (2, 0xAABBCCDD22LL);
      radio.setChannel(0x60);
                         
      radio.setDataRate (RF24_250KBPS);    
      radio.setPALevel (RF24_PA_MAX);  

      radio.powerUp();
      radio.startListening();
    }
     
    void loop () {
      if(radio.available(&pipe)){
        if(pipe==1){
          radio.read( &myData, sizeof(myData) );
          Serial.print("Recieved: "); Serial.println(myData);    
          }        
        if(pipe==2){
          radio.read( &myData, sizeof(myData) );
          Serial.print("Recieved: "); Serial.println(myData);
          }        
        if(pipe==3){
          radio.read( &myData, sizeof(myData) );
          Serial.print("Recieved: "); Serial.println(myData);
          }        
        if(pipe==4){
          radio.read( &myData, sizeof(myData) );
          Serial.print("Recieved: "); Serial.println(myData);
          }
        if(pipe==5){
          radio.read( &myData, sizeof(myData) );
          Serial.print("Recieved: "); Serial.println(myData);
          }
        if(pipe==6){
          radio.read( &myData, sizeof(myData) );
          Serial.print("Recieved: "); Serial.println(myData);
          }
      }
    }
     
  2. b707

    b707 Гуру

    строчка
    Код (C++):
    radio.setAutoAck(1);
    работает только если у вас строго 1 приемник и один передатчик.
    откажитесь от использования подтверждения передачи и пробуйте без нее
     
  3. UdalovPS

    UdalovPS Нуб

    Все равно не работает. Принимает только с 1 трубы.
     
  4. parovoZZ

    parovoZZ Гуру

    всё там работает. Если нет - то кривая библиотека.