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

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

3天内不再提示

Arduino基础:读取开关状态

刘英 来源:Oo一笑 作者:Oo一笑 2023-02-20 09:47 次阅读

这篇文章来源于DevicePlus.com英语网站的翻译稿。

本文最初发布在deviceplus.jp.网站上,而后被翻译成英语。

前言

在本文中,您可以了解如何在您的Arduino项目中使用轻触开关以及其实际工作原理

我们已经利用数字输出使数字输出引脚在HIGH (5V) 和LOW (0V) 两种状态之间切换,从而实现了对LED电机的控制。
另外,您还可以使用数字输出来确认电子部件的状态。数字输出引脚还可以切换为数字输入引脚。通过这样切换,可以确认引脚上的电压,并通过“LOW”和“HIGH”两种状态输入。这些输入值可用于控制其他电子部件。比如您可能希望在数字输入为HIGH时使电机运转,在输入为LOW时使电机停止。

poYBAGPy0GSAJ66NAAHIKLKLijs466.png

实际上,利用开关等电子器件,可以使数字输入引脚的状态切换为0V或5V。
在本文中,我们将介绍如何使用开关实现数字输入。

Arduino的数字输入

使用Arduino Uno,您可以将最初用于数字输出的引脚D0到D13作为数字输入引脚使用。可以通过程序切换为数字输入模式,来确认引脚状态。

0V输入为“LOW”,5V输入为“HIGH”。在程序中,LOW会被读取为“0”,HIGH会被读取为“1”。通过确认这些输入值并执行条件分支等处理,即可控制工作状态。

pYYBAGPy0GyAUt4nAAOcGY0Dd38603.png

下面我们来实际尝试一下用Arduino进行数字输入。在这里,我们使用跳线连接引脚5,并确认连接到5V电源和GND时的变化。创建以下程序并将其发送给Arduino:

在第4行中,通过pinMode()指定“INPUT”,以将本次使用的引脚7切换为输入模式。现在,您可以通过程序确认引脚状态了。

获取第11行由digitalRead()指定的引脚的状态,并将其存储在value变量中。如果是0V,则存储为“0”,如果是5V,则存储为“1”。

当您想确认获取的状态时,请使用“串行监视器”。对于Arduino而言,您可以使用用来从电脑传输程序的USB数据线将数据从Arduino发送到电脑。使用串行通信可以收发数据。您可以使用串行通信将通过数字输入获取的状态发送到电脑进行确认。

如果您想在程序中使用串行通信,请通过第5行的Serial.begin()进行初始化。此时需要指定通信速度。然后,通过第12行的Serial.println()指定一个值,即可将数据发送到电脑。在本文中,我们使之发送存储着数字输入状态的value变量的内容。

要确认Arduino通过串行通信发送过来的数据时,请使用Arduino IDE中内置的“串行监视器”。要使用串口监视器,请单击Arduino IDE右上角的“串口监视器图标”(放大镜图标),即可显示串行监视器画面。将右下角的通信速度设置为与程序的Serial.begin()中指定的通信速度(本文为9600)相同的值。然后,屏幕上将会显示0或1。

pYYBAGPy0G6AfKF1AAClSjZ9c6k040.png

接下来,将跳线插入引脚7。将另一端连接到 GND,串行监视器上显示“0”。也就是说,如果数字引脚为0V,您可以看到“0”(LOW)。同样,当引脚7与5V电源连接时,您可以看到显示内容变为“1”(HIGH)。

pYYBAGPy0HGAZAjsAADbsHJ8gnw176.png

现在我们已经确认,输入会根据引脚的状态发生变化。

使用轻触开关切换输入

下面,我们尝试用一个开关使数字输入引脚在HIGH和LOW状态之间切换。在本文中,我们使用的是按钮型“轻触开关”。

poYBAGPy0HSAU2jgAAEsHrpKtTI129.png

对于轻触开关而言,当按下上方按钮时,内部电路接通,进入通电状态。当松开按钮时,电路断开,没有电流流过。通常,在开关的四个角会配有引脚。如上图所示配置时,左右引脚之间的间隙起到开关的作用。右侧的上下引脚和左侧的上下引脚是始终连接的。
如果将轻触开关的一个引脚与数字引脚相连接,另一引脚连接到GND,则按下开关时内部电路会接通,引脚将直连GND。通过这样做,您可以判断只要按下开关,数字输入就会变为“HIGH”。

poYBAGPy0HiAB0s9AAFtPW_4cKU450.png

但是,当没有按下开关时,数字引脚将会处于没有任何连接的状态。在这种状态下,施加在引脚上的电压会变得不稳定。在不稳定状态下,当用手触碰引脚或有电池等靠近时,输入可能会发生变化。
因此,我们在使用开关时会连接一种称为“上拉电路”或“下拉电路”的电路。这种方法是借助电阻器将数字引脚连接到电源或GND,可以起到稳定输入状态的作用。该电路连接到电源端时称为“上拉电路”,连接到GND端时称为“下拉电路”。在本文中将以上拉电路为例进行说明,但下拉电路的原理也是一样的。

pYYBAGPy0HyAHjInAAFcgwOTAdg268.png

使用上拉电路时,在未按下开关的状态下,开关通过一个电阻器连接到电源。这样,就与数字引脚连接电源时的状态相同,输入会稳定在5V(HIGH)。当按下开关后,数字引脚处于直接连接GND的状态,因此输入切换为0V(LOW)。
虽然处于电源与GND连接的状态,但它们之间夹着一个电阻器(通常为10kΩ左右),因此只会流过少量电流,不存在短路风险。

使用轻触开关输入数据

现在,让我们使用轻触开关实际输入数据看看。需要准备好以下电子元器件

・ 轻触开关
poYBAGPy0ICAOLQ_AAEZoxHeJxk147.png
轻触开关有很多种颜色可供选择。您可以选择任何您喜欢的颜色。

・ 10kΩ (1/4W)电阻器
pYYBAGPy0IiAE2bRAAMtfV4tpIE003.png
用于上拉电路的电阻器。在10kΩ电阻器上印有“棕黑橙金”颜色代码。

准备好所需组件后,如下图所示连接它们。将轻触开关跨越面包板中心的凹槽插入。

poYBAGPy0I6AUeGpAALMtIbZ8_s911.png

接下来,将前述的程序发送给Arduino,以通过串行监视器确认数字引脚7的输入。可以看到,在未按下开关的状态下,显示“1”(HIGH),在按下开关时变为“0”(LOW)。

使用Arduino上拉功能

在Arduino Uno中,数字引脚内置有“上拉”功能,可以通过程序激活该功能。如果使用内部的上拉功能,就不再需要外接电阻器了。您只需连接开关即可,省时省力。

pYYBAGPy0JOAJnnXAAKZuLeyCVo946.png

激活上拉功能的程序如下:

您只需在第4行的数字引脚模式设置中指定“INPUT_PULLUP”即可。这样就能激活内置的上拉功能,从而能够在未按下按钮的状态下稳定HIGH输入。请注意,Arduino Uno中未内置下拉功能。

按下开关时点亮LED

开关的输入还可用来控制其他电子元器件。在这里,让我们利用Arduino中安装的LED(引脚13),尝试实现在按下开关时点亮LED,并在松开开关时熄灭LED。所用的电路与前述的仅将开关连接到数字引脚时的电路相同。编写程序如下:

确认第14行的数字输入值是否为“1”。在Arduino程序中,您也可以将“1”写为“HIGH”,将“0”写为“LOW”。为了便于理解,我们在这里使用“HIGH”和“LOW”。

如果输入为HIGH(未按下按钮),则执行第15行,使引脚13切换到LOW,LED熄灭。如果输入不是HIGH(按下按钮),则执行第17行,使引脚13切换到HIGH,LED点亮。将程序发送到Arduino并按下轻触开关,即可确认LED点亮。

我们成功了!现在,您可以在您的Arduino项目中使用开关来执行输入了。

审核编辑:汤梓红

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

    关注

    237

    文章

    22450

    浏览量

    645890
  • 开关状态
    +关注

    关注

    0

    文章

    5

    浏览量

    9133
  • Arduino
    +关注

    关注

    184

    文章

    6428

    浏览量

    184845
  • 轻触开关
    +关注

    关注

    0

    文章

    61

    浏览量

    1203
收藏 人收藏

    评论

    相关推荐

    请问拨码开关需要加上拉电阻吗?

    拨码开关需要加上拉电阻吗?不加可以读取开关状态吗?
    发表于 09-11 21:17

    如何将开关的开/断状态转变成Arduino能够读取的高/低电平

    如何将开关的开/断状态转变成Arduino能够读取的高/低电平。解决的办法是通过上 /下拉电阻,按照电路的不同通常又可以分为正逻辑(Positive Logic)和负逻辑(Invert
    发表于 01-17 08:35

    通过Arduino R3开放板读取LM35温度传感器参数

    一、介绍通过Arduino R3开放板读取LM35温度传感器参数,将参数转换成温度值,根据温度值开发板发出高电平,将继电器常开开关打开,使风扇处于通电状态,风扇自动转动;当温度低于设定
    发表于 01-27 06:20

    使用Arduino读取MPU6050数据的程序免费下载

    本文档的主要内容详细介绍的是使用Arduino读取MPU6050数据的程序免费下载。
    发表于 07-24 17:17 27次下载
    使用<b class='flag-5'>Arduino</b><b class='flag-5'>读取</b>MPU6050数据的程序免费下载

    Arduino读取MPU9250传感器

    电子发烧友网站提供《用Arduino读取MPU9250传感器.zip》资料免费下载
    发表于 10-19 09:15 2次下载
    用<b class='flag-5'>Arduino</b><b class='flag-5'>读取</b>MPU9250传感器

    读取负张力的Arduino示波器的想法

    电子发烧友网站提供《读取负张力的Arduino示波器的想法.zip》资料免费下载
    发表于 10-31 15:10 0次下载
    <b class='flag-5'>读取</b>负张力的<b class='flag-5'>Arduino</b>示波器的想法

    Arduino读取DHT22(或DHT11)

    电子发烧友网站提供《用Arduino读取DHT22(或DHT11).zip》资料免费下载
    发表于 11-16 11:02 1次下载
    用<b class='flag-5'>Arduino</b><b class='flag-5'>读取</b>DHT22(或DHT11)

    Arduino充当玻璃容器中的控制器和传感器读取

    电子发烧友网站提供《让Arduino充当玻璃容器中的控制器和传感器读取器.zip》资料免费下载
    发表于 11-22 14:27 0次下载
    让<b class='flag-5'>Arduino</b>充当玻璃容器中的控制器和传感器<b class='flag-5'>读取</b>器

    Arduino库来读取DHT11湿度和温度传感器数据

    电子发烧友网站提供《用Arduino库来读取DHT11湿度和温度传感器数据.zip》资料免费下载
    发表于 11-22 10:45 0次下载
    用<b class='flag-5'>Arduino</b>库来<b class='flag-5'>读取</b>DHT11湿度和温度传感器数据

    Arduino HDC2010读取数据和舒适区警报

    电子发烧友网站提供《Arduino HDC2010读取数据和舒适区警报.zip》资料免费下载
    发表于 12-09 09:35 0次下载
    <b class='flag-5'>Arduino</b> HDC2010<b class='flag-5'>读取</b>数据和舒适区警报

    PROFINET IO 设备读取模块的状态信息

    “ModuleStates”指令可用来读取 PROFINET IO 设备或 PROFIBUS DP 从站的模块状态信息。
    的头像 发表于 05-19 14:19 2206次阅读
    PROFINET IO 设备<b class='flag-5'>读取</b>模块的<b class='flag-5'>状态</b>信息

    如何通过Arduino读取电表

    电子发烧友网站提供《如何通过Arduino读取电表.zip》资料免费下载
    发表于 06-16 15:18 1次下载
    如何通过<b class='flag-5'>Arduino</b><b class='flag-5'>读取</b>电表

    用GPIO读取按钮状态

    树莓派的GPIO可以控制发光二极管,这是GPIO的Output(输出)能力,它也具有input(读取)的能力,所以才能叫做I/O(输入/输出)端口。今天我们就来用GPIO的引脚来读取按钮的状态
    的头像 发表于 07-02 15:06 911次阅读
    用GPIO<b class='flag-5'>读取</b>按钮<b class='flag-5'>状态</b>

    Arduino之如何逐行读取SD卡文本文件

    电子发烧友网站提供《Arduino之如何逐行读取SD卡文本文件.zip》资料免费下载
    发表于 07-12 10:17 1次下载
    <b class='flag-5'>Arduino</b>之如何逐行<b class='flag-5'>读取</b>SD卡文本文件

    通过SFC 51读取CPU的指示灯状态

    可以通过SFC 51读取CPU的指示灯状态,使用的SSL_ID参数为16#74(16#19)读取全部指示灯状态 或者16#174(16#119)读取
    的头像 发表于 07-24 16:34 874次阅读
    通过SFC 51<b class='flag-5'>读取</b>CPU的指示灯<b class='flag-5'>状态</b>