Arduino从零开始(1)——按钮控制LED

0.前言 

本文主要介绍Arduino对于开关和条件判断函数的使用。

目录

0.前言

1.介绍

2.按钮控制LED

2.1下拉模式:

2.2上拉模式

3.扩展实验:


1.介绍

前篇介绍了点亮LED,这次案例我们尝试通过一个简单的传感器——按钮,来实现对LED控制。将控制按钮分解的话,能看到一个十分简单的构造。

                                             

(注意按钮方向)

如上图所示,这个按钮有四个引脚,分别1-2导通,3-4导通,中间一个开关连接。这里或许朋友们会有疑问了,对于一个常开开关而言,这里为什么会有四个引脚,只需要两个引脚不就可以了吗?比如工业上常用的欧姆龙行程开关,如下图:

 常开端一对引脚,常闭端一对引脚,触碰按钮后,原本的常开和常闭端相互切换状态。而对于实验用的这个四脚小开关,这里的四个引脚的其中一个是为了给下拉电阻做引脚而准备的,常规的欧姆龙开关一般是和工业控制器如PLC等搭配使用。而对于PLC而言,首先是电源,一般PLC电源采用DC24V,而Arduino一般是DC5V,就电源上自然Arduino就不如PLC抗干扰能力强,再一个PLC电源线以及接线一般是采用具有一定抗干扰能力的双绞线,而我们对Arduino实验时一般是采用面包线,两者抗干扰能力也不在一个级别上,所以如果Arduino在读取开关信号时不接上拉或下拉电阻,那么其误动作的概率就很大。Arduino本身有自带上拉电阻,所以实际使用过程中更推荐使用上拉模式来读取开关信号。(这里虽然说Arduino相比较PLC而言抗干扰能力上不如PLC,但并不是说Arduino就不能用于工控了。做好屏蔽,外部的抗干扰等,依旧可以实现工控,毕竟一块Arduino的价格是一个PLC的几分之一。自己做的一条自动化生产线也是采用Arduino来设计的,虽然其中有坑,但都还是解决掉了。)

电路中上下拉电阻的作用:

  • 上拉电阻——是将不确定信号通过一个电阻钳位在高电平,电阻同时限流作用
  • 下来电阻——是将不确定信号通过一个电阻钳位在低电平
  • 两者最终的目的都是提高电路稳定性,避免误动作。

    2.按钮控制LED

    分别介绍两种模式下拉与上拉。

    2.1下拉模式:

    接线图如下:

     代码如下:

    void setup()
    {
      pinMode(13,OUTPUT);
      pinMode(2,INPUT);
      digitalWrite(13, LOW);
    }
    
    void loop()
    {
      if(digitalRead(2)==HIGH){//读取2号引脚状态,并做判断
      	digitalWrite(13, HIGH);
      }
    }

    说明:

    1.下拉模式即——pinMode(2,INPUT);。通常状态下2号引脚为低,触发高电平时有效,即将2与5V接通。

    2.

    if语句常用判定式:<,<=,==,>=,>,!=。

    布尔运算式:

    符号 逻辑
    if(digitalRead(2)==HIGH && digitalRead(2)==HIGH){//…. } &&
    if(digitalRead(2)==HIGH || digitalRead(2)==HIGH){//…. } ||

    3.对于“==”判断,要小心使用成了单个等号如if(x=10)。这里单个等号是赋值运算,将恒为真。

    2.2上拉模式

    相比较下拉模式的接线图,上拉模式下就简单许多了。接线图如下:

    代码如下:

    void setup()
    {
      pinMode(13,OUTPUT);
      pinMode(2,INPUT_PULLUP);
      digitalWrite(13, LOW);
    }
    
    void loop()
    {
      if(digitalRead(2)==LOW){
      	digitalWrite(13, HIGH);
      }
    }

    说明:

    1.可以看到对于Arduino而言,因其自身已经配有上拉电阻,所以实际使用中更推荐采用上拉模式,以节省外接电子元器件,减少干扰,提高系统的稳定性。

    2.在上拉模式即—— pinMode(2,INPUT_PULLUP);。通常状态下2号引脚拉高,触发低电平时有效,即将2与地接通。

    3.扩展实验:

    按钮按下后开始计时,并同时点亮LED,10秒途中再次按下按钮,熄灭LED,并打印时间,10秒后若无任何操作,自动熄灭LED,并打印时间。扩展实验中有循环while的使用,会在下一章节具体说明。

    接线图如下:

    代码如下:

    void setup()
    {
      Serial.begin(9600);
      pinMode(13, OUTPUT);
      pinMode(2, INPUT_PULLUP);
      digitalWrite(13, LOW);
    }
    
    void loop()
    {
      int i=10;
      if (digitalRead(2)==LOW) {
        while (digitalRead(2)==LOW) {
          if(digitalRead(2)==HIGH){
            digitalWrite(13, HIGH);
          	while (i<=10000){
              delay(10);
              i=i+10;
              if (digitalRead(2)==LOW) {
                while (digitalRead(2)==LOW){
                  if(digitalRead(2)==HIGH) {
                    Serial.println(float(i)/1000);
                    break;
                  }
                }
                break;
              }
              Serial.println(float(i)/1000); 	
            }
            digitalWrite(13, LOW);
            break;
          }
        }
      }
    }
    

    物联沃分享整理
    物联沃-IOTWORD物联网 » Arduino从零开始(1)——按钮控制LED

    发表评论