Arduino基础入门四:数字IO口作为输入

一、器件介绍

   按键常用在电子控制线路中作为输入,有自锁式(按下按钮,开关状态发生改变,并保持改变后的状态,直到下次按钮按下才再次开关改变)和非自锁按钮(按下按钮时,改变开关状态,松开回到原状态)两类。
   本课程采取四脚轻触开关,属于非自锁按钮。四脚轻触开关由常开触点、常闭触点组合而成,在四脚轻触开关中,常开触点的作用,就是当压力向常开触点施压时,这个电路就呈现接通状态;当撤销这种压力的时候,就恢复到了原始的常闭触点,也就是所谓的断开。这个施压的力,就是用我们的手去开按钮、关按钮的动作。

    Arduino基础入门四:数字IO口作为输入_第1张图片

二、硬件介绍

1、典型电路:  
   按键作为输入,需要将按键状态的改变转化为电信号的变化,才能被Arduino识别。典型电路如图所示。
   Arduino基础入门四:数字IO口作为输入_第2张图片
   当Arduino数字IO口作为输入,其输入阻抗为高阻状态,可以认为输入对地电阻无穷大。
   所以,当S开关断开时,根据欧姆定律Vout≈Vcc=1。当S合上时,Gnd和Vout短接,此时点位相通,Vout=Gnd=0。综上可以把开关状态转变为Arduino识别的高低电平,电阻R称为上拉电阻,用于保护S闭合时,Vcc和Gnd短路。

2、按键消抖:

   由于按键为机械式弹簧开关,当机械触点断开、闭合时,由于机械触点的弹性作用,导致触点不会马上稳定的接通,所以在使用弹簧时,一般需要消抖,去除弹性作用照成的外部干扰。抖动时间由按键的机械特性所决定,一般为5ms~10ms。所以我们在做按键检测时都要加一个消抖的过程。

    Arduino基础入门四:数字IO口作为输入_第3张图片

按键消抖方式:分为软件消抖和硬件消抖。
     软件消抖:利用抖动时间,降低采样频率,错开抖动时的不稳定状态。缺点:程序效率低下,因为程序需要等待 按键稳定,照成CPU资源浪费;优点:硬件简单。
   硬件消抖:a、在按键信号输出端并上电容,电容作为储能元件,具有电容两端的电压不能突变的特性,选取合适容值的电容,通过电容的充放电时间消除抖动照成的不稳定。

   Arduino基础入门四:数字IO口作为输入_第4张图片
   b、在有三端常开常闭触点的按键中,可以采用RS触发器进行消抖。参考:RS触发器原理
  Arduino基础入门四:数字IO口作为输入_第5张图片

         c、外接专用的按键消抖芯片(比如MAX16054),在对按键抖动要求高的场合使用,但是成本会大大加大。


3、例程电路:

Arduino基础入门四:数字IO口作为输入_第6张图片



三、软件介绍

   本例程中采取软件消抖,按键每按下一次,LED亮灭状态发生一次翻转。
#define LED_PIN 13     //宏定义LED引脚
#define KEY_PIN 12     //宏定义按键引脚
char ledMode=0;        //定义LED亮灭的模式
void setup() 
{
 pinMode(LED_PIN,OUTPUT);         //LED初始化
 pinMode(KEY_PIN,INPUT);          //按键初始化
}

void loop() 
{
  if(digitalRead(KEY_PIN)==0)                //当按键按下,进入检测
   {
      ledMode=ledMode^1;                     //按键按下,让ledMode和1进行异或运算,使ledMode进行取反。
      digitalWrite(LED_PIN,ledMode);         //将取反的ledMode变量送入LED灯引脚状态中
      delay(25);                             //按键按下延时消抖25ms
      while(!(digitalRead(KEY_PIN)));        //一直循环,直到按键释放,跳出死循环
      delay(25);                             //按键松开延时消抖25ms
    }
}

语言知识点简要:自行搜索相关资料
1、变量类型
    char(字符)、int(整型)、float(浮点型)、double(双精度)。
2、修饰符
    char和int又分为有符号signed(有正负,首位为正负位)和无符号unsigned(全≥0),默认为有符号。
    int又分为长整型(long)和短整型(short)。
3、变量范围及在内存中的表示。
4、逻辑运算:与、或、非、异或。
5、if语句:判断语句
6、while语句:条件循环语句
    

、思考以下情况
   1、当把初始化函数改为以下代码,可以将以上典型电路进行如何优化?
void setup() 
{
 pinMode(LED_PIN,OUTPUT);         //LED初始化
 pinMode(KEY_PIN,INPUT_PULLUP);   //按键初始化
}

         2、试着用其他方式的思维,更改代码,实现例程相同效果。
   

  

你可能感兴趣的:(Arduino基础入门)