0

C ++の配線ライブラリで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 をコンパイルします

このコードは機能しますが、すべてのピンをクリックすると起動します...ピン5、さらに4と6、そしておそらく他のピン...なぜですか? 誰でも私が理解するのを助けることができますか?

4

0 に答える 0