TA的每日心情 | 奋斗 2018-11-15 08:49 |
---|
签到天数: 1031 天 连续签到: 2 天 [LV.10]以坛为家III
|
本帖最后由 liuyu-419812 于 2015-10-10 14:00 编辑
FirePrime开发板上有2个LED灯,可以使用LED设备子系统或者直接操作GPIO控制该LED。标准的 Linux 专门为 LED 设备定义了 LED 子系统。 在 FirePrime 开发板中的两个 LED 均以设备的形式被定义。用户可以通过 /sys/class/leds/ 目录控制这两个 LED。
开发板上的 LED 的默认状态为:
Blue: 系统上电时打开
Yellow:用户自定义
FirePrime Wiki给出了控制LED亮灭的一个方法:- root@firefly:~ # echo none >/sys/class/leds/firefly:yellow:user/trigger
复制代码 用户还可以使用 cat 命令获取 trigger 的可用值:- root@firefly:~ # cat /sys/class/leds/firefly:yellow:user/trigger
复制代码 另一种方法是通过echo向其brightness属性输入命令控制LED:- root@firefly:~ # echo 1 >/sys/class/leds/firefly:yellow:user/brightness
复制代码 也可以通过cat获取brightness的值,大于0的值就可以点亮LED。
除了在终端通过命令控制,也可以通过一个程序来控制,让LED闪烁。在程序里,主要通过open()函数和write()函数来实现LED控制。这两个函数的作用是:
open函数:打开/sys/class/leds/firefly:yellow:user/brightness文件。
write函数:向brightness写入数值。
为了使用这两个函数你需要包含一下头文件:
#include<fcntl.h>
#include <unistd.h>
在这个程序中让LED闪烁了10次,程序代码如下:- #include<stdio.h>
- #include<unistd.h>
- #include<fcntl.h>
- #include<string.h>
- void tdelay(int d)
- {
- volatile int j;
- for(j = 0; j<d*1000000;j++);
- }
- int main(int argc,char **argv)
- {
- int gpio_fd = -1;
- int ret;
-
- gpio_fd = open("/sys/class/leds/firefly:yellow:user/brightness",O_RDWR);
- if(gpio_fd < 0)
- {
- printf("open led failed\n");
- return -1;
- }
- int i;
- char off[] = "0";
- char on[] = "1";
- for(i = 0; i<10;i++)
- {
- printf("led on\n");
- ret = write(gpio_fd,on,strlen(on));
- if(ret < 0 )
- {
- printf("write to led failed\n");
- return -1;
- }
- tdelay(30);
- printf("led off\n");
- ret = write(gpio_fd,off,strlen(off));
- if(ret < 0 )
- {
- printf("write to led failed\n");
- return -1;
- }
- tdelay(10);
- }
- close(gpio_fd);
- printf("Hello World");
- return 0;
- }
复制代码 打开一个终端,定位到程序所在的文件夹,编译,执行。led.c为我的源文件。- gcc led.c -o led
- sudo ./led
复制代码 可以看到黄色的LED闪烁了10次。
|
|