使用 433 mhz 发射器/接收器从一个 arduino 向另一个发送消息
Posted
技术标签:
【中文标题】使用 433 mhz 发射器/接收器从一个 arduino 向另一个发送消息【英文标题】:Sending a message from one arduino to the other using 433 mhz transmitter/receiver 【发布时间】:2014-08-26 05:47:57 【问题描述】:今天我得到了一些很酷的无线电接收器和发射器,问题是当我键入要发送的消息时,它会在另一个 arduino 上吐出乱码。
//transmitter
#include <VirtualWire.h>
void setup()
Serial.begin(9600);
vw_set_ptt_inverted(true);
vw_setup(3000);
vw_set_tx_pin(7);
void loop()
String inData;
while(Serial.available())
char recieved = Serial.read();
inData += recieved;
char bits[inData.length()];
Serial.print(":");
Serial.print(inData);
for(int i=0;i<inData.length();i++)
bits[i] = inData.charAt(i);
vw_send((uint8_t *)bits[i], 1);
inData = "";
delay(50);
//下面是接收器!
#include <VirtualWire.h>
void setup()
vw_set_ptt_inverted(true);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
Serial.begin(9600);
vw_setup(3000);
vw_set_rx_pin(7);
vw_rx_start();
void loop()
uint8_t buflen = VW_MAX_MESSAGE_LEN;
uint8_t buf[buflen];
if(vw_get_message(buf, &buflen))
for(int i = 0;i < buflen;i++)
char c = buf[i];
Serial.println(c,DEC);
delay(50);
所以如果我输入“hello”,在另一个串口上我会看到“0 53 0 0 2”,这很奇怪,因为我总是得到相同数量的字符,但不是我想要的实际字符.
【问题讨论】:
您只能在验证确实收到消息后调用 vw_get_message()。使用 vw_have_message() 或 vw_wait_rx() 或 vw_wait_rx_max() 【参考方案1】:所以我本身没有答案,因为我不知道这会有所帮助,但我注意到您的代码中有一些怪癖。
我注意到您在接收器中为OUTPUT
配置了引脚,但您希望它充当接收器。我对 Arduino 硬件及其配置不够熟悉,但请确保将其设置为 OUTPUT
不会影响其由发射器驱动的能力。可能发生的情况是线路上存在争用 - 您的发送器正在发送数据,但接收器试图保持线路LOW
,导致垃圾数据(与您传输的字符数相同!) .
此外,根据here 发布的示例,您似乎需要在这两种情况下定义传输启用引脚。看起来库有一个中断服务程序,它依赖于 PTT 线来指示传输的开始。这可能会给依赖 PTT 中断发送或接收信号的任何一端带来很多问题,尤其是在涉及流量控制的情况下。
最后,示例代码在发送更多数据之前使用了vw_wait_tx()
函数调用。在尝试执行另一个 TX 操作之前,您只需等待 50 毫秒,这可能不足以让发送器完成发送它拥有的任何数据。我不知道该库的具体实现,但我肯定会使用此功能来确保您不会尝试发送超出端口可以处理的数据。
【讨论】:
以上是关于使用 433 mhz 发射器/接收器从一个 arduino 向另一个发送消息的主要内容,如果未能解决你的问题,请参考以下文章
通过 VirtualWire (433MHz) 发送 Int