/*
翻译:tom
时间:2012年11月18日
IDE版本号:1.01
发表地址:www.geek-workshop.com
翻译说明: 根据arduino自带的范例进行翻译,可能根据实际的需要略作修改
*/
/*
State change detection (edge detection) (状态)变化检查
通常,你不需要知道数字输入端在所有时间的状态,但是你仅仅需要知道当输入(端)从一个状态变成另一个状态.
例如,你想知道当一个按纽的状态从OFF变成ON.这称之为变化检查或边缘检查.
这个例子展示如何侦查当一个按纽或按纽变化从OFF到ON,和从ON到OFF.
电路描述:
*按纽连接在数字端口2到+5V
*10K电阻通过2号端到GND
*LED 连接13号数字端至GND(或使用板载的LED)
created 27 Sep 2005
modified 30 Aug 2011
by Tom Igoe
这个范例代码在公共范围(不受版权制约)
http://arduino.cc/en/Tutorial/ButtonStateChange
*/
/*
电路原理图
*/
//这个常量不会改变
const int buttonPin = 2; //pushbutton连接在2号数字端口
const int ledPin = 13; //LED连接在数字端口13
//变量将改变
int buttonPushCounter = 0;
//buttonPushCounter统计按纽按下次数的变量
int buttonState = 0;
//buttonState当前按纽状态变量
int lastButtonState = 0; //上次按纽状态变量lastButtonState
void setup() {
//初始化按纽端口作为输入模式
pinMode(buttonPin, INPUT);
//初始化LED端作为输出模式
pinMode(ledPin, OUTPUT);
//初始化串口通信
Serial.begin(9600);
}
void loop() {
//读取pushbutton的输入值
buttonState = digitalRead(buttonPin);
//比较buttonState的状态和它上次的状态
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");
}
}
//存储当前状态作为上次状态
//为下次通过循环(做准备)
lastButtonState = buttonState;
//打开LED每四次按纽按下时
//检查模数放入计数器中
//模函数给出剩余的两个数字
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
|