小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
12
返回列表 发新帖
楼主: cjnt007

【求助】关于超声波测距代码

[复制链接]
发表于 2012-8-1 22:17:56 | 显示全部楼层
cjnt007 发表于 2012-8-1 21:15
liuviking你好!经过测试,你所发布的驱动板超声波代码,main.c中的Get_Distance()函数与timer.c中的函 ...

非常感谢你的认真!虽然目前我的程序暂未发现工作异常,但是我初步确认这里确实是可能产生死锁,目前已经将BUG提交给驱动组了,他们将及时给出修正方案。
再次衷心感谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-2 08:45:51 | 显示全部楼层
哈哈,谢谢鼓励,有点小成就感哦
回复 支持 反对

使用道具 举报

发表于 2012-8-2 21:27:20 | 显示全部楼层
cjnt007 发表于 2012-8-2 08:45
哈哈,谢谢鼓励,有点小成就感哦

今天专门把代码发给了驱动组的兄弟,他们分析后说是这样的:原来的代码,如果在50cm厘米范围内,那么getDistance函数里面的计数器会在到达定时器1中断之前就清零了寄存器,这样,timer1的中断服务程序是永远不会执行的,超过了50cm之后,会进入中断,但是这个时候不再获取雷达数据了。所以源程序也是没问题的。你是否修改过计数变量的值?导致在获取距离函数中,有可能还没来得及清0就进入了定时器1的中断?如果是这样的话那确实是会互相影响的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-3 09:59:38 | 显示全部楼层
liuviking 发表于 2012-8-2 21:27
今天专门把代码发给了驱动组的兄弟,他们分析后说是这样的:原来的代码,如果在50cm厘米范围内,那么getD ...

谢谢liuviking的关注!看了你的反馈,基本理解原代码的设计思路,我再把我的情况说一下。
我一开始是没有修改代码,直接使用你在论坛上提供的固件,把驱动板通过TTL2USB小板连接到电脑上进行测试,串口助手接收到的信息一直是ff 03 00 00 ff。

后来获得了右手谈情提供的固件,据他说超声波测距代码部分没有修改过,但修改过其他地方。拿他的固件刷上去之后进行测试,结果情况还是一样,一直返回ff 03 00 00 ff。

再之后,我自己尝试修改代码:
主要就是把 Get_Distance(void)函数中的
while(TH1<250 && Echo!= 1);
if(TH1 <= 250)
这两句中的常量250修改为2000(根据你的说明,这个常量应该就是用来规避计时器中断服务程序的吧?)
另外把timer.c中的Timer_1(void) interrupt 3函数内部的代码注释掉了。
如此,我测试中可以得到准确稳定的返回值。
按照你们的设计思路,按说应该没有问题,但不知为什么会这样?
回复 支持 反对

使用道具 举报

发表于 2015-6-5 13:22:09 | 显示全部楼层
学习,收藏下
回复 支持 反对

使用道具 举报

发表于 2017-1-21 08:00:15 | 显示全部楼层
新手 正在试验超声波测距,学习了。
回复 支持 反对

使用道具 举报

发表于 2017-3-27 15:03:27 | 显示全部楼层
谢谢老师分享,顶一个!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 00:16 , Processed in 1.112890 second(s), 16 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表