数字部分-状态改变监测

一旦你有一个工作的按键,你经常会想基础按键次数来激发一些东西。为了做这个,你需要知道何时按键的开和关和多少次这个状态发生了改变。这个就叫做状态变化监测或者叫边缘监测。这个教程就是来告诉你,我们如何确认状态改变。我们记录四次按键后开或关LED,把相关信息发送到串口监视器上。

硬件需求
—Arduino控制板
—按键开关
—10K电阻
—杜邦线或面包线
—面包板

电路
clip_image002
用三根面包线把主控板和面包板连接到一起,一根线接地,通过一个10K电阻连接到按键开关的一角。第二根控制板的5V接入按键开关的另一角。第三根线接着2号引脚,用来读取按键状态。
当按键没有按下的时候,没有连接通过按键的两个脚,所以2号引脚是通过下拉电阻接地的,我们读取到的是LOW。当按键按下的时候,按键两个脚连接起来,接入正极。这个时候我们读取到的是HIGH。
如果不用到下拉电阻的话,数字IO引脚就会读取到一个不稳定的值,可能是HIGH或LOW,也就是我们为什么需要下拉电阻的原因。

原理图
clip_image004

代码

下面的代码连续读取按键的状态。它通过比较按键在循环中的目前状态和上一次状态来比较。如果现在的状态和之前的状态不同,并且现在的状态是HIGH,就把按键状态从off改成on。之后进入相反运行。

这段代码同时计算按键的累计值,如果是四的倍数,就打开13号引脚的LED,否则就关闭LED。

const int  buttonPin = 2; // 定义读取按键的引脚

const int ledPin = 13; //定义LED引脚

// 变量会改变

int buttonPushCounter = 0; // 存储按键次数

int buttonState = 0; // 存储目前按键状态

int lastButtonState = 0; //存储上一次按键状态

void setup() {

// 定义buttonPin为输入模式

pinMode(buttonPin, INPUT);

// 定义LED引脚为输出模式

pinMode(ledPin, OUTPUT);

// 定义串口通信频率

Serial.begin(9600);

}

void loop() {

// 读取按键引脚的值:

  buttonState = digitalRead(buttonPin);

// 把现在的状态和上一次状态作比较

if (buttonState != lastButtonState) {

//如果状态改变了,增加计数

if (buttonState == HIGH) {

// 如果状态时HIGH,按键输出OFF改为ON

buttonPushCounter++;

Serial.println("on");

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

Serial.println(buttonPushCounter);

} else {

//如果目前的状态时LOW,则按键从ON转为OFF

Serial.println("off");

}

// 延迟一点时间避免反复

delay(50);

}

// 保存目前的状态到上一次状态,为下次循环做准备

  lastButtonState = buttonState;

// 如果按键计数是4个倍数,则点亮13号引脚的板载LED,反之则熄灭

if (buttonPushCounter % 4 == 0) {

digitalWrite(ledPin, HIGH);

} else {

digitalWrite(ledPin, LOW);

}

}
0
分享到:

评论0

请先

本站资料配套硬件销售店铺:天猫店ultirobot.tmall.com 、三冠淘宝店zhongbest.taobao.com
没有账号? 忘记密码?