最近在使用arduino蓝牙透传遥控自己的步进电机发时候现很奇怪,预定的电机转动延时没有正常执行,电机一卡一卡,感觉延时设定失效了。
直接说结论:用虚拟串口 配合时间中断 onetime库。
遗留问题:第二字节后开始走丢失不稳定问题,只能稳定接受一个字节(正在解决中)。
debug过程:
1.换不用Serial的其他代码,电机转动正常。~~硬件,连线正常.
2.换显示屏接受数据,正确显示数据,串口接收正常.
3.尝试使用arduino内建硬件中断,逻辑发现冲突……serial的tx口是高速传输无法支撑整合硬件中断(逻辑不符合)
4.偶然逛油管发现有第三方arduino时间中断库,果断测试,发现对原有步进电机脉冲延时无明显影响。程序可以正常跑
5.尝试用虚拟串口接收struct结构数据 发现因为虚拟串口没有缓存,数据除了第一字节,后面多多少少有问题(用硬件Serial无这种问题),一定程度上加高中断频率可改善,但效果不明显。(怀疑是数据尾端空跟0有混淆或者中断机制导致数据不完整)
总结:用蓝牙透传方式遥控一个需要连续运转的部件需要考虑硬件串口会有中断(且串口数据读取对主进程影响明显,就算没有发送数据也会有影响),而虚拟串口可以避免这种影响,但是传送数据可靠性低。
网友评论