基本上,我有两个带有天线的nRF24,我试图让它们变得复杂。
发射机连接到一个带有外部16 16mherz时钟的单机atmega328p,接收器在arduino UNO板上。这是发送器的代码,在第8引脚上,我有一个每秒钟闪烁的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() ==是真的,这是我第一件不明白的事情;
2),当我把发射机也打开时,led2停止闪烁,什么也没发生;
3) Led1 (通信成功)从不眨眼;
有人能帮我把他们合二为一解释一下发生了什么吗?非常感谢。
这是原理图,我知道这有点糟糕,但我找不到其他软件,对不起:
发布于 2018-09-05 15:12:01
我认为led2闪烁的第一件事是因为您正在使用if(radio.available())之后的其他块.这并不意味着它只在没有收音机的情况下才能工作。这就是为什么led2闪烁的原因,因为所有其他情况下,其他块都在运行。第二件事是在char数组中传输整个字符串,这是不可能的。所以你最好把字符串转换成字符..。我希望它能起作用。
https://stackoverflow.com/questions/52130739
复制相似问题