2013-04-10 3 views
3

나는이 코드를 example에서 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
#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 library의 기능 bcm2835_gpio_lev를 기반으로 만 작동하지 않는 경우,이 라이브러리로 보면 31 핀 0에 사용할 수 있습니다 - 값의 읽기가 배가됩니다.