ATK-DLMP135开发板点亮LED

一、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命令查看。

        常用的触发模式包括:none(无触发)、mmc0 (当对 mmc0 设备发起读写操作的时候 LED 会闪烁)、 timer LED 会有规律的一 亮一灭,被定时器控制住)、heartbeat (心跳呼吸模式, LED 模仿人的心跳呼吸那样亮灭变化)。

二、编写 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以一定时间进行闪烁

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦梦梦梦子~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值