搜索
bottom↓
回复: 8

新手请教超声波测距问题,我找的程序改出来后只能测量一次距离,不能一直测距,求指导

[复制链接]

出0入0汤圆

发表于 2011-8-29 22:40:01 | 显示全部楼层 |阅读模式
如题、、、

超声波模块使用的是HC-SR04

超声波测距模块说明及源程序ourdev_672314UFSWMZ.zip(文件大小:251K) (原文件名:超声波测距.zip)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-8-29 22:43:36 | 显示全部楼层
还有个问题就是测距有时不太稳定。
读不出数来、、、
求大神指导
谢谢

出0入0汤圆

发表于 2011-9-16 12:36:28 | 显示全部楼层
没用定时器或者看门狗定时采集啊。。。
比如这样
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
//interrupt[WDT_VECTOR] void watchdog_timer(void)
{ cont=cont+1;  
  xxx();//需要定时采集的变量
    _NOP();
     
}
通过看门狗定时采集超声波的数据,或者这样:
void SysClkInit(void) //系统时钟设置 MCLK=SMCLC=8MHz
{
  SCFI0 |= FN_4;                  // x2 DCO 频率, 设DCO为8MHz  
  SCFQCTL = 121;                  // (121+1) x 32768 x 2 = 7.99 Mhz
  FLL_CTL0 = DCOPLUS + XCAP18PF;  // DCO+ 设定频率= xtal x D x N+1
}

void init_TA(void)
{
  TACTL=TASSEL_2+MC_0+TACLR; //Ta时钟源选择为8MHz
  TACCTL1=CM_1+CCIS_0+SCS+CAP+CCIE;//TA初始状态检测是否为上升沿
  TACTL|=ID_2+MC_2;
}

void init_IO(void)
{
  P1SEL|=BIT2;  //选择捕获触发角CCI1A,模块控制端Echo-->P1.2
  P2DIR|=BIT0;  //控制端引脚设为输出
}

void main(void)
{
  WDTCTL=WDTHOLD+WDTPW;
  SysClkInit();
  init_IO();
  init_TA();
  _EINT();

出0入0汤圆

发表于 2013-3-29 15:31:13 | 显示全部楼层
有用Atmega8芯片来做的吗?能不能给个程序啊?

出0入0汤圆

发表于 2013-4-15 14:32:52 | 显示全部楼层
568581185 发表于 2011-8-29 22:43
还有个问题就是测距有时不太稳定。
读不出数来、、、
求大神指导

软件滤波,有效。别人指点给我的,我试了,管用

出0入0汤圆

发表于 2013-4-22 14:35:43 | 显示全部楼层
xymyan 发表于 2011-9-16 12:36
没用定时器或者看门狗定时采集啊。。。
比如这样
#pragma vector=WDT_VECTOR

他不是在一个大循环里面运行的吗? 为什么还要定时采集?我现在是可以实时采集了,但一旦超过某个范围,程序就死了?这是为什么?求大神解答。。

出0入0汤圆

发表于 2013-4-22 14:43:31 | 显示全部楼层
rengf3134 发表于 2013-4-15 14:32
软件滤波,有效。别人指点给我的,我试了,管用

本人新手,目前还在纠结这个程序啊。。。我参考的是这份程序 ,可以测距 ,但超过范围了 程序就死了?求大神解释  同求大神发一份源码啊。。1719866259@qq.com

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-4-23 10:15:12 | 显示全部楼层
本帖最后由 rengf3134 于 2013-4-23 10:21 编辑
ljc2012 发表于 2013-4-22 14:43
本人新手,目前还在纠结这个程序啊。。。我参考的是这份程序 ,可以测距 ,但超过范围了 程序就死了?求 ...


我没有装能够打开你这个程序的软件,我用的是低功耗的单片机来控制超声波。不知道楼主是不是开启超声波后,程序一直处于while(!RX);我建议你多加一个条件,比如while((!RX)&&(timeout == 0));在你开启超声波检测时同时开启一个定时器定时个0.5秒或者1秒,时间到让timeout =1;这样一次检测就算结束。
把多次测得的数据放到数组里,然后排序,我取的是中间的一个值作为测量结果,基本上没有误报的现象。希望有所帮助。另外给你的例程的测距公式也未必准确,还需要通过实测把数据导入到excel里,修正一下距离公式,这样就准确许多了。

出0入0汤圆

发表于 2013-4-23 11:11:06 | 显示全部楼层
话说楼主这个题解决了没啊?不知道为什么 ,检测到低电平之后,程序就停在那了。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 08:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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