如果你的按键工作后,通常你会需要基于按键按下多少次来做出反应。为了达到这个目的,你需要知道什么时候按键被打开或者关闭了,并且知道按键被按下的次数,这就是状态监测。
/* State change detection (edge detection) 通常你不需要一直知道数字输入的状态,但是你需要哪个时候知道输入状态改变了。 这个例子显示了怎么检测按键状态的改变 */ const int buttonPin = 15; // 按键连接的引脚 const int ledPin = 2; // LED连接的引脚 int buttonPushCounter = 0; // 按键按下次数的计数器 int buttonState = 0; // 当前按键状态 int lastButtonState = 0; // 前一次按键状态 void setup() { pinMode(buttonPin, INPUT); // 初始化按键为输入: pinMode(ledPin, OUTPUT); // 初始化LED为输出: Serial.begin(9600); // 初始化串口通讯: } void loop() { buttonState = digitalRead(buttonPin); // 读取按键输入: if (buttonState != lastButtonState) { // 比较两次按键状态 if (buttonState == HIGH) { // 如果状态改变了增加计数器 // 如果当前的状态是high,按键就从关到开 buttonPushCounter = buttonPushCounter + 1; Serial.println("on"); Serial.print("number of button pushes: "); Serial.println(buttonPushCounter); } else { Serial.println("off"); //如果当前的状态是low,按键就从开到关 } } lastButtonState = buttonState; // 保存当前的状态到上一次 if (buttonPushCounter % 4 == 0) { // 通过取模功能,每按4次键就点亮LED digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }