数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 100|回复: 4

[Arduino] 简单按钮程序没必要折腾中断

[复制链接]
发表于 前天 22:16 | 显示全部楼层 |阅读模式

刚开始接触单片机,按钮总是绕不开的。开头就是一句:接个上拉电阻到Vcc。。。嗯,淘宝还贴心的推出按钮模块,尤其是那种套件里面这和烟雾传感器一样算108个模块之一。



上拉搞清楚了,那还有一个消抖问题。。。一大堆文字和实测抖动波形采集图。。。。

消抖搞清楚了,还有中断,还有 上升沿 下降沿。。。哇。。。真是博大精深呢

鼠标不是有 单击 双击 长按 释放 好多按钮事件。。。

实在脑力有富裕,还有中断嵌套。。。

最后还有 多线程,RTOS这些。。。

对简单应用来说,真的需要吗?

我只是想做个按钮,按一下有对应代码被执行而已! 就好比只想吃个蛋炒饭,要去养鸡下蛋一样的离谱。

--------------------------------------------------------------------------------------------------
下面的代码演示了几行就可以执行按钮检测,也可以增加按钮(多几个if),在主程序对延时不敏感的场合很好的实现了按钮功能。
现代单片机很多有内置上拉模式,所以电阻不需要的。
消抖?那个延时既是长按时变量的增长间隔时间,也是消抖,至于为什么,试试感受下。
实验简单到极致了: 一个arduino板子,一颗按钮。实现按一下等亮,再按一下灯灭,长按那就。。。(也可以理解为变量持续增加嘛)





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
发表于 前天 22:31 | 显示全部楼层
为什么不while(!digitRead(3));呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 22:41 | 显示全部楼层
soma 发表于 2025-8-1 22:31
为什么不while(!digitRead(3));呢

就这几行代码,你试试不就知道了。单片机是个接地气的东东,能动手实验就别只想
回复 支持 反对

使用道具 举报

发表于 昨天 15:55 | 显示全部楼层
这样的按键程序完全不合格,只能作为原理性说明。

在loop() 中使用 delay(200),会造成实时性很差,随机漏掉按键检测。
(现象表现:按键按了,但程序刚好处于delay(200)中,无法检测到按键状态变化 。)
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-3 13:20 , Processed in 0.124801 second(s), 7 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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