找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 2733 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-3-4 09:52

正文摘要:

按键不好使,有时可以响应,有时就不能相应,请教别人也不是太懂,想问一下大佬们,如何优化一下框架,使得按键可以顺利工作,控制报警值的加减

回复

ID:844772 发表于 2021-3-5 09:20
两个地方有点问题,一是,主程序中有1s的延时,这时是没法收按键的;二是,测距时下边这句,如果没有高电平,岂不是一直等待了?while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN));                  //等待高电平 。我觉得第一个问题,你可以取消延时1s,利用反复查按键代替这个延时,第二个问题是否定义一个最大等待时间,超时就退出?还有,如果用中断进按键那就都不用管了。
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:367369 发表于 2021-3-4 17:51
robinsonlin 发表于 2021-3-4 17:02
按键响应正常做,按键值用变量保存, 等到循环周期结束再更新Dis_up 不就完了。

正在跑测距程序的时候按键CPU是不知道的,CPU一直在等待超声波返回信号,这时候就算你用变量保存按键次数也得不出按键次数
ID:451718 发表于 2021-3-4 17:02
按键响应正常做,按键值用变量保存, 等到循环周期结束再更新Dis_up 不就完了。
ID:739545 发表于 2021-3-4 16:39
按键写成独立扫描吧,一个循环几个ms就跑完了。怎么可能按不到。
ID:367369 发表于 2021-3-4 15:54
没看你代码,不知道具体怎样,我说一下我的一点想法和建议
将测距内容使用一个函数封装,利用定时器设定一个时间段产生一个标志位,在main函数的while(1)中检测到该标志位再调用测距函数,同时清除标志位,把测距的CPU占用率降下来 ,
缺点:测距实时性有降低  优点:CPU有更多的时间扫描按键
或者将按键接到外部中断脚
缺点:测距时候按下按键会影响测距精度   优点:按键灵敏度达到最高

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

Powered by 单片机教程网

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