第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按钮开关
面包板
一些连接它的电线
第二步:理论 - 快速回顾
《我建议您阅读上一个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
发布评论请先 登录
相关推荐
评论