textview 结束后释放_等待按键释放,你的代码如何写?

70656c00e0aa5e17624061de4e6545a0.png

今天,还是一个问题,在QQ群(300384358)里有小伙伴一直在问一个问题,如上图。一个按键控制电机的转动,按键按下后,电机转动,按键释放,电机停止,再加一个按键按下时长的检测,当按下超过5秒后,电机也得停止。也就说每次按下按键后电机转动的时间不得超过5秒,就算按键按下时时长超过5秒。

问题其实很简单,才开始的小伙伴就是没想法,其他小伙伴出谋划策后还是没解决问题,今天我们就来慢慢叨叨。

这个问题的难点一是在按键按下5秒的识别,小伙伴说了不要求精确的5秒,大概是5秒就可以了。难点二是按键释放的检测,好多小伙伴想不到办法,还是用检测按键按下的if语句,效果不佳,小代在这呢推荐大家用while循环的方式去实现,具体怎么实现呢?

往下看

直接上代码

2bfaf4ddb7afde29bf71cb0d9c6b714c.png

按键识别还是采用大家最能接受的二次检测加延时的方式,便于好理解。小代说的while循环检测按键释放,其实 就是第23行,循环结束标志是按键的状态(0或1)再做“非”运算。解释一下,从上面我们的二次检测加延时的方式能看出,按键按下去后,状态值是0,那我们再做一个“非”运算后就变成了1,相反,按键没按下的时候,“非”运算后是0,当while语句的条件变为0了,自然循环就结束了,这里说的按键没按下,其实也可以说是按键从按下到释放的这个过程。我们来捋一捋这段代码的运行,首先到了while(!KEY){}这个循环,就说明按键已经按下了,此时有两种情况,一种是最简单的,按下时间没到5秒钟,那按键释放后直接停止电机转动就好,第二种情况是按键按下时长大于等于5秒钟,这时需要在按下时长到5秒的时候,关闭电机。上面我们分析过了,按键按下以后,while(!KEY){}循环继续执行,只要按键释放,自动跳出此循环,这样一来,我就只需要在这个while循环里去检测时间有没有到达5秒钟,时间精确度又不要求太高,那我们完全可以采用简单的记录次数来实现时间的计算,在以上代码中,我假设while循环2000次的时间是5秒钟,while循环一次,对计次变量加1,完了再去检测有没有大于等于2000了,当大于等于2000了,就说明按下时间大于等于5秒钟了,此时我们需要关闭电机。当出现第一种情况,就是按下时长小于5秒钟时间,这时直接退出while循环,在循环后面紧跟着关闭电机,再把按下计次变量清零,准备下一次的按键记录。这样一来就实现对时间的记录,分情况控制。分析问题时我们做了2种情况的分析,写代码时,其实我们只是对按键释放做了识别,又在按键释放之前,做了计次的处理。这样的按键释放检测方式可以用在其他的地方比如我们的按键调整时钟时间,计算器等等。这样的检测方式也是有弊端的,第一,我们在做按键释放时候,只做了按键的检测,如果有其他实时性要求高的代码段,需要放到这里的while循环中去,比如数码管显示的动态扫描。第二,循环计次的变量,这里我定义成了uint型,最大范围是65535,当记录次数大于这个值的时候,代码就有问题了,当我们长时间的按着按键不释放,比如按着1分钟。要解决这个问题,需要我们此时好一个最长按键时间,比如10秒,只要大于我们要求的时间就好,当到记录次数大于这个值后将不再加1运算。好了,今天的问题就叨叨到这里,希望我们都有所收获。

·END·

单片机技术宅

以最简单的方式服务初学者

f2e39eea4bb1ba91595d264a662a5310.png

微信号:单片机技术宅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOC操作Bean管理XML方式(注入空值和特殊符号)

IOC操作Bean管理XML方式(注入空值和特殊符号) 目录 IOC操作Bean管理XML方式(注入空值和特殊符号) (1)通过null标签注入空值: 标签注入空值 (2)属性值中包含特殊符号…

麦克风增强软件_唱吧麦克风不会唱歌用它唱都好听,《向往的生活》同款麦克风...

当代年轻人的快乐,其实很简单。被工作狠狠虐了千百遍后,只要到KTV吼几嗓子放松一下,就又和这个世界和解了。唱歌,真的是一件解压又治愈的事情。就像《向往的生活》里,何炅、黄磊和其他嘉宾,饭后娱乐就是唱歌…

bert 多义词_广告行业中那些趣事系列15:超实用的基于BERT美团搜索实践

摘要:本篇主要学习和分析BERT在美团搜索排序中的项目实践。首先介绍了业务背景,主要对比了美团搜索业务场景和我们的应用场景;然后讲了下计算query和doc相关性的方法,主要包括计算字面相关性和计算语义相关性,重点介绍…

vba 跳到下一个循环_遍历工作薄和工作表(For Each循环的利用)

今日的内容是“VBA之EXCEL应用”的第三章“工作簿(Workbook)和工作表(Worksheet)对象(Object)”中第三节“遍历工作薄和工作表(For Each循环的利用)”。“VBA之EXCEL应用”这套教程从简单的录制宏的讲解,一直到窗体的搭建,内容丰富,案例众多。…

IOC操作Bean管理XML方式(注入外部bean)

目录 1..注入属性-外部 bean (1)创建两个类 service 类和 dao 类【分别创建两个包存放两个类】 (2)在 service 调用 dao 里面的方法 (3)(后来做法)在Spring 配置文件中进行配置 1…

数据增强 transform_深度学习-Pytorch框架学习之数据处理篇

前言数据是深度学习的核心,大部分论文里都会提到data-driven这个词,也就是数据驱动的意思。基本的模型搭建完成后,如何处理数据,如何将数据送给网络,如何做数据增强等等,对于提高网络的性能都十分重要&…

IOC操作Bean管理XML方式(注入内部 bean 和 级联赋值)

目录 1.注入属性-内部 bean (1)一对多关系:部门和员工 (2)在实体类之间表示一对多关系 (3)在Spring 配置文件中进行配置 2.注入属性-级联赋值 (1)第一种写法类似外部…

单处理机系统的进程调度动态优先_操作系统复习笔记(王道)C2.1

进程与线程一、进程特征和概念前提:允许多个程序并发执行。1.概念PCB(process control block)进程控制块,系统利用 PCB 来描述进程的基本情况和运行状 态,进而控制和管理进程。PCB是进程存在的唯一标志。进程是进程实体的运行过程&#xff0c…

非线性动力学_非线性科学中的现代数学方法:综述

Ch0【引言】本文是作者的一个总结,力图在极度繁杂的数理知识体系中摘选出那些最广泛应用的核心工具及思想。本文主要关注的问题都是非线性的、动态的。具体地讲,主要涉及的是:微分动力系统、泛函的最优化初步(但不涉及最优控制及微…

IOC操作Bean管理XML方式(注入集合类型属性)

目录 IOC操作Bean管理XML方式(注入集合类型属性) (1)首先进行环境的搭建和准备 (2)创建一个类:用来完成集合类型属性注入 (3)在Spring 配置文件进行配置 &#xff0…

matlab 最小二乘法拟合_高中数学:最小二乘法与线性回归方程

1、怎样的拟合直线最好?——与所有点都近,即与所有点的距离之和最小。最小二乘法可以帮助我们在进行线性拟合时,如何选择“最好”的直线。要注意的是,利用实验数据进行拟合时,所用数据的多少直接影响拟合的结果&#x…

预充电电路工作原理_LED触摸调光台灯控制电路板的工作原理

一款美观实用的台灯堪称书桌上的艺术品,看着书桌上精致美观的台灯,可能还会增加一些阅读的乐趣吧。那么触摸开关台灯的工作原理到底是怎么的呢?两按键触摸调光电路板工作原理:一、两按键触摸调光电路板,触摸芯片工作电压2.4-5.5V。输入也可用…

IOC操作Bean管理XML方式(FactoryBean)

目录 IOC操作Bean管理XML方式(FactoryBean) Spring 有两种类型的bean 第一种:是普通的 bean 第二种:工厂bean FactoryBean 第一步:创建类,让这个类作为工厂bean 第二步:在类中实现接口里面…

python中自定义类中的self_Python类和构造方法

1.面向对象介绍描述:是函数的一个变种,在Python中,有函数式编程和面向对象编程,java和C#之类只能把函数写到类里,没有函数式编程,所以只有面向对象,所以在Python中有了选择,可能就变得有点麻烦,但是在Python里,函数式编程是可以完成所有的功能的,人都是想把事情变得…

激光slam_机器人主流定位技术,激光SLAM与视觉SLAM谁更胜一筹

定位技术是机器人实现自主定位导航的最基本环节,是机器人在二维工作环境中相对于全局坐标的位置及其本身的姿态。目前SLAM (Simultaneous Localization and Mapping,即时定位与地图构建)是业内主流的定位技术,有激光SLAM和视觉SLAM之分。什么…

IOC操作Bean管理XML方式(bean的作用域)

目录 IOC操作Bean管理XML方式(bean的作用域) 1.在Spring 里面,设置创建 bean 实例是单实例还是多实例的方式 (1)在Spring 配置文件bean 标签里面有属性(scope)用于设置单实例还是多实例 &am…

bucket sort sample sort 并行_双调排序Bitonic Sort,适合并行计算的排序算法

双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU、fpga来计算。1、双调序列在了解双调排序算法之前,我们先来看看什么是双调序列。 双调序列是一个先单调递增后单调递减&#x…

边缘检测后去除噪点_修图前vs修图后,原来那些网红“照骗”都是这样修出来的!...

如今手机上有许多功能强大的后期app都能帮助我们轻松实现一键修图我们也经常可以在网上看到各路大神们各显神通的手机修图作品无论是风景、人像还是创意修图前和修图后对比强烈、美若两图看到这里你是否想问为什么同样是用手机修图别人修的图总是比我好看到底是哪里出错了呢&am…

IOC操作Bean管理XML方式(bean 的生命周期)

目录 IOC操作Bean管理XML方式(bean 的生命周期) 1.bean 的生命周期(在单例模式下的生命周期) (1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象) (2&…

springboot listener_Springboot 全套面试提升宝典,为金三银四冲刺

简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发…