找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1486|回复: 6
收起左侧

用单片机开发板做了一个超声波测距的系统,想通过按键改变最低测距值,求大佬指点

[复制链接]
ID:888228 发表于 2021-3-4 09:52 | 显示全部楼层 |阅读模式
按键不好使,有时可以响应,有时就不能相应,请教别人也不是太懂,想问一下大佬们,如何优化一下框架,使得按键可以顺利工作,控制报警值的加减
问题.png
报警值.png
按键检测.png

超声波测距.7z

186.33 KB, 下载次数: 5

回复

使用道具 举报

ID:367369 发表于 2021-3-4 15:54 | 显示全部楼层
没看你代码,不知道具体怎样,我说一下我的一点想法和建议
将测距内容使用一个函数封装,利用定时器设定一个时间段产生一个标志位,在main函数的while(1)中检测到该标志位再调用测距函数,同时清除标志位,把测距的CPU占用率降下来 ,
缺点:测距实时性有降低  优点:CPU有更多的时间扫描按键
或者将按键接到外部中断脚
缺点:测距时候按下按键会影响测距精度   优点:按键灵敏度达到最高
回复

使用道具 举报

ID:739545 发表于 2021-3-4 16:39 | 显示全部楼层
按键写成独立扫描吧,一个循环几个ms就跑完了。怎么可能按不到。
回复

使用道具 举报

ID:451718 发表于 2021-3-4 17:02 | 显示全部楼层
按键响应正常做,按键值用变量保存, 等到循环周期结束再更新Dis_up 不就完了。
回复

使用道具 举报

ID:367369 发表于 2021-3-4 17:51 | 显示全部楼层
robinsonlin 发表于 2021-3-4 17:02
按键响应正常做,按键值用变量保存, 等到循环周期结束再更新Dis_up 不就完了。

正在跑测距程序的时候按键CPU是不知道的,CPU一直在等待超声波返回信号,这时候就算你用变量保存按键次数也得不出按键次数
回复

使用道具 举报

ID:844772 发表于 2021-3-5 09:12 | 显示全部楼层
        while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                  //等待高电平
        TIM_Cmd(TIM2, ENABLE);                                       //开启时钟
        while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                 //等待低电平
        TIM_Cmd(TIM2, DISABLE);                                           
回复

使用道具 举报

ID:844772 发表于 2021-3-5 09:20 | 显示全部楼层
两个地方有点问题,一是,主程序中有1s的延时,这时是没法收按键的;二是,测距时下边这句,如果没有高电平,岂不是一直等待了?while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                  //等待高电平 。我觉得第一个问题,你可以取消延时1s,利用反复查按键代替这个延时,第二个问题是否定义一个最大等待时间,超时就退出?还有,如果用中断进按键那就都不用管了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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