在Beaglebone Black

时间:2017-04-06 09:19:10

标签: beagleboneblack

我试图制作一个简单的按钮,并用BBB领导,我成功地让它发挥作用。但我的问题是,在我按下按钮之前,LED应该关闭,但是在我运行代码时led会自动打开,当我按下按钮时它会关闭。我试图将上拉/下拉电阻设置为cd /sys/class/gpio/gpio44/ - echo 0 > value,但始终显示“不允许操作”警告。有人能帮我吗?这是我的代码:

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

1 个答案:

答案 0 :(得分:0)

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