我的两个nRF24发生了一些奇怪的事情

时间:2018-09-01 17:50:04

标签: arduino wifi

基本上,我有两个带天线的nRF24,我正在尝试使其变得复杂。

发射器通过外部16mherz时钟链接到一个atmega328p独奏,接收器位于arduino UNO板上。这是发送器的代码,在引脚8上,我有一个LED,该LED每秒闪烁一次。

#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):当我打开接收器的电源,但发射器的led2没有开始闪烁时,radio.available()== true,这是我不了解的第一件事;

2)当我打开发射器电源时,led2也停止闪烁并且什么也没有发生;

3) Led1(通信成功)永不闪烁;

有人可以帮助我让他们正确沟通并向我解释发生了什么吗?非常感谢。

这是原理图,我知道这有点不好,但是我找不到任何其他软件,对不起:

Transmitter on the left, Receiver on the right

1 个答案:

答案 0 :(得分:0)

我认为led2为何闪烁的第一件事是因为您在if(radio.available())之后使用了else块...这并不意味着它仅在收音机不工作时才起作用可用..这就是led2闪烁的原因,因为在所有其他情况下else块都在运行。 第二件事是在char数组中传输整个字符串,这是不可能的..因此,最好将字符串转换为char ...我希望它可以工作。