nRF24L01 не общается

Я использовал два nRF24L01 для связи друг с другом с помощью простой платы Arduino Uno. Это работало 5 дней, и теперь внезапно это работает. Я пробовал менять модули и платы Arduino, но даже если попробовать простой пример, связь между ними не происходит.

Я все гуглил и перепробовал все варианты, но ничего не работает.

Я использовал printDetails() для проверки конфигурации модулей. Он показывает, что все в порядке, но я не могу понять, проблема в передатчике или приемнике. Пожалуйста, помогите мне решить эту проблему. Также как убедиться, что оба работают (какая-нибудь отладочная техника)?

Я пробую это уже 9 дней и очень хочу, чтобы это сработало.

Код, который я использую, очень простой. В нем нет никаких ошибок.

Код получателя:

#include <SPI.h>
#include <nRF24L01.h> 
#include <RF24.h>

RF24 radio(7, 8); // ЦНС, CE
String response;
boolean done = false;

void setup() {
  delay(500);
  Serial.begin(9600);
  radio.begin();
  radio.setPALevel(RF24_PA_MIN);
  radio.openReadingPipe(0,0xF0F0F0F0AA);
  radio.startListening();
}

void loop() {
  if (radio.available()) {
    radio.read(&response, sizeof(response));
    done = true;
  }
  if (done) {
    Serial.println(response);
  }
  done = false;
  delay(1000);
}

Код отправителя:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8); // CNS, CE
String request;

void setup() {
  delay(500);
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(0xF0F0F0F0AA);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}

void loop() {
  while (Serial.available() > 0) {
    request = Serial.readString();
    Serial.println(request);
    radio.write(&request, sizeof(request));
    delay(1000);
  }
}

, 👍1

Обсуждение

Вам необходимо отредактировать этот вопрос и включить сюда также вывод printDetails(), ваших слов «все в порядке» недостаточно., @Avamander

Здесь нельзя использовать класс String. Следует использовать char[ ]. Оператор & и оператор sizeof при использовании с объектом String ссылаются на дескриптор объекта., @6v6gt


2 ответа


1

Привет,
Вам необходимо установить канал для обоих NRF:

void setup() {
   delay(500);
   Serial.begin(9600);
   radio.begin();
   radio.setChannel(0x55); //установить канал
   radio.openWritingPipe(0xF0F0F0F0AA);
   radio.setPALevel(RF24_PA_MIN);
   radio.stopListening();
   radio.powerUp(); //Включаем радио
}

Измените это.

void loop() {
    if (radio.available()) {
        radio.read(&response, sizeof(response));
        done = true;
    }
    if (done) {
        Serial.println(response);
        done = false;
    }
    //done = false;
    delay(1000);
}
,

0

Возможно, вам следует проверить блок питания. Если он проработал 5 дней, то с вашими платами и модулем все должно быть в порядке. Если он больше не работает, то это может быть сломанная плата, сломанный модуль или блок питания.

,