gpt4 book ai didi

c - XMEGA AVR 中的按钮去抖动

转载 作者:行者123 更新时间:2023-11-30 15:03:43 26 4
gpt4 key购买 nike

我正在尝试在 xmega 中制作一个简单的开/关开关。例如,如果我按一次,它应该显示

good

如果我再按一次,它应该显示

bad

等等..

我知道如何在 Arduino 中进行按钮去抖,但我真的不知道 AVR。有人可以帮助我,或者给我一些示例代码来学习吗?

这是我到目前为止的代码:

if (!(PORTH_IN&PIN0_bm)) 
{
if (Mode1 != 1)
{
Mode1 = 1;
printf("%d\n", Mode1);
}
}

if (!(PORTH_IN&PIN0_bm))
{
if (Mode1 != 0)
{
Mode1 = 0;
printf("%d\n", Mode1);
}
}

最佳答案

我会为此创建一个小型状态机:

static int debounce_guard;
static int button_has_been_pressed;

void read_button_state()
{
switch(button_is_pressed)
{
case YES:
if(debounce_guard == 0)
{
button_has_been_pressed = 1;
}
break;
case NO:
if(button_has_been_pressed)
{
/* Do stuff here */
debounce_guard = 10000;
button_has_been_pressed = 0;
}
break;
}

if(debounce_guard > 0)
debounce_guard--;
}

(button_is_pressed 变量应反射(reflect) GPIO 引脚的状态)

这个想法是 debounce_guard 应该让您忽略按钮的冗余弹跳,并且应该使用一些计时器或仅在函数本身中减少该变量,如所示的代码所示。状态机将使用react,然后用户释放按钮。

关于c - XMEGA AVR 中的按钮去抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com