查看: 2314|回复: 4

[原创] 【FirePrime】编程点亮LED

[复制链接]
  • TA的每日心情
    奋斗
    2018-11-15 08:49
  • 签到天数: 1031 天

    连续签到: 2 天

    [LV.10]以坛为家III

    发表于 2015-10-10 13:50:45 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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亮灭的一个方法:
    1. root@firefly:~ # echo none >/sys/class/leds/firefly:yellow:user/trigger
    复制代码
    用户还可以使用 cat 命令获取 trigger 的可用值:
    1. root@firefly:~ # cat /sys/class/leds/firefly:yellow:user/trigger
    复制代码
    另一种方法是通过echo向其brightness属性输入命令控制LED:
    1. 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次,程序代码如下:
    1. #include<stdio.h>
    2. #include<unistd.h>
    3. #include<fcntl.h>
    4. #include<string.h>

    5. void tdelay(int d)
    6. {
    7.         volatile int j;
    8.         for(j = 0; j<d*1000000;j++);
    9. }

    10. int main(int argc,char **argv)
    11. {
    12.         int gpio_fd =  -1;
    13.         int ret;
    14.         
    15.         gpio_fd = open("/sys/class/leds/firefly:yellow:user/brightness",O_RDWR);
    16.         if(gpio_fd < 0)
    17.         {
    18.                 printf("open led failed\n");
    19.                 return -1;
    20.         }
    21.         int i;
    22.         char off[] = "0";
    23.         char on[] = "1";
    24.         for(i = 0; i<10;i++)
    25.         {
    26.                 printf("led on\n");
    27.                 ret = write(gpio_fd,on,strlen(on));
    28.                 if(ret < 0 )
    29.                 {
    30.                         printf("write to led failed\n");
    31.                         return -1;
    32.                 }
    33.                 tdelay(30);

    34.                 printf("led off\n");
    35.                 ret = write(gpio_fd,off,strlen(off));
    36.                 if(ret < 0 )
    37.                 {
    38.                         printf("write to led failed\n");
    39.                         return -1;
    40.                 }
    41.                 tdelay(10);
    42.         }
    43.         close(gpio_fd);

    44.         printf("Hello World");
    45.         return 0;
    46. }
    复制代码
    打开一个终端,定位到程序所在的文件夹,编译,执行。led.c为我的源文件。
    1. gcc led.c -o led
    2. sudo ./led
    复制代码
    可以看到黄色的LED闪烁了10次。
    P51010-121523.jpg

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-4-14 10:16
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-10-13 11:43:52 | 显示全部楼层
    不错不错,顶一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-11-23 14:54
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2015-10-14 21:28:50 | 显示全部楼层
    请问一下楼主,你这个是怎么编译的呢?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-11-15 08:49
  • 签到天数: 1031 天

    连续签到: 2 天

    [LV.10]以坛为家III

     楼主| 发表于 2015-10-15 10:29:13 | 显示全部楼层
    写的c代码,直接用gcc编译的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-11-15 08:49
  • 签到天数: 1031 天

    连续签到: 2 天

    [LV.10]以坛为家III

     楼主| 发表于 2015-10-15 10:30:40 | 显示全部楼层
    caizhiwei 发表于 2015-10-14 21:28
    请问一下楼主,你这个是怎么编译的呢?

    写的c代码,直接用gcc编译的
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 06:16 , Processed in 0.151725 second(s), 24 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.