Arduino电子制作基础⑥ 读取开关状态

第1篇:让电子元器件动起来!
第2篇:Arduino的准备工作
第3篇:用数字输出来控制LED点亮
第4篇:LED的亮度调节
第5篇:驱动电机并实现自动控制

 

*本文最初发表于2019年10月1日,对其重新编辑后于再次发表。

在本系列连载中,我们已经通过之前的文章了解了如何通过Arduino控制LED和电机。

 

在这种项目中大展身手的是“数字输出”。我们已经利用数字输出使数字输出引脚在HIGH (5V) 和LOW (0V) 两种状态之间切换,从而实现了对LED和电机的控制。

另外,您还可以使用数字输出来确认电子部件的状态。数字输出引脚还可以切换为数字输入引脚。通过这样切换,可以确认引脚上的电压,并通过“LOW”和“HIGH”两种状态输入。这些输入值可用于控制其他电子部件。比如您可能希望在数字输入为HIGH时使电机运转,在输入为LOW时使电机停止。

01

实际上,利用开关等电子器件,可以使数字输入引脚的状态切换为0V或5V。

在本文中,我们将介绍如何使用开关实现数字输入。

 

目录

  1. Arduino的数字输入
  2. 使用轻触开关切换输入
  3. 使用轻触开关输入数据
  4. 使用Arduino上拉功能
  5. 按下开关时点亮LED

 

Arduino的数字输入

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

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

11

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


const int DIN_PIN = 7;

void setup(){
    pinMode( DIN_PIN, INPUT );
    Serial.begin( 9600 );
}

void loop(){
    int value;
    
    value = digitalRead( DIN_PIN );
    Serial.println( value );

    delay( 1000 );
}

在第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。

12

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

13

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

 

使用轻触开关切换输入

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

21

对于轻触开关而言,当按下上方按钮时,内部电路接通,进入通电状态。当松开按钮时,电路断开,没有电流流过。通常,在开关的四个角会配有引脚。如上图所示配置时,左右引脚之间的间隙起到开关的作用。右侧的上下引脚和左侧的上下引脚是始终连接的。

如果将轻触开关的一个引脚与数字引脚相连接,另一引脚连接到GND,则按下开关时内部电路会接通,引脚将直连GND。通过这样做,您可以判断只要按下开关,数字输入就会变为“HIGH”。

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

23

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

 

使用轻触开关输入数据

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

轻触开关

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

10kΩ(1/4W)电阻器
32
用于上拉电路的电阻器。在10kΩ电阻器上印有“棕黑橙金”颜色代码。
准备好所需组件后,如下图所示连接它们。将轻触开关跨越面包板中心的凹槽插入。

33

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

 

使用Arduino上拉功能

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

41

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


const int DIN_PIN = 7;

void setup(){
    pinMode( DIN_PIN, INPUT_PULLUP );
    Serial.begin( 9600 );
}

void loop(){
    int value;
    
    value = digitalRead( DIN_PIN );
    Serial.println( value );

    delay( 1000 );
}

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

 

按下开关时点亮LED

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


const int DIN_PIN = 7;
const int LED_PIN = 13;

void setup(){
    pinMode( DIN_PIN, INPUT_PULLUP );
    pinMode( LED_PIN, OUTPUT );
}

void loop(){
    int value;
    
    value = digitalRead( DIN_PIN );

    if ( value == HIGH ){
        digitalWrite( LED_PIN, LOW );
    }else{
        digitalWrite( LED_PIN, HIGH );
    }

    delay( 100 );
}

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

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

* * *

现在,您可以在您的Arduino项目中使用开关来执行输入了。在下一篇中,将为您介绍可以读取电位器状态等信息的模拟输入。

——————————————————————————————————————–

*希望了解更多有关电阻器基础知识的读者朋友,欢迎访问 ROHM官网的“电子小百科”!

 

 

本系列连载的内容

第1篇:让电子元器件动起来!
第2篇:Arduino的准备工作
第3篇:用数字输出来控制LED点亮
第4篇:LED的亮度调节
第5篇:驱动电机并实现自动控制
第6篇:读取开关状态(本文)
第7篇:用模拟输入来读取电压
总结:Arduino电子制作基础知识总结! 基于微控制器的电子制作基础之基础篇

アバター画像

福田和宏

作家,居住在日本札幌。喜欢撰写有关电子创作、电脑、Linux、智能手机等方面的文章。在为“Raspberry Pi Magazine”和“日经Linux”供稿。著有《这本书足够!Raspberry Pi超简单入门教程》(SOTECHSHA)、《学习各种电子元器件的控制!Arduino电子创作 实战教程》(SOTECHSHA)、《Arduino实用入门》(技术评论出版社)等书籍。 目前,创办了“札幌电子工艺部”(https://sapporo-elec.com/),这里汇集了众多电子创作发烧友,大家使用各自的电子技能创作各种作品。任何人都可以参加,也期待您的加入!

相关文章

  1. Arduino电子制作基础⑦ 用模拟输入来读取电压

  2. 12

    Arduino电子制作基础⑤ 驱动电机并实现自动控制

  3. 11_2

    Arduino电子制作基础④ 调节LED的亮度

  4. 01

    Arduino电子制作基础③ 用数字输出来控制LED点亮

  5. 01-1

    Arduino电子制作基础② Arduino的准备工作

  6. 01_new

    Arduino电子制作基础①让电子元器件动起来!

  7. 795316b92fc766b0181f6fef074f03fa

    从历史到使用方法的全面了解!人气微控制器开发板Arduino究竟是何方神圣?

TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南

基础知识

  • Si功率元器件
  • IGBT功率元器件
  • 热设计
  • 电路仿真
  • 开关噪声-EMC
  • AC/DC
  • DC/DC
  • 电机
  • 传递函数

工程技巧


Sugiken老师的电机驱动器课堂

PICK UP

PAGE TOP