如何区分按钮的短按与长按?

描述

收到小伙伴的来信,怎样区分按钮的短按(按下后松开)与长按(按下并保持一段时间)。说实话,在工业现场,按钮长按来实现某个功能使用的并不多。我曾经在某个信号需要人工确认时使用了长按功能,当时是结合定时器与按钮的输入信号来实现的。要实现按钮的短按与长按的区分,我提供一种思路供大家参考。

 

定时器

基本思路:
 

使用沿信号配合定时器指令。如果在短时间内检测到了该信号的上升沿及下降沿,则认为按钮是短按状态;如果在某个时间内(比如2秒钟),只检测到了该信号的上升沿而没有下降沿,则认为按钮是长按状态;
 

结合这个思路我使用SCL语言实现了一个函数块FB5020_BtnClickHold,其变量声明如下图所示:

 

定时器

其中:

signal:要检测的按钮信号(或其它类似信号);

R:用于复位内部变量;

timeCheck:用于检测的时间,默认2秒;

click:按钮是短按状态;

hold:按钮是长按状态;

注:短按与长按不会同时为TRUE。为保证正确,应在获取信号后使用R对内部静态变量进行复位;

代码如下图所示:

 

定时器

这段代码我已经测试过,如果你有任何问题或其它思路,欢迎留言交流。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分