关于使用无线数传的一点心得
首先,要感谢Gxx同学{:soso_e181:} ,没有他的点拨我估计调不出来。最近在玩无线遥控小车 //好水的样子{:soso_e138:}
用的是APC220模块 //略贵,但牛B啊,亲测可穿两至三层楼板{:soso_e129:}
不过调串口可调了我好久 //囧{:soso_e141:}
我策略是这样的,先发送一个字符,比如‘L’ ‘R’神马的,作为标识 //没试过字符串,因为好像不能直接比,吧
大家估计也猜到了,那分别表示左右轮
然后再发送一个整数,其实就是给到电机驱动板en的模拟量 //也就是速度
遥控器那端是这样的 //以左轮为例
Serial.write('L');
delay(20);
Serial.write(spd);
为什么不用print()用write()呢?因为用print()在两块板之间传数据好像有点bug。我也不知道这两者具体有什么区别,好像说write()传的是字节,而print()传什么我就不知道了。总之如果用write()传0~255的整数到SerialMonitor的话,会出字符。
为什么要delay()呢?那是我心血来潮,想是要给小车那头的无线模块反应时间 //问题所在{:soso_e136:}
小车那头,刚开始是这样的
command=Serial.read(); //command is char
if(command=='L') spd=Serial.read(); //spd is int
可怎么老是出-1 啊?!
后来去查,原来,当串口没数据过来时,read()的返回值默认是-1,啊 原来如此
于是我改了一下
if (Serial.available()) command=Serial.read();
if(command=='L')
if (Serial.available()) spd=Serial.read();
这下终于有正常数据出来了,可中间怎么夹着好多2062这个数据? //虽然不多,但我給的spd明明就是在0~255之间
一气之下{:soso_e111:} ,不用无线了,之间把两块板的串口用杜邦线连起来
结果。。。所有数据都变成了2062{:soso_e153:}
这尼玛{:soso_e126:}
然后我就想不通了{:soso_e132:}
这时候Gxx同学来了 //大神啊{:soso_e179:}
他看了眼我的程序,说
“在你delay的时候,‘if (Serial.avaliable()) spd=Serial.read();’这条语句早就跑过了 ”
然后我就幡然醒悟了{:soso_e200:}
原来available()是不等人的呀{:soso_e149:}
然而当我用无线模块是,有延迟,所以会有相当多的好数据出来{:soso_e127:}
然后我就知道怎么做了{:soso_e116:}
把程序改成这样
if (Serial.available()) command=Serial.read();
if(command=='L') {
while (!Serial.available());
spd=Serial.read();
}
之后一切完美{:soso_e142:} //无线和有线都很完美
但至于为什么是2062,我真是不知道。。。
貌似还出过19XX的坏数据,记不太清了 //不是同一次烧写
顿时觉得自己弱爆了,这tm都搞不定{:soso_e135:}
不过下次就知道了,也是进步啊 //不过还是弱爆了 为什么最后几个表情出不来呢 maximus 发表于 2013-4-9 22:54 static/image/common/back.gif
为什么最后几个表情出不来呢
已经修复BUG 黑我还黑到这里来了。http://www.geek-workshop.com/static/image/smiley/default/sweat.gif
页:
[1]