首頁>Raspberry Pi>source

我正在用C ++在樹莓派零上建立一个專案,並在PIC18F26Q10上建立C,其中多个PIC將傳感器資料傳輸到樹莓派。 两種設備都可以相互發送和接收資料.我的問题是將成為PRX設備的樹莓派只能在資料管道0和1上接收資料。將資料發送到任何其他資料管道会匯致PIC端發生最大重試中斷.我能够成功地將所有資料管道地址傳輸到PIC,但是PIC仅具有資料管道0,並且啟用了對資料管道0的自動確认。 我已经啟用了EN_RXADDR寄存器中的所有資料管道,還啟用了EN_AA_REG寄存器中的所有資料管道的自動確认。

我缺少啟用資料管道2到5的設置或详细資訊吗?

我正在使用C ++和PIGPIO庫来控製GPIO。

我的資料管道在頭檔案中的定義為:

char channelP0[5] = { 0xE7, 0xE7, 0xE7, 0xE7, 0xE7 };
char channelP1[5] = { 0xC2, 0xC2, 0xC2, 0xC2, 0xC2 };
char channelP2[5] = { 0xC2, 0xC2, 0xC2, 0xC2, 0xC3 };
char channelP3[5] = { 0xC2, 0xC2, 0xC2, 0xC2, 0xC4 };
char channelP4[5] = { 0xC2, 0xC2, 0xC2, 0xC2, 0xC5 };
char channelP5[5] = { 0xC2, 0xC2, 0xC2, 0xC2, 0xC6 };

上面的代碼塊對於PIC18F26Q10和RAspberry pi都是相同的。

這是我的初始化代碼:

int NRF24L10::Initialize(int channel)
{
    if (handle < 0)     //If already open, ignore and return -1.
    {
        gpioWrite(NRF24_CE, 0);
        handle = spiOpen(channel, 100000, 0);
        WriteRegister(CONFIG_REG, 0x0D);    // RX, TX & Max Retry interrupt enabled, PRX mode, Power Down, 2 byte CRC
        WriteRegister(EN_RXADDR_REG, 0x3F); // Enable all data pipe RX addresses
        WriteRegister(EN_AA_REG, 0x3F); // Enable auto acknowledge for all data pipes
        Powerup();
        WriteRegister(SETUP_AW_REG, 0x03);
        WriteRegister(SETUP_RETR_REG,0xF3 );
        WriteRegister(SETUP_AW_REG, 0x03);
        WriteRegister(SETUP_RETR_REG, 0xF3);
        WriteRegister(RF_CH_REG, 0x50);     // Set to 2480Mhz, outer edge of chanel 13 but still within legal limits
        WriteRegister(RF_SETUP_REG, 0x02);  // Set gain low for testing.
        WriteRegister(STATUS_REG, 0x70);
        Activate();                         // Enable R_RX_PL_WID
        WriteRegister(DYNPD_REG, 0x3F);     // Enable dynamic data width on all datapipes
        WriteRegister(FEATURE_REG, 0x04);   // Enable dynamic data width feature
        WriteRegisterBytes(RX_ADDR_P0_REG, channelP0, 5);
        
        WriteRegisterBytes(RX_ADDR_P1_REG, channelP1, 5);
        
        WriteRegister(RX_ADDR_P2_REG, channelP2[4]);
        WriteRegister(RX_ADDR_P3_REG, channelP3[4]);
        WriteRegister(RX_ADDR_P4_REG, channelP4[4]);
        WriteRegister(RX_ADDR_P5_REG, channelP5[4]);        
        FlushRX();
        FlushTX();
        PRXmode();
        return handle;
    }
    else
    {
        return -1;
    }
}
最新回復
  • 5月前
    1 #

    我為lg庫添加了NRF24示例。

    也许看看是否可以根据您的需要更改C示例之一。

    本地C NRF24

    本地和遠端C NRF24

  • pi 4:無法使用我的Raspberry Pi-"警告:遠端主機標識已更改!"
  • Raspberry Pi Imager失败後SD卡不再可讀