Не получается настроить связь через nrf24l01

Тема в разделе "Arduino & Shields", создана пользователем pasha228, 7 фев 2022.

  1. pasha228

    pasha228 Нуб

    Здравствуйте, у меня две платы Arduino Uno, подключенный к одному компьютеру, хочу настроить связь между ними через nRF24L01. На передатчике ввожу символ, на приемнике его получаю. Проблема в том, что первый символ передается хорошо, а дальше данные теряются, но когда начинаю "спамить" в передатчик на приемнике, условно через раз, данные начинают появляться. Также заметил, что если передавать несколько символов, то первый не передается, а последующие передаются. Подскажите, в чем проблема?
    КОД ПЕРЕДАТЧИКА:
    Код (C++):
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"
    RF24 radio(9, 10);


    byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};


    void setup() {
    Serial.begin(9600);

    radio.begin();
    radio.setAutoAck(0);
    radio.setRetries(0, 15);
    radio.enableAckPayload();
    radio.setPayloadSize(32);

    radio.openWritingPipe(address[0]);
    radio.setChannel(0x60);

    radio.setPALevel (RF24_PA_MAX);
    radio.setDataRate (RF24_250KBPS);


    radio.powerUp();
    radio.stopListening();
    }

    void loop() {

    if (Serial.available() > 0){
    char counter = Serial.read();
    radio.write(&counter, sizeof(counter));
    Serial.print("Sent: ");
    Serial.println(counter);


    }

    }

     
    КОД ПРИЕМНИКА:
    Код (C++):
    #include <SPI.h>
    #include "nRF24L01.h"
    #include "RF24.h"

    RF24 radio(9, 10);
    //RF24 radio(9,53);

    byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

    void setup() {
    Serial.begin(9600);
    radio.begin();
    radio.setAutoAck(0);
    radio.setRetries(0, 15);
    radio.enableAckPayload();
    radio.setPayloadSize(32);

    radio.openReadingPipe(1, address[0]);
    radio.setChannel(0x60);

    radio.setPALevel (RF24_PA_MAX);
    radio.setDataRate (RF24_250KBPS);

    radio.powerUp();
    radio.startListening();
    }

    void loop() {

    byte pipeNo;
    char gotByte;
    while (radio.available(&pipeNo)) {
    radio.read(&gotByte, sizeof(gotByte));
    Serial.print("Recieved: ");
    Serial.println(gotByte);
    }
    }
     
    Последнее редактирование модератором: 7 фев 2022
  2. User248

    User248 Гик

    Замените Serial.read() на Serial.readString(). Учтите, что там ещё Enter передаётся в конце, код '\n'.
     
    Последнее редактирование: 7 фев 2022
  3. b707

    b707 Гуру

    плохой совет, со стрингом и работать надо иначе.
    Да и процедура readString() - одна из самых неоднозначных а Ардуино. начинающим я бы советовал считать. что ее нет. Ну а опытные и сами ее не используют :)
    По коду ТС должны откправляться лишние символы. а не теряться.
     
  4. Рокки1945

    Рокки1945 Гуру

    может всё дело в char - это же один байт - а передавать необходимо массив байтов
     
  5. Рокки1945

    Рокки1945 Гуру

    попробуйте в программе сделать так - если символ вами вводимый в сериал равен '&' Амперсанд - то radio.write("GOBABYGO!") - так Вы хоть убедитесь, что радиомодуль норм
     
  6. parovoZZ

    parovoZZ Гуру

    В соседней большой теме я уже давал совет по поводу этого модуля. Модуль не простой - для начала необходимо изучить документацию на него, чтобы понимать принцип передачи информации.
     
  7. Airbus

    Airbus Радиохулиган Модератор

    Дак ведь есть тема на Форуме Побеждаем модуль nrf24
     
  8. pasha228

    pasha228 Нуб

    Скиньте ссылку, пожалуйста