Arduino UNO 一个按键实现控制一个LED的亮灭翻转 (定时器中断消抖,带看门狗喂狗)
#include <MsTimer2.h>
#include <avr/wdt.h>
#define LED 13 //13号引脚 高电平点亮
#define KEY 8 //按键 8号引脚 低电平按下
#define KEY_MS 25 //按键消抖时间 25毫秒
void setup() {
pinMode(LED, OUTPUT); //LED输出引脚
pinMode(KEY,INPUT_PULLUP); //按键 使能上拉电阻
MsTimer2::set(1,ms1); //1ms定时器
MsTimer2::start(); //开定时器中断
wdt_enable(WDTO_2S); //开看门狗 2秒溢出
}
bool key; //按键 1按下 0松开
bool okey; //上次的按键状态
unsigned char key_ms=0; //按键按下时间 按住计数 最大255 松开清0
void loop() {
delay(1000);
wdt_reset(); //看门狗喂狗
}
void ms1(){ //1ms定时器中断
if(digitalRead(KEY)){ //按键松开
key_ms = 0;
} else { //按键按下
if(key_ms != 255){
key_ms++;
}
}
key = (key_ms >= KEY_MS);
if(!okey && key){
digitalWrite(LED,!digitalRead(LED));
}
okey = key;
}
页:
[1]