我试图制作一个简单的按钮,并用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;
}
答案 0 :(得分:0)
你是否以root身份运行?通常,/ sys / class / gpio中的文件由root拥有,因此您可能只是有权限问题。在您的代码中,文件操作和系统(3)的混合是不寻常的。可能更乐意专注于文件操作(但仍必须以root身份运行)。祝你好运。