首页 > 其他分享 >1st_点亮一个LED灯

1st_点亮一个LED灯

时间:2023-06-11 18:25:04浏览次数:46  
标签:leds led 点亮 1st LED fd path run

原文:http://blog.chinaunix.net/uid-22072065-id-5759929.html

1. LED模块

点亮一个 LED 灯
    本节介绍如何使用命令行或 C 程序来控制 LED 灯点亮或熄灭。开发板上的可控 LED 灯
    通常都是一端接高电平或 GND,另一端接 GPIO。通过操作 GPIO 来控制其点亮和熄灭。
    两个 LED 是由发光二极管组成,一端接高电平,另一端若接入高电平,
    则二极管不导通, LED 不会发光。另一端若接入低电平,则二极管导通, LED 发光。高低
    电平一般由 GPIO 输出。

1.1 LED 的操作接口
    LED 操作接口位于/sys/class/leds 目录下。此目录下包含了关于 LED 操作的目录,如下所示:
    root@EasyARM-iMX283 /# ls /sys/class/leds/
    beep     led-err  led-run
    其中 led-err 目录是 ERR LED 的操作接口, led-run 目录是 RUN LED 的操作接口。以
    RUN LED 为例,进入 led-run 目录,该目录的内容为:
        root@EasyARM-iMX283 /sys/class/leds# ls
        beep     led-err  led-run
        root@EasyARM-iMX283 /sys/class/leds# ls led-run/
        brightness      max_brightness  subsystem       uevent
        device          power           trigger

    各个文件作用介绍如表 1.1所示。
            表 1.1 LED 属性文件用途
        文件名                         作用
        ---------------------------------
        brightness             用于控制 LED 亮灭(需要将 LED 灯设置为用户控制)
        subsystem             符号链接,指向父目录。
        
        trigger
                            写入“ none”可以将 LED 设置为用户控制
                            写入“ heartbeat”可以将 LED 设置为心跳灯
                            写入“ mmc0”可以将 LED 设置为 TF 卡检测指示灯
                            写入“ nand-disk”可以将 LED 设置为 NAND Flash 读写指示灯
                            
        power                 设备供电方面的相关信息
    
1.2 LED 控制
    以 led_run 灯为例,点亮命令如下:
    # echo none > /sys/class/leds/led-run/trigger         #将 LED RUN 设置为用户控制
    # echo 1     > /sys/class/leds/led-run/brightness     #控制 LED 点亮
    # echo 0     > /sys/class/leds/led-run/brightness     #控制 LED 熄灭
    
1.3 在 C 程序中操作 LED
    C 程序中操作 LED,首先需要设置 trigger 属性。如下代码片段,将 LED 灯设置为用户控制方式:
    
        #define TRIGGER_NONE "none"
        int fd = open(path, O_RDWR); //path 为 trigger 路径
        ...
        ret = write(fd, TRIGGER_NONE, strlen(TRIGGER_NONE));
        ...
    
    然后操作 brightness 属性, 设置 LED 点亮或熄灭:
        char data[2];
        int fd;
        ...
        fd = open(path, O_WRONLY); //path 为 brightness 路径
        data[0] = '0';
        ret = write(fd, data, 1); //熄灭 LED
        
    下面给出的程序清单 1.1,首先设置 LED trigger 属性为“ none”,然后设置 brightness
    属交替为 0 和 1。实现了 LED 每隔 1s 点亮一次。
    

点击(此处)折叠或打开

  1. #include <stdio.h>
  2.     #include <sys/types.h>
  3.     #include <sys/stat.h>
  4.     #include <fcntl.h>
  5.     #include <string.h>
  6.     
  7.     #define TRIGGER "trigger"
  8.     #define LED_PATH "/sys/class/leds/"
  9.     #define LED_STATUS "brightness"
  10.     #define TRIGGER_NONE "none"
  11.     
  12.     int main(int argc,char **argv)
  13.     {
  14.         char path[20],data[2];
  15.         int fd, ret, flag;
  16.         if(argv[1] == NULL) {
  17.             printf("usage : ./led led-run"); // 注意:这里应该是 led-run ,而不是 led_run
  18.             return 0;
  19.         }
  20.         strcpy(path, LED_PATH);
  21.         strcat(path, argv[1]); // 追加路径"/sys/class/leds/argv[1]" = /sys/class/leds/led_run
  22.         strcat(path, "/" TRIGGER); // 追加路径 /sys/class/leds/led_run/trigger
  23.         fd = open(path, O_RDWR);
  24.         if(fd < 0) {
  25.             perror("open");
  26.             return -1;
  27.         }
  28.         // 1. 设置LED_RUN为用户控制
  29.         ret = write(fd, TRIGGER_NONE, strlen(TRIGGER_NONE));
  30.         if(ret < 0) {
  31.             perror("write");
  32.             return -1;
  33.         }
  34.         close(fd);
  35.         
  36.         // 2. 设置brightness
  37.         strcpy(path, LED_PATH);
  38.         strcat(path, argv[1]);
  39.         strcat(path, "/" LED_STATUS);
  40.         fd = open(path, O_WRONLY);
  41.         if(fd < 0) {
  42.             perror("open");
  43.             return -1;
  44.         }
  45.         
  46.         for(;;)
  47.         {
  48.             // 每一秒亮灭一次
  49.             data[0] = flag ? '0': '1';
  50.             ret = write(fd, data, 1);
  51.             if(ret < 0) {
  52.                 perror("write");
  53.                 return -1;
  54.             }
  55.             flag = !flag;
  56.             sleep(1);
  57.         }
  58.         return 0;
  59.     }

标签:leds,led,点亮,1st,LED,fd,path,run
From: https://www.cnblogs.com/bruce1992/p/17473322.html

相关文章

  • Qt编译报错error: exception handling disabled, use -fexceptions to enable的解决方
    如题,在Qt中使用了C++标准库中的异常处理机制,即trycatch语句,在编译时报错error:exceptionhandlingdisabled,use-fexceptionstoenablecatch(std::exceptionexcp)解决方法:在Qt的工程文件中添加 CONFIG+=exceptions或者CONFIG-=exceptions_off,然后再重新编译就可以了......
  • Vue跨域配置异常采坑:Request failed with status code 401
    本地用Express作为服务端,前端Vue项目配置跨域代理,调用服务端api接口始终报错“Requestfailedwithstatuscode401”。原来发现是端口3000被占用了,被VSCode的一个插件占用了,修改为其他端口解决。具体解决过程记录一下。后端、前端配置Express服务端接口为3000,地址:http://lo......
  • 【愚公系列】2023年06月 攻防世界-Web(disabled_button)
    (文章目录)<hrstyle="border:solid;width:100px;height:1px;"color=#000000size=1">前言HTML中的disabled属性是一个布尔属性,用于禁用表单元素或按钮的交互性能,使其无法接收用户输入或点击等交互操作。具体来说,disabled属性被设置为true时,表单元素或按钮将无法响应用户的......
  • mysql 进程初始化killed问题
    问题描述:[root@it01soft]#/mysql/mysql57/bin/mysqld--defaults-file=/etc/my.cnf--user=mysql--initialize-insecure--consoleKilled问题分析:1.查看错误日志,错误日志报错如下:[root@it01soft]#more/mysqldata/mysql_3306/log/mysql-error.log2023-06-09T19:49:59.796928......
  • 学习,控制LED灯,亮2秒,灭1秒
      intled=13;voidsetup(){//putyoursetupcodehere,torunonce:pinMode(led,OUTPUT);}voidloop(){//putyourmaincodehere,torunrepeatedly:digitalWrite(led,HIGH);delay(2000);digitalWrite(led,LOW);delay(1000);}  ......
  • Android Studio 添加安卓虚拟设备时提示 No emulator installed
    在设置页面勾选两个工具即可,我遇到的情况是明明已经安装了这两个工具还是提示没有安装,于是我取消勾选把两个安装好的工具删除了,再勾选重新安装。果不其然就提示安装失败,不慌再试一遍,第二次安装过程中没报错了,再次添加安卓设备,成功启动了。 ......
  • Failed to bind properties under 'spring.datasource.primary' to javax.sql.DataSou
     2023-06-1011:04:13.778WARN22452---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:Error......
  • Failed to bind properties under 'spring.datasource.primary' to javax.sql.DataSou
     2023-06-1011:04:13.778WARN22452---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:Error......
  • Failed to bind properties under 'spring.datasource.primary' to javax.sql.DataSou
    ​  2023-06-1011:04:13.778WARN22452---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:......
  • Failed to bind properties under 'spring.datasource.primary' to javax.sql.DataSou
    ​  2023-06-1011:04:13.778WARN22452---[main]ConfigServletWebServerApplicationContext:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.UnsatisfiedDependencyException:......