gpt4 book ai didi

C 编写一个按钮,在按下时执行一次任务(锁存器)

转载 作者:太空狗 更新时间:2023-10-29 15:04:19 25 4
gpt4 key购买 nike

我对 c 和 Raspberry Pi 比较陌生,正在尝试简单的程序。我想要的是,当按下按钮时,它会 printfs 一次,并且在再次按下按钮之前不会再次 printf,即使按下按钮(某种闩锁)也是如此。我想也许添加第二个 while 循环可以解决这个问题,但有时它仍然检测不到按钮按下。

#include <bcm2835.h>
#include <stdio.h>
#define PIN RPI_GPIO_P1_11

int main()
{
if(!bcm2835_init())
return 1;

bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_INPT);

while(1)
{
if(bcm2835_gpio_lev(PIN))
{
printf("The button has been pressed\n");
}

while(bcm2835_gpio_lev(PIN)){}
}

bcm2835_close();
return 0;
}

最佳答案

你的逻辑是正确的,如果按钮是完美的,这会起作用。但他们不是。您必须去抖动按钮的信号。实现该目标的两种方法(结合使用效果最佳):

我。在按钮的两个引脚之间添加一个电容器(或尝试 an even more sophisticated button debouncer circuitry ),和/或

二。使用软件去抖动(伪 C):

while (1) {
while (!button_pressed)
;

printf("Button pressed!\n");


while (elapsed_time < offset)
;
}

等等

编辑:正如@jerry 所指出的,当按住按钮时,以上内容无法“正确”工作。这里有几个 more professional code snippets您可以使用它来满足所有要求。

关于C 编写一个按钮,在按下时执行一次任务(锁存器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306901/

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