2017-04-06 98 views
0

我试图制作一个简单的按钮,并用BBB引导,并且成功完成工作。但是我的问题是,在我按下按钮之前,应该关闭LED,但是当我运行代码时LED会自动打开,而当按下按钮时会关闭LED。我试图通过cd /sys/class/gpio/gpio44/ - echo 0 > value来设置上拉/下拉电阻,但它的“操作不允许”警告总是出现。有人能帮我吗?这里是我的代码:在Beaglebone黑色上设置上拉/下拉电阻

#include <stdio.h> 
#include <stdlib.h> 
#include <signal.h> 
#include <unistd.h> 
#include <time.h> 

void sig_handler(int signo) 
{ 
    if (signo == SIGINT) 
    printf("\nRecieved SIGINT\n"); 
    exit(1); 
} 

void GPIOREAD(char *url, char* val) 
{ 
    FILE *path = fopen(url,"r"); 
    fread(val, 2, 1, path); 
    fclose(path); 
} 

int main(void) 
{ 

    int status; 
    unsigned int cnt=0; 

    status = access("/sys/class/gpio/gpio44/value", F_OK); 
    if (status == -1) 
     { 
      //file doesnt exist 
      printf("GPIO_44 file doesnt exist dude\n"); 
      exit(1); 
     } 

    status = access("/sys/class/gpio/gpio45/value", F_OK); 
    if (status == -1) 
     { 
      //file doesnt exist 
      printf("GPIO_45 file doesnt exist dude\n"); 
      exit(1); 
     } 


    //set GPIO 45 as output 
    system("echo in > /sys/class/gpio/gpio44/direction"); 
    system("echo out > /sys/class/gpio/gpio45/direction"); 
    sleep(1); 

    char val[10]; 

    while(1) 
     { 
      GPIOREAD("/sys/class/gpio/gpio44/value", val); 
      printf("BUTTON STAT %s\n", val); 

      if(!strcmp(val,"1\n")) 
      { 
       printf("%u) AAA LED --- ON\n", cnt); 
       system("echo 1 > /sys/class/gpio/gpio45/value"); 
      } 
      else 
      { 
       printf("%u) AAA LED --- OFF\n", cnt); 
       system("echo 0 > /sys/class/gpio/gpio45/value"); 
      } 
     } 

    return 0; 
} 

回答

0

你是否以root身份运行?通常,/ sys/class/gpio中的文件由root拥有,因此您可能只是有权限问题。在您的代码中,文件操作和系统(3)的混合是不寻常的。可能会更喜欢专注于文件操作(但仍然必须以root身份运行)。祝你好运。

+0

我已经运行它作为根,但仍然..它不断告诉我,即使其中的文件已经rwx – user6318361

+0

好吧,很高兴知道。 GPIO方向如何?它必须“出来”或不会让你更新价值。 – guycole

+0

我已经设置了输入,但默认值是1而不是0 – user6318361