如何检测同时按下的按钮

时间:2019-05-01 11:55:15

标签: c wiringpi

当同时按下按钮1和2时,我想使其保持静音。它有效...但仅在某些时候。有时,它只会打印“ sim press”,而有时会显示“ Button-1 Clicked”和“ Sim press”

我要这样做,以便在同时按下btn 1和btn 2时,它们不打印“ button-1 clicked”或“ button-2 clicked”,而是打印“ sim按下”

我该如何实现?

我曾经尝试研究同时按下按钮,但我自己找不到用于接线的任何东西

包含

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <wiringPi.h>

#define sd 200
#define pin1 8
#define pin2 7

int a, b, c = 1;

按钮1按钮按下

void *btn1() {
    while(1) {
        if(!digitalRead(pin1) && digitalRead(pin2) && a) {
            a = 0;
            printf("Button-1 pressed\n");
            delay(sd);
        }
        if(digitalRead(pin1) && !a) {
            a = 1;
        }
    }
}

按下按钮2按钮

void *btn2() {
    while(1) {
        if(!digitalRead(pin2) && digitalRead(pin1) && b) {
            b = 0;
            printf("Button-2 pressed\n");
            delay(sd);
        }
        if(digitalRead(pin2) && !b) {
            b = 1;
        }
    }
}

同时按下按钮

void *simbtn() {
    while(1) {
        if(!digitalRead(pin1) && !digitalRead(pin2) && c) {
            c = 0;
            printf("Sim pressed\n");
            delay(sd);
        }
        if(digitalRead(pin1) && digitalRead(pin2) && !c) {
            c = 1;
        }
    }
}

创建线程

int main(void) {
    wiringPiSetupGpio();

    pthread_t tid[2];
    pthread_create(&tid[0], NULL, btn1, NULL);
    pthread_create(&tid[1], NULL, btn2, NULL);
    pthread_create(&tid[2], NULL, simbtn, NULL);

    while(1) {}

    return 0;
}

同时按下btn 1和btn 2会得到预期的结果:

Sim pressed

同时按下两个按钮时的实际结果(6次是一个很好的例子):

Button-1 pressed
Sim pressed
Button-1 pressed
sim pressed
button-2 pressed
sim pressed
Button-1 pressed
Sim pressed
Button-2 pressed
sim pressed
button-2 pressed
sim pressed

0 个答案:

没有答案