无法使用 Arduino Uno 使用 RF 433 MHz 发射器发送消息
Cannot send a message with the RF 433 MHz transmitter using Arduino Uno
首先,我是Arduino的初学者。我有一个电路,包括:Arduino Uno、RFID RC522 卡 reader 和来自 RF 433 MHz 模块的发送器。
我正在尝试使用 RF 433MHz 发送器传输 RFID 卡的 ID 码,但它不起作用。首先,我正在读取卡片,然后将 RFID 代码组成一个字符串,例如 "18016518623564"
.
使用下面的代码,我无法读取 RFID 卡。 (串行监视器上什么也看不到。)这似乎是 vw_setup(2000);
的问题。如果我注释掉它,我可以阅读一次代码。如果我也注释掉vw_wait_tx();
,我可以把代码读两遍。如果我也注释掉 send("1");
,我可以无限次地阅读代码。但是,无论我做什么,都无法发送(程序停止在vw_wait_tx();
)。
请问有人能帮我解决问题并能把RFID码发给收件人吗?
代码如下:
// includes for RFID
#include <SPI.h>
#include <RFID.h>
// includes for RF communication
#include <VirtualWire.h>
// defines for RFID
#define SS_PIN 10
#define RST_PIN 5
// variables for RFID
RFID rfid(SS_PIN, RST_PIN);
int serNum[5]; // array to store the RFID code
String rfid_string; // variable to store the concatenated card identifier
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.init();
// initialize the IO and ISR for RF
vw_setup(2000); // Bits per sec
}
void loop() {
read_and_compose_rfid_code(); // read and compose the rfid code into one string
send("1"); // send 1 throug RF - just for testing
delay(1000);
}
void read_and_compose_rfid_code (void) {
if (rfid.isCard()) {
// check if rfid card is present nearby to the sensor antenna
if (rfid.readCardSerial()) {
// read card identifier into array defined in RFID class
// concatenate the card identifier as one string
rfid_string = String(rfid.serNum[0]) + String(rfid.serNum[1]) + String(rfid.serNum[2]) + String(rfid.serNum[3]) + String(rfid.serNum[4]);
Serial.print(rfid_string); // test to see if the code is properly composed
Serial.println();
}
rfid.halt();
delay(1000); // set a delay of 1 second before the next card read
}
}
/* function used to send the card identifier through RF */
void send (char *message) {
vw_send((uint8_t *)message, strlen(message));
// "message" is an array of the bytes to send, and strlen(message) is the number of bytes stored in the array
vw_wait_tx(); // wait until the whole message has been transmitted
}
经过多次尝试,我找到了解决办法。
如果我在 SPI 和 rfid 之前初始化 RF (vw_setup(2000);
),我可以读取卡并发送消息。我不知道它为什么有效,但它确实有效。也许有人可以解释一下。
首先,我是Arduino的初学者。我有一个电路,包括:Arduino Uno、RFID RC522 卡 reader 和来自 RF 433 MHz 模块的发送器。
我正在尝试使用 RF 433MHz 发送器传输 RFID 卡的 ID 码,但它不起作用。首先,我正在读取卡片,然后将 RFID 代码组成一个字符串,例如 "18016518623564"
.
使用下面的代码,我无法读取 RFID 卡。 (串行监视器上什么也看不到。)这似乎是 vw_setup(2000);
的问题。如果我注释掉它,我可以阅读一次代码。如果我也注释掉vw_wait_tx();
,我可以把代码读两遍。如果我也注释掉 send("1");
,我可以无限次地阅读代码。但是,无论我做什么,都无法发送(程序停止在vw_wait_tx();
)。
请问有人能帮我解决问题并能把RFID码发给收件人吗?
代码如下:
// includes for RFID
#include <SPI.h>
#include <RFID.h>
// includes for RF communication
#include <VirtualWire.h>
// defines for RFID
#define SS_PIN 10
#define RST_PIN 5
// variables for RFID
RFID rfid(SS_PIN, RST_PIN);
int serNum[5]; // array to store the RFID code
String rfid_string; // variable to store the concatenated card identifier
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.init();
// initialize the IO and ISR for RF
vw_setup(2000); // Bits per sec
}
void loop() {
read_and_compose_rfid_code(); // read and compose the rfid code into one string
send("1"); // send 1 throug RF - just for testing
delay(1000);
}
void read_and_compose_rfid_code (void) {
if (rfid.isCard()) {
// check if rfid card is present nearby to the sensor antenna
if (rfid.readCardSerial()) {
// read card identifier into array defined in RFID class
// concatenate the card identifier as one string
rfid_string = String(rfid.serNum[0]) + String(rfid.serNum[1]) + String(rfid.serNum[2]) + String(rfid.serNum[3]) + String(rfid.serNum[4]);
Serial.print(rfid_string); // test to see if the code is properly composed
Serial.println();
}
rfid.halt();
delay(1000); // set a delay of 1 second before the next card read
}
}
/* function used to send the card identifier through RF */
void send (char *message) {
vw_send((uint8_t *)message, strlen(message));
// "message" is an array of the bytes to send, and strlen(message) is the number of bytes stored in the array
vw_wait_tx(); // wait until the whole message has been transmitted
}
经过多次尝试,我找到了解决办法。
如果我在 SPI 和 rfid 之前初始化 RF (vw_setup(2000);
),我可以读取卡并发送消息。我不知道它为什么有效,但它确实有效。也许有人可以解释一下。