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、そしておそらく他のピン...なぜですか? 誰でも私が理解するのを助けることができますか?