tom 发表于 2012-11-18 19:49:52

[翻译]]Arduino自带范例Digital之StateChangeDetection

/*
翻译: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)

created27 Sep 2005
modified 30 Aug 2011
by Tom Igoe

        这个范例代码在公共范围(不受版权制约)
http://arduino.cc/en/Tutorial/ButtonStateChange

*/
/*
电路原理图

*/

//这个常量不会改变
const intbuttonPin = 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);
}

}










页: [1]
查看完整版本: [翻译]]Arduino自带范例Digital之StateChangeDetection