一、LED设备的属性文件
1、brightness:亮度,该属性文件可读可写;所以这个属性文件是用于设置 LED 的亮度等级或者获取当前 LED 的亮度等级,譬如 brightness 等于 0 表示 LED 灭,brightness 为正整 数表示 LED 亮,其值越大、LED 越亮;对于 PWM 控制的 LED 来说,这通常是适用的,因为它存在亮度等级的问题,不同的亮度等级对应不同的占空比,自然 LED 的亮度也是不同的;但对于 GPIO控制(控制 GPIO 输出高低电平)的 LED 来说,通常不存在亮度等级这样的说法,只有 LED 亮 (brightness 等于 0)和 LED 灭(brightness 为非 0 值的正整数)两种状态。
2、max_brightness:该属性文件只能被读取,不能写,用于获取 LED 设备的最大亮度等级。
3、trigger:触发模式,该属性文件可读可写,读表示获取 LED 当前的触发模式,写表示设置 LED 的 触发模式。不同的触发模式其触发条件不同,LED 设备会根据不同的触发条件自动控制其亮、灭状态,通过 cat 命令查看该属性文件,可获取 LED 支持的所有触发模式以及 LED 当前被设置的触发模式。可以使用cat命令查看。
二、编写 LED的程序
/*点亮led*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
//触发方式
#define LED_TRIGGER "/sys/class/leds/sys-led/trigger"
//亮度等级
#define LED_BRIGHTNESS "/sys/class/leds/sys-led/brightness"
#define USAGE() fprintf(stderr,"usage:\n"" %s<on|off>\n"" %s<trigger><type>\n",\
argv[0],argv[0])
int main(int argc,char* argv[])
{
int fd1,fd2,ret;
//检验传参
if(argc < 2)
{
USAGE();
exit(-1);
}
//打开文件
fd1 = open(LED_TRIGGER,O_RDWR);
if(fd1 == -1)
{
perror("open error1");
exit(-1);
}
fd2 = open(LED_BRIGHTNESS,O_RDWR);
if(fd2 == -1)
{
perror("open error2");
ret = -1;
goto out1;
}
//根据传参控制LED
if(strcmp(argv[1],"on") == 0) //使用字符串比较函数,相等返回0
{
//修改触发方式,无触发none
write(fd1,"none",4);
//修改亮度等级为1
write(fd2,"1",1);
}
else if(strcmp(argv[1],"off") == 0)
{
//修改触发方式,无触发none
write(fd1,"none",4);
//修改亮度等级为0 write(fd2,"0",1);
}
else if(strcmp(argv[1],"trigger") == 0)
{
//检验传参
if(argc != 3)
{
USAGE();
ret = -1;
goto out2;
}
//修改触发方式
if(write(fd1,argv[2],strlen(argv[2])) < 0)
{
perror("write error");
ret = -1;
goto out2;
}
}
else
{
USAGE();
}
out2:
close(fd2);
out1:
close(fd1);
exit(-1);
}
三、编译可执行文件
arm-linux-gnueabihf-gcc -o led led.c
编译完成可得到一个led的可执行文件。
四、上板测试
在上板之前,将前面编译出来的可执行文件拷贝到开发板系统中,这里使用scp命令。
scp led root@192.168.1.108:/root
scp :拷贝命令。
led :可执行文件
root:开发板用户名
192.168.1.108: 开发板网络地址
/root:保存的路径。
在1处输入密码,这里默认不显示。
然后在开发板系统的路径下可以找到刚才拷贝的可执行文件。
然后执行led程序
./led on //打开led
./led off //关闭led
./led trigger heartbeat //使led以心跳的方式闪烁
./led trigger timer //使led以一定时间进行闪烁