2017-04-06 28 views
0

Ich habe versucht, einen einfachen Druckknopf zu machen und führte mit BBB, und ich habe es geschafft, damit es funktioniert. Aber meine Frage ist, dass die LED ausgeschaltet sein sollte, bevor ich den Knopf drücke, aber damit wird die LED automatisch eingeschaltet, wenn ich den Code starte, und ausgeschaltet, wenn ich den Knopf drücke. Ich versuche, den Pull-Up/Down-Widerstand durch cd /sys/class/gpio/gpio44/ - echo 0 > value zu setzen, aber es erscheint immer die Warnung "Operation nicht erlaubt". Kann mir jemand helfen? Hier ist mein Code:Set Pull Up/Down Widerstand auf Beaglebone Black

#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; 
} 

Antwort

0

Laufen Sie als root? In der Regel gehören die Dateien in/sys/class/gpio zu root, sodass Sie möglicherweise nur ein Berechtigungsproblem haben. In Ihrem Code ist die Mischung aus Dateioperationen und System (3) ungewöhnlich. Könnte glücklicher sein, sich nur auf Dateioperationen zu konzentrieren (aber trotzdem als root laufen). Viel Glück.

+0

Ich führe es bereits als root, aber immer noch .. es halten mich die Warnung, auch die Datei drin schon rwx – user6318361

+0

OK, gut zu wissen. Wie sieht es mit der GPIO-Richtung aus? Es muss "out" sein oder wird Ihnen nicht erlauben, den Wert zu aktualisieren. – guycole

+0

ich habe bereits festgelegt, dass eingegeben werden soll, aber der Standardwert ist 1 nicht 0 – user6318361

Verwandte Themen