#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
//设置gpio方向 "in" or "out"
void SetGpioDirection(int n,char *direction)
{
char path[100] = {0};
sprintf(path,"/sys/class/leds/:power/direction",n);
FILE * fp =fdopen(path,"w");
if (fp == NULL)
perror("direction open filed");
else
fprintf(fp,"%s",direction);
fclose(fp);
}
//设置gpio的电平
void Set_GpioValue(int value)
{
char path[64];
FILE *fp = fopen("/sys/class/leds/:power/brightness", "w");
if (fp == NULL)
printf("direction open filed");
else
fprintf(fp, "%d", value);
fclose(fp);
}
//获取gpio的值
int getGpioValue()
{
char path[64];
char value_str[3];
int fd;
fd = open("/sys/class/leds/:power/brightness", O_RDONLY);
if (fd < 0) {
printf("Failed to open!");
return -1;
}
if (read(fd, value_str, 3) < 0) {
printf("Failed to read value!");
return -1;
}
close(fd);
return (atoi(value_str));
}
//设置gpio trigger
void Set_gpioTrigger()
{
char path[64];
FILE *fp = fopen("/sys/class/leds/:power/trigger", "w");
if (fp == NULL)
printf("direction open filed");
else
fprintf(fp, "timer");
fclose(fp);
}
int main(int argc, char *argv[])
{
int gpionum;
if(0==atoi(argv[1]))
{
Set_GpioValue(0);
gpionum=getGpioValue();
printf("GetGpioValue = %d\n",gpionum);
sleep(1);
}
if(1==atoi(argv[1]))
{
Set_GpioValue(1);
gpionum=getGpioValue();
printf("GetGpioValue = %d\n",gpionum);
sleep(1);
}
while(1);
return 0;
}
linux应用GPIO控制led节点
于 2022-05-23 16:16:12 首次发布