csulxn 发表于 2015-4-9 17:08:57

求da神,这是什么情况?发射接收不一样

打算用3dr radio 无线通信在PC和arduino小车间传输位置信息。但发射端和接收端数据不一样。
int adr;//定义变量adr

void setup()
{
Serial.begin(9600);//设置波特率为57600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。
}
void loop()
{
if(Serial.available()>0)//查询串口有无数据
{
    adr=Serial.read();//读取PC 机发送给Arduino 的指令并赋给adr
    Serial.println(adr);
    Serial.flush();
}
}


PC不断发送1,小车端接收的是255,254什么的。

发射数据不同,接收数据也不同。发射相同数据,每次接收的数据也会有微小差别。
这是多次发送"arduino"接收到的数据:

到底怎么回事

suoma 发表于 2015-4-9 18:19:40

不断发送1,小车端接收的是255,254什么的,为什么不是一个稳定的数据?

edyd 发表于 2015-4-11 19:12:37

本帖最后由 edyd 于 2015-4-11 19:32 编辑

1、Serial.println是输出ascii码。。。
2、用Serial.println来输出一个int量,你自然看不懂了。

如果输入数据是数字,建议将串口输入的数据转换成int类型数据再以Serial.print输出,这样就能正常显示;

如果输入的数据是byte类型,输出也用byte,建议用Serial.write函数输出。

另外,看你的输入是用一个int变量来接收的,那么一次输入只能接受两个字节的数据,并且会将你以ASCII码输入的字符转换成int变量后输出,所以你看到的不一样了。

如果处理方式用字符串数组,或者string变量来弄的话,就不会有你这样的问题了,string的串口输入输出,请参考communication下面的SerialEvent例程。

edyd 发表于 2015-4-11 20:01:59

另外,我没有你的那个终端,你这个程序,arduino跟电脑自己通讯自己玩是可以的,保证内部处理方式一致,但如果是两个单独的东西(arduino和小车)的话,两机对数据的编码方式不同,则会导致你这样的情况出现。为了保证一致,建议采用ascii码进行发送和接收。

edyd 发表于 2015-4-11 20:05:30

把程序改下,发送和接收就一样了
页: [1]
查看完整版本: 求da神,这是什么情况?发射接收不一样