Что-то странное происходит с моими двумя nRF24 - PullRequest
0 голосов
/ 01 сентября 2018

По сути, у меня есть два nRF24 с антеннами, и я пытаюсь заставить их общаться.

Передатчик подключен к сольному atmega328p с внешними часами 16 МГц, приемник на плате Arduino UNO. Это код для передатчика, на выводе 8 у меня есть светодиод, который мигает каждую секунду.

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

RF24 radio(7,8); //CE - CSN

const byte address[6] = "00001"; //Pipe

void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);
  radio.stopListening();
}

void loop() {
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(1000);
  const char text[] = "nrftest";
  radio.write(&text, sizeof(text));
}

А вот код для получателя:

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

RF24 radio(7,8); //CE - CSN

const int led1 = 5;
const int led2 = 3;
const byte address[6] = "00001";

void setup() {
  // put your setup code here, to run once:
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  radio.begin();
  radio.openReadingPipe(1,address);
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);
  radio.startListening();
}

void loop() {
  char text[32] = "";
  String transData = "Yolo";
  if (radio.available()) {
    radio.read(&text, sizeof(text));
    transData = String(text);
    if (transData == "nrftest") {
        digitalWrite(led1, HIGH);
        delay(500);
        digitalWrite(led1, LOW);
        delay(500);
      }    
    else{
      digitalWrite(led2, HIGH);
      delay(500);
        digitalWrite(led2, LOW);
        delay(500);
      }
  }
}

Теперь вот что происходит:

1) Когда я включаю приемник, но индикатор передатчика 2 не начинает мигать, поэтому radio.available () == true, это первое, что я не понимаю;

2) При включении питания передатчик тоже светодиод2 перестает мигать и ничего не происходит;

3) Led1 (сообщение успешно) никогда не мигает;

Может ли кто-нибудь помочь мне заставить их общаться должным образом и объяснить, что происходит? Большое спасибо.

Это схемы, я знаю, что это довольно плохо, но я не смог найти другое программное обеспечение, извините:

Передатчик слева, Приемник справа

1 Ответ

0 голосов
/ 05 сентября 2018

Первое, что я считаю, почему led2 мигает, потому что вы используете блок else сразу после if (radio.available ()) ... это не значит, что он будет работать только тогда, когда радио не доступно .. именно поэтому led2 мигает, потому что блок else работает для всех остальных случаев. Во-вторых, вы передаете целую строку в массиве символов, что невозможно ... поэтому вам лучше преобразовать строку в символ ... Надеюсь, это сработает ..

...