3

この例のコードをC gpio の例で使用してきました。定義に問題なく、ピンをセットアップして書き込むことができます。

// GPIO setup macros. Always use INP_GPIO(x) before using OUT_GPIO(x) or SET_GPIO_ALT(x,y)
#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
#define OUT_GPIO(g) *(gpio+((g)/10)) |=  (1<<(((g)%10)*3))
#define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))

#define GPIO_SET *(gpio+7)  // sets   bits which are 1 ignores bits which are 0
#define GPIO_CLR *(gpio+10) // clears bits which are 1 ignores bits which are 0

  INP_GPIO(4); // must use INP_GPIO before we can use OUT_GPIO
  OUT_GPIO(4);
  GPIO_SET = 1<<4;

これはうまくいきます。ただし、ピンから読み取りたい場合はどうすればよいかわかりません。戻って読んでみましたgpio + thePinが、値ではなくアドレスが表示されていると思います。ポインターを返そうとしましたが、ゴミ (-232783856) も発生しました。

ピンから値を読み取る方法はありますか?

4

1 に答える 1

4
#define GPIO_LEV *(gpio+13)                  // pin level
INP_GPIO(4);                                 // pin 4 initialization for reading
unsigned int value = GPIO_LEV;               // reading all 32 pins
bool pin4_value = ((value & (1 << 4)) != 0); // get pin 4 value

このコードは、 bcm2835 ライブラリの関数 bcm2835_gpio_lev に基づいており、ピン 0 ~ 31 でのみ使用できます。機能しない場合は、このライブラリを調べてください。値の読み取りが 2 倍になっています。

于 2013-05-05T21:52:04.443 に答える