0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过1个Arduino引脚访问5个按钮

454398 来源:wv 2019-09-10 15:37 次阅读

第1步:零件清单

1 x Arduino(或Arduino兼容板。我使用来自moderndevice.com的BBB)

1 x 100K电阻(棕黑黄)

1 x 1K电阻(棕黑红)

1 x 10K电阻(棕色黑色橙色)

1 x 22K电阻器(红色红色橙色)

1 x 33K电阻器(橙色橙色橙色)

1 x 68K电阻器(蓝色灰色橙色)

5 x按钮开关

面包板

一些连接它的电线

第二步:理论 - 快速回顾

如何通过1个Arduino引脚访问5个按钮

《我建议您阅读上一个Instructable的第2步和第3步了解详细信息,但是如果你很懒(嗯,我很忙),我会给你一个快速的回顾。

通常的方法读取按钮是将其连接到数字输入引脚和5V。当您按下按钮时,输入引脚连接到5V,您可以读取引脚上的逻辑高电平。

对于Arduino的模拟引脚,您可以根据引脚上的电压读取介于0和1023之间的值。 。如果有0V,则读取0,如果有5V,则读取1023.中间的每个电压将根据实际电压返回一个比例值。从此可以看出,可以连接多个按钮模拟引脚,如果你可以让每个模块引脚连接不同的电压到模拟引脚。

事实证明,这很简单。您只需为每个按钮设置不同的分压器。我将告诉你如何。

如果看一下威廉希尔官方网站 ,当按钮打开时,R1充当下拉电阻,但当(例如)S4按钮关闭时,电流从5V流过R5,通过按钮,通过R1和地面。 IO引脚将测量S4(或R5)与R1之间的电压 - AKA由R1和R5形成分压器。通过使用欧姆定律,我们可以计算出我们将在IO引脚上读取大约2.75V或大约562.

PS:如果其中任何一个不清楚,你应该真正阅读以前的Instructable - 我会进入更多详情。另请参阅上面关于分压器维基百科页面的链接。

步骤3:面包板

您现在可以在面包板上构建上一个威廉希尔官方网站 。如果你看看前面的威廉希尔官方网站 和我的面包板,你会注意到我使用了不同的电阻器。只要你记住一些事情,电阻就不是很关键。

首先,分压器中两个电阻之间的差异越大,值越接近地或者输入电压。

第二点是连接到按钮的电阻值越接近,它们之间的差异越小,这可能使得难以读取唯一值。

所以,我要做的主要是威廉希尔官方网站 的变化是使R1成为47K电阻。通过使下拉电阻与范围中间的值相同,您将获得最大的读数范围。

在之前的Instructable中,我提到我有一些坏按钮,而且有些读数已经全部结束了这个地方。我猜测电动车和坏按钮等。..。..事实证明,这是一个糟糕的面包板。我正在使用两块面包板,我已经使用了超过10年,似乎有些地方不再有良好的接触了。我订购了新的面包板,但我还在等。如果您的读数不一致,请尝试将按钮移动到面包板上的其他位置。

步骤4:获取必要读数

下一步是获取您需要检查按下哪些按钮的值。下载附加的草图,并按照上一步中的威廉希尔官方网站 设置运行它。将草图上传到威廉希尔官方网站 板后打开串行监视器,然后按住按钮(每次1个)约2秒钟。

对于每个按钮,当您按下并释放它时,您将看到值可能在很短的时间内有点不一致,忽略那些不稳定的值并记下剩下的最大和最小值。

这就是我的5个按钮:

1(1K) - 》 930 - 935

2(10K) - 》 510 - 520

3(22K) - 》 315 - 326

4(47K) - 》 175 - 179

5(68K) - 》 127 - 135

正如您所看到的,通过可靠的连接,每个按钮的范围非常小。我所拥有的最大范围是11点,这意味着波动幅度约为0.054V。一点都不差。.有一个小的范围没有理由你不能使用E12范围的电阻值在10到100K(10k,12k,15k,18k,22k,27k,33k)之间扩展到12个按钮,39k,47k,56k,68k,82k和100k),下拉电阻为27K - 33K。

步骤5:编码

这是我进行改进的主要领域。即使先前的硬件工作并且代码可以确定按下了哪个按钮,只要您按下按钮就会报告多个按钮按下。

我现在需要的是让Arduino读取一个按钮每次按下并释放按钮时按。附加的代码执行此操作。我也只是在检查按钮状态之间延迟了50ms,这似乎足以让它去抖动。

我改变的另一件事是清理代码。前面的代码为每个按钮使用了3个常量。这个版本使用数组,使代码更容易阅读。为了使它适用于你的值,替换buttonLowRange和buttonHighRange数组中每个按钮的值(你在上一步中得到的)。

完成后,您只需要在dealWithButtonPress方法中设置要将按钮链接到的操作。现在它只是在串行输出上打印一条消息,指示按下了哪个按钮。

步骤6:扩展它

正如我在步骤4中提到的那样,这可能会以最小的努力扩展到12个按钮。

模拟输入有一个10位分辨率,使我们在0V和参考电压之间提供1023个值。如果将其除以12个按钮,则可以看到每个按钮必须在85个点的唯一范围内。为了安全起见,我会称它不超过40 - 50。如果你这样做,你将不得不使用相当精确的电阻器(或测量它们并使用接近E12值的电阻器)你会相当可能需要更好的方法去除按钮。

从我的所有值都在11点的最大范围内的事实,这似乎是完全可行的。

第7步:最后的想法

这个版本比以前的版本要好很多。我不喜欢的一件事是依靠延迟进行去抖动。我会看看中断,而不是那样读取按钮,但是现在它运行得很好。

正如我在步骤4中提到的,通过与开关的牢固连接,每个按钮的范围非常小。我得到的最大范围是11分,这意味着没有理由不使用10到100K之间的E12电阻值(10k,12k,15k,18k,22k,27k,33k)来扩展到12个按钮,39k,47k,56k,68k,82k和100k),下拉电阻约为27K - 33K。

如果有任何不清楚的地方,请随时询问,我会在必要时回答并更新Instructable。

感谢您抽时间阅读!我希望你发现这个版本比第一个版本更有用。任何反馈或评级(眨眼,眨眼)将不胜感激。此外,如果您发现这有用,请花时间在微控制器竞赛中为我投票。

这是一个非常大的项目的第一部分。希望这次我能完成它(我不打算在接下来的几周里搬到另一个大陆)。请留意我创建时钟的下一个教程,这个时钟显示多个时区,一个RGB Orb,7段显示,并将这一切与一个将更新状态的在线应用程序连接起来(如果可能在单个Arduino上)。

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

    关注

    188

    文章

    6469

    浏览量

    187091
收藏 人收藏

    评论

    相关推荐

    stm32与Arduino的比较

    在微控制器的世界里,STM32和Arduino是两经常被提及的名字。STM32是一系列由STMicroelectronics生产的高性能微控制器,而Arduino则是一开源电子原型
    的头像 发表于 11-19 15:45 874次阅读

    OFFSET N1和N2这两引脚不是都是两输入性质的引脚吗?为什么会有固定的-12V输出呢?

    我是用搭建了如下一放大威廉希尔官方网站 : 测试过程中,发现R14电位计的总阻值变小很多。后来去掉了R14电位计。 使用示波器测试U4(TL071IDR)的1脚(OFFSET N1)和5脚(O
    发表于 09-10 07:58

    开源项目!基于 Arduino DIY 漂亮的宏机械键盘

    其与 Arduino 的 GND 引脚相连。随后,我将每个按钮的电线焊接到 Arduino 的一数字
    发表于 08-19 17:02

    TPA3112/TPA3116通过引脚GAIN01控制增益,可以将这两引脚悬空可靠吗?

    TPA3112TPA3116两款D类功放芯片通过引脚GAIN01控制增益。实际使用TPA3112时发现将引脚悬空也能起到给高电平的功能,但是芯片手册没有说明,实际运用的时候将这
    发表于 08-12 07:09

    LM393A的Pspice模型为什么只有5引脚

    如上右图时Pspice模型,只有5引脚,且没有8引脚,怎么添加电源
    发表于 07-29 07:32

    可调变阻器三引脚怎么区分

    可调变阻器,也称为电位器或可变电阻器,是一种可以调节电阻值的电子元件。它广泛应用于各种电子设备中,如音频设备、电源管理、电机控制等。可调变阻器有三引脚,分别是固定端、滑动端和可调端。这三
    的头像 发表于 07-24 11:12 1282次阅读

    请问Stlcr1v1传感器的温度是通过哪两引脚传出来的?如何让温度通过uart两串口传出来?

    我们想做不联电脑手机机的单纯的单片机串口通信,不知道我们传感器的温度是通过哪两引脚传出来的,也不知道怎么样让温度通过uart两串口传出来
    发表于 06-03 08:53

    能否通过arduino访问TLE9879的速度/电流测量值?

    您好, ,我通过 Arduino IDE 将无刷直流电机屏蔽 TLE9879 与 Arduino 结合使用,以 HALL 模式简单地驱动无刷直流电机。 能否通过
    发表于 05-23 06:39

    超酷!基于ESP32自制一蓝牙游戏手柄

    按钮编号。每个键名都有一对应的引脚编号。 /* * ANDROID游戏手柄 * {A=1, B=2, C=3, X=4, Y=5,
    发表于 05-06 16:59

    如何用Arduino制作一简易自动喂鱼器

    制作硬件威廉希尔官方网站 了。 第2步:威廉希尔官方网站 图和程序 我们可以将威廉希尔官方网站 分为两部分,第一部分是步进电机,另一部分是超声波传感器。 将步进电机连接到驱动器,然后根据下面的说明将驱动器引脚连接到Arduino: In1
    发表于 03-28 11:25

    没有电位器,用两按钮可以实现变频器调速吗?

    ,我们可能无法使用它。那么,没有电位器的情况下,能否通过使用两按钮来实现变频器的调速呢? 一、变频器的基本原理 在开始讨论没有电位器的情况下如何使用两
    的头像 发表于 02-18 16:55 1795次阅读

    构建一基于Arduino的空气质量监测系统

    呼吸清洁、健康的空气对我们的健康至关重要,但在许多环境中,空气质量仍然是一问题。在本文中,我们将深入探讨如何创建一基于Arduino的空气质量监测系统。我们将从讨论各种组件开始,然后继续讨论其MQ135传感器与
    的头像 发表于 02-11 12:03 4174次阅读
    构建一<b class='flag-5'>个</b>基于<b class='flag-5'>Arduino</b>的空气质量监测系统

    如何将按钮连接到Arduino

    在本快速入门指南中,您将学习如何将按钮连接到Arduino板,并根据按钮是否被按下来读取HIGH或LOW。您将使用威廉希尔官方网站 板上随附的发光二极管 (LED)通过
    的头像 发表于 02-11 10:52 3852次阅读
    如何将<b class='flag-5'>按钮</b>连接到<b class='flag-5'>Arduino</b>板

    使用Arduino IDE 2.0开发ESP32摄像头模块

    可以看到esp32选项。 编译并上传摄像头样例 1. 将开发板连接到电脑USB接口。若开发板未集成USB串口,则需要通过USB串口适配器连接。 2. 点击顶部工具栏的开发板下拉列表,选择
    发表于 02-07 17:06

    如何通过WebDAV服务器访问NAS

    WebDAV的客户端程序(如WinSCP、RaiDrive、Mac OS Finder、Linux 资源管理器)访问TNAS设备。 接下来为大家分享如何通过WebDAV服务器访问铁威马NAS:
    的头像 发表于 01-16 15:30 1069次阅读
    如何<b class='flag-5'>通过</b>WebDAV服务器<b class='flag-5'>访问</b>NAS