怎样根据按键时间长短来实现不同功能,Arduino
答案:1 悬赏:50 手机版
解决时间 2021-11-28 12:59
- 提问者网友:藍了天白赴美
- 2021-11-27 23:24
怎样根据按键时间长短来实现不同功能,Arduino
最佳答案
- 五星知识达人网友:零点过十分
- 2021-11-28 00:53
#include
#define KEY 12
uint16_t key_cnt;
boolean key_flag;
#define TIME_20MS 2
#define TIME_200MS 20
#define TIME_1S 100
#define TIME_3S 300
#define TIME_5S 500
#define TIME_10S 1000
#define TIME_20S 2000
void TimerCBK(void)
{
key_cnt++;
}
void setup(void)
{
pinMode(KEY, INPUT);
key_cnt = 0;
key_flag = false;
MsTimer2::set(10, TimerCBK); // 10ms调用一次TimerCBK函数
MsTimer2::start();
}
void loop(void)
{
if (digitalRead(KEY) == LOW) //按键按下
{
key_flag = true;
}
else if (key_flag == true) //按键被放开,但按键事件还未被处理
{
if (key_cnt < TIME_20MS)
{
//按键按下时间太短,不做处理
}
else if (key_cnt <= TIME_200MS)
{
//短按
//do something here.
}
else if (key_cnt <= TIME_1S)
{
//长按1
//do something here.
}
else if (key_cnt <= TIME_3S)
{
//长按2
//do something here.
}
else if (key_cnt >= TIME_20S)
{
//按键坏了?
//error
}
key_flag = false;
}
else //按键被放开,且按键触发的事件也已经被处理
{
key_cnt = 0; //计时清零。
}
}
//代码给你了,求采纳。
#define KEY 12
uint16_t key_cnt;
boolean key_flag;
#define TIME_20MS 2
#define TIME_200MS 20
#define TIME_1S 100
#define TIME_3S 300
#define TIME_5S 500
#define TIME_10S 1000
#define TIME_20S 2000
void TimerCBK(void)
{
key_cnt++;
}
void setup(void)
{
pinMode(KEY, INPUT);
key_cnt = 0;
key_flag = false;
MsTimer2::set(10, TimerCBK); // 10ms调用一次TimerCBK函数
MsTimer2::start();
}
void loop(void)
{
if (digitalRead(KEY) == LOW) //按键按下
{
key_flag = true;
}
else if (key_flag == true) //按键被放开,但按键事件还未被处理
{
if (key_cnt < TIME_20MS)
{
//按键按下时间太短,不做处理
}
else if (key_cnt <= TIME_200MS)
{
//短按
//do something here.
}
else if (key_cnt <= TIME_1S)
{
//长按1
//do something here.
}
else if (key_cnt <= TIME_3S)
{
//长按2
//do something here.
}
else if (key_cnt >= TIME_20S)
{
//按键坏了?
//error
}
key_flag = false;
}
else //按键被放开,且按键触发的事件也已经被处理
{
key_cnt = 0; //计时清零。
}
}
//代码给你了,求采纳。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯