今天我收到了一些很酷的无线电接收器和发射器,问题是当我输入要发送的消息时,它会在另一个arduino上吐出gibbirish。
//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”这很奇怪,因为我总是得到相同数量的字符而不是我想要的实际字符
答案 0 :(得分:0)
所以我本身没有答案,因为我不知道它会有所帮助,但我注意到你的代码中存在一些怪癖。
我注意到您在接收器中为OUTPUT
配置了引脚,但您希望它充当接收器。我对Arduino硬件及其配置不够熟悉,但请确保将其设置为OUTPUT
不会影响其由发送器驱动的能力。可能发生的事情是线路上存在争用 - 您的发送器正在发送数据,但接收器正在尝试保持线路LOW
,从而导致垃圾数据(您传输的字符数相同) !)。
此外,根据发布的样本here,您似乎需要在两种情况下都定义发送启用引脚。看起来该库具有中断服务例程,该例程依赖于该PTT线来指示传输的开始。这可能会导致很多问题,可能依赖于PTT中断发送或接收信号,尤其是涉及流量控制时。
最后,示例代码在发送更多数据之前使用vw_wait_tx()
函数调用。在尝试进行另一次TX操作之前,您只需要等待50ms,这可能不足以让发送器完成发送任何数据。我不知道库的具体实现,但我肯定会使用此函数来确保您不会尝试发送比端口可以处理的更多数据。