zoukankan      html  css  js  c++  java
  • Arduino 极速入门系列

    接上篇,这次继续讲解光控灯的另外两个组成部分 - 开关和光敏电阻,光控灯里面将会有自锁开关按钮和光敏电阻。这此主要给新玩电子的朋友解释一下开关按钮的做法。

    开关按钮的引脚电平读取问题 - 新手专用

    IMG_20161226_210811

    我们搭一个超简单的电路,如上图。Arduino Mini Pro 的 9 号引脚,接到一个按钮,但注意看,这按钮后面没有接任何东西。我们运行一下以下代码:

    void setup() {
      Serial.begin(9600);
      pinMode(9, INPUT);
    }
    
    void loop() {
      delay(500);
      int val = digitalRead(9);
      if(val != 0){
        Serial.println("LOW");
      } else {
        Serial.println("HIGH");
      }
    }

    代码很简单,每 500ms (半秒)读取一次 9 引脚的电平,输出到串口。上传让它运行,在不碰任何东西情况下,你觉得有什么输出到串口窗口 ?

    结果如下图:

    A_@(TU)~PY@_4R_DD2)NU29

    你会看到一些类似随机的值,高高低低的变化着。这是完全悬空的状态,按钮也没有被按下(按下也没区别,因为按钮另一端没有接任何东西),也是这样的结果。

    引脚作为输入用,处于「高阻抗」(High-impedance )状态,对电压变化极度敏感。外界的干扰比如旁边引脚的电平变化,或者其他干扰来源,都有可能影响到从引脚读取的电平值。作为一个按钮使用,我们不希望它在没有按下的情况下发生变化的。这时候我们会使用芯片功能或者电路,是它在没有按下的情况下,牢牢地固定在一个值(高,或者低),而不是随着干扰噪音而浮动。

    首先我们看看搭电路能怎样做,然后再看看芯片的功能怎样用。

    下拉电阻原理 - 新手专用

    LK[I)Y2H47E6(]RZ[~MP6KW

    假设另一端就是接 Arduino 引脚来读取电平,我们已经知道这是不行的,按钮没按下时候虽然开路,但因各种电子噪音干扰,读出来是浮动的电平。

    我们想个办法,把按钮在没按下时候,所有丁点的电都全流向地,比如这样?

    ]RN73V{KW(`{10CY@@]QQ[6

    H]L`$U(H95(V}40VTS6FCKG

    这样就不再浮动了吧,有多少噪音全都流向地,引脚电平牢牢地是 0V,好像行啊?但你按下按钮的话……. Oh my lady Gaga !

    TRVVU4~5$JHNTRA1Y[AT(90

    记得上一篇我们说的短路的话,这就是了。短路是因为没有负载,那我们加个电阻作为负载:

    GMQF6DQ1{FZ3Z)99E[A]UN8

    这个电阻,就叫做下拉电阻。它的作用是在按钮开路时候,引脚以及相连导线等等全部有丁点的电压都拉到地端去。按钮按下时候也不会造成短路。下拉电阻,其实事情就这么简单。

    上拉电阻

    反过来,上拉电阻,这样:

    0JGF8CR7S{(KG4PZK64RTIL

    用上拉电阻,按钮开路时候,电流流向引脚产生高电平信号。按钮按下,全部电流流向地,引脚将会读到低电平。

    到底用上拉还是下拉,那看你希望按钮开路时候读到的是高电平,还是低电平了。

    Arduino 内置的上拉电阻

    很多的单片机,包括一般 Arduino 所用的芯片,都有内置上拉电阻功能,内置的不用大家像上面原理图等等自己搭。启用的做法就是在 pinMode 那里设置。

    这样启用:

    pinMode(9, INPUT_PULLUP)

    然后实物就这样接就好了:

    %T{SLN4HP2B(R0[2_~5AB1U

    就是上拉电阻的电路,已经在芯片里面,你接个按钮再接地端,就妥妥的。

    然后你或许会问,哎,我想默认低电平那怎么办?这样:

    int raw = digitalRead(9);

    int result = !(raw);  // 用这个值做你需要做的判断

    欢迎加入我们的大家庭  点击加入 Arduino 硬创联盟,群号 8580606

  • 相关阅读:
    课后listview作业
    安卓sql
    activity带数据跳转
    安卓第四周作业
    15周作业
    十三周作业-集合
    十三周上机练习
    12周作业
    linux
    Questions.
  • 原文地址:https://www.cnblogs.com/leptonation/p/6226535.html
Copyright © 2011-2022 走看看