如果你让按键工作,你经常会想做一些要按下很多次按钮的才有响应的动作。这时你需要知道按钮的从闭合到断开的变化状态,然后记录这个状态发生了多少次。这叫状态变化检测或者边沿检测。在这个教程里我们学习怎样检查状态变化,然后我们把相关信息发送到串口监视器里,并记录4次LED灯的开和关。

简介

如果你让按键工作,你经常会想做一些要按下很多次按钮的才有响应的动作。这时你需要知道按钮的从闭合到断开的变化状态,然后记录这个状态发生了多少次。这叫状态变化检测或者边沿检测。在这个教程里我们学习怎样检查状态变化,然后我们把相关信息发送到串口监视器里,并记录4次LED灯的开和关。

硬件要求

Arduino or Genuino 开发板

即时按钮或者开关

10kΩ电阻

连接线

面包板

电路

连接3根线到开发板。最开始两根,红和黑,连接到面包板上的两个长垂直行来提供5V电源电压和地。第三根线从数字引脚pin2连接到按钮的一个引脚。按钮的同一个引脚连接下拉电阻(10k ohm)到地。按钮的另一个引脚连接到5V电源。

按钮或者开关连接电路的两点。按钮是断开的(未按),按钮两个引脚是没有接通的,所以这个引脚连接到地(通过一个下拉电阻),读取为低电平或者0。当如果按钮是闭合的(未按),按钮两个引脚是接通的,所以这个引脚连接到5V,读取为高电平,或者1。

如果你没有连接到数字I/O口到任何地方,LED灯可能会不规则闪烁。这是因为输入引脚处于悬浮状态——它没有固定连接到电源或者地,并且它会随机在高电平和低电平之间切换。这是你需要下拉电阻的原因。

原理图

样例代码

下面的代码连续读取按钮的状态。然后通过循环来对比这个按钮的状态和它上一段时间的状态。如果当前按键的状态和之前的状态不一样并且当前状态是高电平,那么这个按键刚从关变为开。然后程序增加按键按下的计数器。

这个程序也检查按键按下次数的值,并且如果它是4的倍数,它会打开pin13的LED灯,否则这个LED灯饰熄灭的。

// this constant won't change:

const int buttonPin = 2; // the pin that the pushbutton is attached to

const int ledPin = 13; // the pin that the LED is attached to

// Variables will change:

int buttonPushCounter = 0; // counter for the number of button presses

int buttonState = 0; // current state of the button

int lastButtonState = 0; // previous state of the button

void setup() {

// initialize the button pin as a input:

pinMode(buttonPin, INPUT);

// initialize the LED as an output:

pinMode(ledPin, OUTPUT);

// initialize serial communication:

Serial.begin(9600);

}

void loop() {

// read the pushbutton input pin:

buttonState = digitalRead(buttonPin);

// compare the buttonState to its previous state

if (buttonState != lastButtonState) {

// if the state has changed, increment the counter

if (buttonState == HIGH) {

// if the current state is HIGH then the button

// wend from off to on:

buttonPushCounter++;

Serial.println("on");

Serial.print("number of button pushes: ");

Serial.println(buttonPushCounter);

} else {

// if the current state is LOW then the button

// wend from on to off:

Serial.println("off");

}

// Delay a little bit to avoid bouncing

delay(50);

}

// save the current state as the last state,

//for next time through the loop

lastButtonState = buttonState;

// turns on the LED every four button pushes by

// checking the modulo of the button push counter.

// the modulo function gives you the remainder of

// the division of two numbers:

if (buttonPushCounter % 4 == 0) {

digitalWrite(ledPin, HIGH);

} else {

digitalWrite(ledPin, LOW);

}

}

arduino 按钮读取_Arduino内置教程-数字-检测按键状态相关推荐

  1. arduino 读取模拟电压_Arduino内置教程-基本原理-读取模拟电压

    读取模拟电压 这个例子展示怎样读取一个在模拟引脚PIN 0上的模拟输入,把analogRead()的值转换成电压,然后打印到Arduino IDE的串口监视器里. 硬件要求 Arduino or Ge ...

  2. arduino 按钮读取_arduino教程系列6-按键实验 arduino入门,arduino教程

    按键是一种常用的控制电器元件,常用来接通或断开电路,从而达到控制电机或者其他设备运行的开关.按键的外观多种多样,本次实验使用的是这种微型按键,6mm的,如下图. 2011-7-21 20:11 上传 ...

  3. arduino 按钮读取_arduino Uno3中的按钮开关问题

    // 按钮开关:  GND ---按钮--- Pin 1 /// int bounce = 88; // bounce time for 抖动判断; you can change it int btn ...

  4. Freemarker 内置函数 数字、字符串、日期格式化用法介绍

    在用FreeMarker过程中,感觉FreeMarker的字符串,日期,集合等处理能力还是很强大的,上网搜了一些资料,整理如下,以便能帮助大家更熟练的应用Freemarker完成项目开发. 一.Seq ...

  5. python内置的数字运算函数_Python 内置函数1

    abs(x)函数 返回绝对值 参数可以是:负数.正数.浮点数或者长整形 print(abs(-1.2)) # 结果1.2 cmp(x, y)函数 (python3已删) 中文说明: 比较两个对象x和y ...

  6. arduino 蓝牙示例_Arduino蓝牙编程教程

    步骤1:编程HC 05蓝牙模块 材料 1. Arduino Uno或任何开发板 2.跳线 3.如图所示,具有Arduino IDE的笔记本电脑 将HC 05与Arduino连接. 这是连接的简单概述 ...

  7. struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性

    有两种方式可以实现在Action中使用Servlet的API.一种是使用org.apache.struts2.ServletActionContext类,另一种是使用com.opensymphony. ...

  8. STM32白话文教程(三)内置按键模块、外接按键检测 三句话让你玩明白按键 水银倾斜模块

    还不知道检测输入电平信号用什么输入模式? 就简单的记住: 检测端口输入低电平0要用上拉 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 检测端口输入高电平1 ...

  9. 数字、字符串、列表类型及常用内置方法

    目录 可变不可变类型 基本数据类型及内置方法 数字类型 整型 浮点型 数字类型总结 字符串类型 字符串类型的常用操作+内置方法 字符串类型总结 列表类型 列表类型的常用操作+内置方法 列表类型总结 可 ...

最新文章

  1. PADS Layout VX.2.3 修改层名
  2. Linux-Raid0、Raid1、Raid5、Raid10初探
  3. 03 | 事务隔离:为什么你改了我还看不见
  4. SAP Marketing Cloud里的contact main facet是什么意思
  5. 成都Uber优步司机奖励政策(1月26日)
  6. 企业微信开发步骤 1.拿到企业的id,在我的企业,拖到最下面拿到企业id 2.拿到SECRET,这个secret只有先创建应用才会产生出来...
  7. StretchBlt()函数
  8. IOS之OC语言简介
  9. 「网络流 24 题」负载平衡
  10. linux安装ipk游戏,添加软件包 IPK
  11. word表格分开快捷键_Word使用技巧(表格技巧、快捷键)
  12. Tiny6410 的NandFlash(K9GAG08U0E)
  13. html 背景颜色设置为透明,css如何设置背景颜色透明?css设置背景颜色透明度的两种方法介绍...
  14. Linux之open虚拟专业网安装部署
  15. 临江仙·送钱穆父 | 苏轼
  16. ArcGIS笔记2_如何将经纬度WGS84地理坐标系转换为米单位CGCS2000投影坐标系
  17. Edge AI边缘智能:Communication-Efficient Edge AI: Algorithms and Systems(未完待续)
  18. Led智慧照明系统功能
  19. 【腾讯云原生降本增效大讲堂】云原生混部技术标准解读
  20. 今天真TMD闹心 哎呦我去了!!

热门文章

  1. 文具订购(【CCF】NOI Online能力测试 入门组第一题)
  2. 《南溪的python灵隐笔记》——有趣的Munch字典库
  3. 目标检测——YOLOV5的学习笔记(legcay)
  4. Python 获取剪切板
  5. 常用的Opencv函数汇总(持续更新...)
  6. 背包九讲 ----- 01背包问题模版
  7. IO流 (一) ----- 基本概念和FIle类
  8. [BZOJ]3727: PA2014 Final Zadanie
  9. 【Hadoop】HDFS笔记(三):HDFS的Shell操作
  10. 2012年8月20日 我单身了!