wiringPiISR запускает обратный вызов на каждом контакте - PullRequest
0 голосов
/ 29 сентября 2018

Я использую RaspberryPI с библиотекой Wiring в c ++, и я хочу использовать wiringPiISR для запуска события, когда я нажимаю кнопку на PIN-коде 5.

Это код

    #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 и 46 а может и другие ... ПОЧЕМУ?Кто-нибудь может помочь мне понять?

...