点亮LED
创始人
2025-05-29 22:57:34

目录

一、LED 硬件控制方式

二、LED 应用程序

1、定义宏

2、main函数

①、打开文件

 ②、操作设备

三、测试


一、LED 硬件控制方式

        开发板底板上有一颗可被用户控制的 LED 灯,对开发板出厂系统来说, 此 LED 设备使用的是 Linux 内核标准 LED 驱动框架注册而成, 在/dev 目录下并没有其对应的设备节点,其实现使用 sysfs 方式控制。

        进入到/sys/class目录下,如下所示:

         系统中的所有设备根据其功能分类组织到了/sys/class 目录下,所以/sys/class/目录下便存放了所有的 LED 类设备。进入查看

        从上图可以看到该目录下有一个 sys-led 文件夹, 这个便是底板上的用户 LED 设备文件夹,进入到该目录下,如下所示:

         这里我们主要关注便是 brightness、 max_brightness 以及 trigger 三个文件,这三个文件都是 LED 设备的属性文件

①brightness: 翻译过来就是亮度的意思, 该属性文件可读可写;所以这个属性文件是用于设置 LED的亮度等级或者获取当前 LED 的亮度等级,譬如 brightness 等于 0 表示 LED 灭, brightness 为正整数表示 LED 亮,其值越大、 LED 越亮;

        对于 PWM 控制的 LED 来说, 这通常是适用的,因为它存在亮度等级的问题,不同的亮度等级对应不同的占空比,自然 LED 的亮度也是不同的;

        但对于 GPIO控制(控制 GPIO 输出高低电平)的 LED 来说,通常不存在亮度等级这样的说法,只有 LED 亮(brightness 等于 0)和 LED 灭(brightness 为非 0 值的正整数)两种状态,这里开发板上的这颗 LED 就是如此,所以自然就不存在亮度等级一说,只有亮和灭两种亮度等级

②max_brightness: 该属性文件只能被读取,不能写,用于获取 LED 设备的最大亮度等级

③trigger: 触发模式,该属性文件可读可写,读表示获取 LED 当前的触发模式,写表示设置 LED 的触发模式。不同的触发模式其触发条件不同, LED 设备会根据不同的触发条件自动控制其亮、灭状态。

        cat 命令查看该属性文件,可获取 LED 支持的所有触发模式以及 LED 当前被设置的触发模式

         方括号([heartbeat])括起来的表示当前 LED 对应的触发模式,这个就是心跳呼吸模式, LED 模仿人的心跳呼吸那样亮灭变化;none是无触发、 mmc0是当对 mmc0 设备发起读写操作的时候 LED 会闪烁、 timer是LED 会有规律的一亮一灭,被定时器控制住

二、LED 应用程序

1、定义宏

        既然led灯是受trigger(模式触发)文件和brightness(开关方式)文件来控制,那么在应用上面,我们就可以利用这俩个文件进行对led灯的操作,由上面分析可以知道这两个文件的路径,下面就先定义这俩个文件路径的宏,方便后续直接操作,如下

 下面再定义一个错误提示的宏函数

         宏函数名字为USAGE,内容是一个fprintf(),这是格式化输出函数,函数原型如下

int fprintf(FILE *stream, const char *format, ...);

         fprintf()函数用于将格式化数据写入到指定的文件中,使用 FILE 指针指定对应的文件,将格式化数据写入到由 FILE 指针指定的文件中,这里FILE指指向的是stderr(标准错误文件),最后格式化输出错误信息。

2、main函数

①、打开文件

        在mian函数里面,我们需要先打开这两个文件,采用可读可写的方式打开,不然要操作led灯的时候不能把想要的操作字符写到对应的文件里面去

         第一个if,如果传入的参数少于两个,就提示输入错误信息并退出

        第二、三个if,如果打开文件错误报错并退出

 ②、操作设备

         打开设备文件之后,就开操作led灯了,这里默认设定是“on”是开灯,“off”是关灯

41、46、51行,都使用了用于字符串比较的函数 strcmp(),原型如下所示

int strcmp(const char *s1, const char *s2)

s1: 进行比较的字符串 1。
s2: 进行比较的字符串 2。

返回值:
⚫ 如果返回值小于 0,则表示 str1 小于 str2
⚫ 如果返回值大于 0,则表示 str1 大于 str2
⚫ 如果返回值等于 0,则表示字符串 str1 等于字符串 str2

 使用传进来的参数比较,如果出现少于或者大于,不管正负,取反就会等于0,则不执行对应的内容,如果等于0,就说明两个字符串相等,就会执行对应的内容,执行对应内容时,先调用 write()将"none"写入到 trigger 属性文件中,也就是设置为无触发,把灯先关了,接着再向 brightness 属性文件中写入"1"点亮 LED或者“0”关闭LED

需要注意的,51行,这里判断是不是选择直接输入trigger(触发模式),因为这个需要额外多输入一个字符串设置模式的,所以需要传进三个参数

53-57行就是要判断,如果是选择了输入trigger(触发模式),就判断它是不是传进三个参数,否则报错

58-60行,经过判断确实是按要求传进了三个参数,就把第三个参数写进trigger(触发模式)文件里面

最后,如果输入的都不符合上面的条件,直接报错信息

三、测试

用交叉编译器编译文件之后发送到开发板上执行

故意输入错误试试

 可以看到就提示错误信息了

开灯,关灯,使用定时器模式闪烁

 开发板上的灯都对应执行操作来亮

相关内容

热门资讯

黄鹤楼在哪个省份哪个城市(黄鹤... 今天给各位分享黄鹤楼在哪个省份哪个城市的知识,其中也会对黄鹤楼在哪个省是在哪个地方进行解释,如果能碰...
厦门信达广汽丰田凯美瑞最新报价... 今天给各位分享厦门信达广汽丰田凯美瑞最新报价可试乘试驾的知识,其中也会对厦门信达汽车有哪些品牌进行解...
网络用语切糕是什么意思(网络用... 本篇文章极速百科给大家谈谈网络用语切糕是什么意思,以及网络用语切糕是什么意思啊对应的知识点,希望对各...
产品导购:同为554拖拉机,到... 本篇文章极速百科给大家谈谈产品导购:同为554拖拉机,到底谁更胜一筹?,以及504拖拉机和554拖拉...
【设计相关】UML类图和时序图... 文章目录一、 什么是UMLUML的定义UML的应用场景类图(Class Diagram...
[图神经网络]图特征工程 一、图的特征         图点本身就具备的特征称为属性特征(如:连接...
#科研筑基# 吴恩达深度学习 ... 为什么深度学习会兴起机器学习算法在处理少量数据时效率很高,但数据规模巨大时࿰...
青岛事故车交易网(青岛哪里有事... 本篇文章极速百科给大家谈谈青岛事故车交易网,以及青岛哪里有事故车批发对应的知识点,希望对各位有所帮助...
适合家庭用车的5款车,空间大乘... 今天给各位分享适合家庭用车的5款车,空间大乘坐感舒适,省油耐用又...的知识,其中也会对适合家用的车...
丰田卡罗拉油耗多少钱一公里(卡... 今天给各位分享丰田卡罗拉油耗多少钱一公里的知识,其中也会对卡罗拉16自动挡油耗进行解释,如果能碰巧解...
为众人抱薪者原文出自何处(为众... 本篇文章极速百科给大家谈谈为众人抱薪者原文出自何处,以及为众人抱薪者是谁的话对应的知识点,希望对各位...
人机对话比拼,Chat GPT... 目录 文心一言初体验 一、登录体验难易对比  二、测试对比--哲学类 第一个问题:《三...
强化学习笔记-04 动态规划D... 本文是博主对《Reinforcement Learning- An introduction》的阅读...
吉林华泰车险地址查询:理赔网点... 本篇文章极速百科给大家谈谈吉林华泰车险地址查询:理赔网点、营业厅、门店、定损...,以及华泰财产保险...
中国的五岳的特点各是什么(中国... 本篇文章极速百科给大家谈谈中国的五岳的特点各是什么,以及中国的五岳都是怎么样的对应的知识点,希望对各...
英菲尼迪fx35油耗多少钱(英... 本篇文章极速百科给大家谈谈英菲尼迪fx35油耗多少钱,以及英菲尼迪fx350油耗多少对应的知识点,希...
嫡孙是什么孙子(嫡孙指的是什么... 本篇文章极速百科给大家谈谈嫡孙是什么孙子,以及嫡孙指的是什么意思对应的知识点,希望对各位有所帮助,不...
【Linux】网络基础(2) 前言         本篇笔记记录我在Linux系统下学习网络基础部分知识,从关于网络...
计算机网络(第九弹) --- ...   传输控制协议 TCP 在整个计算机网络中占有很高的地位, 它会控制着网络上数据的传输过程, 当然...
Java二叉树的前中后序遍历 Java二叉树的前中后序遍历1.前序遍历1.1前序遍历概念1.2前序遍历习题2.中序遍历2.1中序遍...
电动汽车十大名牌排名及价格,纯... 今天给各位分享电动汽车十大名牌排名及价格,纯电动汽车排名及价格...的知识,其中也会对电动汽车十大名...
长安奔奔mini保养(长安奔奔... 本篇文章极速百科给大家谈谈长安奔奔mini保养,以及长安奔奔mini保养手册对应的知识点,希望对各位...
Python-06:异常、模块... 文章目录一、异常1.1 异常的概念1.2 捕获异常的语法1.3 代码演示1.4 异常的传递性二、模块...
满州是哪里(日本口中的满洲是哪... 今天给各位分享满州是哪里的知识,其中也会对日本口中的满洲是哪里进行解释,如果能碰巧解决你现在面临的问...
义乌交通违章查询,浙江义乌交通... 今天给各位分享义乌交通违章查询,浙江义乌交通违章查询的知识,其中也会对义乌违章查询入口进行解释,如果...
WEB安全 DIV CSS基础 1.DIV和CSS样式             层叠样式表(英文全称:Cascadin...
灵感来自游艇?聊天津一汽骏派C... 今天给各位分享灵感来自游艇?聊天津一汽骏派CX65设计的知识,其中也会对一汽骏派suv进行解释,如果...
汽车维修哪个学校比较好?(学汽... 今天给各位分享汽车维修哪个学校比较好?的知识,其中也会对学汽车维修哪个学校好,快来看看!进行解释,如...
科学技术的两面性是什么(科学技... 本篇文章极速百科给大家谈谈科学技术的两面性是什么,以及科学技术的两面性发言稿50字对应的知识点,希望...
京沪高速实时路况(京沪高速实时... 本篇文章极速百科给大家谈谈京沪高速实时路况,以及京沪高速实时路况今天封闭没有对应的知识点,希望对各位...