0

我在 C++ 中使用带有 Wiring libray 的 RaspberryPI,当我单击 PIN 5 上的按钮时,我想使用 WiringPiISR 来触发事件。

这是代码

    #include <stdio.h>
    #include <string.h>
    #include <errno.h>
    #include <stdlib.h>
    #include <wiringPi.h>
    #include <unistd.h>

    unsigned long last_interrupt_time = 0;

    #define PIN 5

    //gcc foo.c -o foo -lwiringPi

    void myEdge (void)
    {
        unsigned long interrupt_time = millis();
        if (interrupt_time - last_interrupt_time > 500) 
        {
            delay(200);
            if( digitalRead(PIN)== 1 ) 
                fprintf(stdout,"gpio rising\n");
            else 
                fprintf(stdout,"gpio falling\n");

            fflush(stdout);
        }
        last_interrupt_time = interrupt_time;  
    }

    int main (int argc,char **argv)
    {
        if (wiringPiSetupGpio() < 0)
        {   
            fprintf (stderr, "Errore: Unable to GPIO: %s\n", strerror (errno)) ;
            return 1 ;
        }

        pinMode(PIN, INPUT) ;
        pullUpDnControl(PIN, PUD_DOWN) ;

        if (wiringPiISR (PIN, INT_EDGE_BOTH , &myEdge) < 0)
        {
            fprintf (stderr, "Errore: Unable to setup ISR: %s\n", strerror (errno)) ;
            return 1 ;
        }

    while (1)
        delay (1000) ;

    return 1;
}

我编译白色 gcc foo.c -o foo -lwiringPi

此代码有效,但是当我单击每个 PIN时会触发...第 5 针,还有第 4 和第 6 号,也许还有其他...为什么?任何人都可以帮助我理解吗?

4

0 回答 0