独立按键未按下时只有两组引脚连接,按下之后,四个引脚连接在一起。未按下时在桥的同侧共通,不同侧不共通。按下时都共通。所以可以利用这一特性给单片机充当开关。当按键同侧有电压时,将另一侧与引脚相连,当按键按下时引脚的电平会被拉高,此时只需要检测引脚的电平状态就能判断按键是否按下,若按下时单片机执行什么操作,本例是让它点灯。
按住按钮点灯代码
int buttonState = 0;
void setup()
{
pinMode(2, INPUT);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
// 读取2引脚电平状态并储存在buttonState中
buttonState = digitalRead(2);
// 判断按钮是否按下
if (buttonState == HIGH) {
// 按下点灯
digitalWrite(LED_BUILTIN, HIGH);
} else {
//没按下关灯
digitalWrite(LED_BUILTIN, LOW);
}
delay(10); //延时
按一次按键led灯状态翻转
int buttonState = 0; //初始化状态储存值
void setup() //初始化函数
{
pinMode(2, INPUT); //初始化2引脚为输入模式
pinMode(LED_BUILTIN, OUTPUT); //初始化13引脚为输入模式
Serial.begin(9600); //打开串口通讯
}
void loop() //循环主函数
{
buttonState = digitalRead(2);//读取2引脚的电平状态并储存在buttonState中
if (buttonState == HIGH) { //判断函数
delay(100); //延时函数
if(buttonState == HIGH){ //二次判断函数消抖
if(digitalRead(13)==LOW){ //led反转判断
digitalWrite(LED_BUILTIN, HIGH);
}
else{ //led反转判断
digitalWrite(LED_BUILTIN, LOW);
}
while(buttonState==digitalRead(2)); //循环按键消抖
}
Serial.println(buttonState); //串口通信打印出2引脚电平状态
}
delay(10); //延时函数
}
当按键按下时由于是弹簧金属触片接触瞬间存在接触不良的情况,电平状态混乱,因此我们设计延时并使它二次判断减少接触误差,当时还是会存在误差的,所以我们用while循环使它一直卡在电平稳定的时段。