基本上,我有两个带天线的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(通信成功)永不闪烁;
有人可以帮助我让他们正确沟通并向我解释发生了什么吗?非常感谢。
这是原理图,我知道这有点不好,但是我找不到任何其他软件,对不起:
答案 0 :(得分:0)
我认为led2为何闪烁的第一件事是因为您在if(radio.available())之后使用了else块...这并不意味着它仅在收音机不工作时才起作用可用..这就是led2闪烁的原因,因为在所有其他情况下else块都在运行。 第二件事是在char数组中传输整个字符串,这是不可能的..因此,最好将字符串转换为char ...我希望它可以工作。