点亮LED
创始人
2025-05-29 21:56:13
0

目录

一、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(触发模式)文件里面

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

三、测试

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

故意输入错误试试

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

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

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

相关内容

热门资讯

安卓10系统断网软件,轻松实现... 你有没有遇到过这种情况?手机突然断网了,明明信号满格,却连不上网,急得你团团转。别急,今天就来给你揭...
安卓可以改什么系统版本,体验全... 你有没有想过,你的安卓手机其实可以像换衣服一样,换一个全新的“系统版本”呢?没错,这就是今天我们要聊...
最好的平板游戏安卓系统,畅享指... 亲爱的游戏迷们,你是否在寻找一款能够让你在安卓平板上畅玩无忧的游戏神器?别急,今天我就要给你揭秘,究...
华为安卓系统卡顿解决,华为安卓... 你是不是也遇到了华为安卓系统卡顿的问题?别急,今天就来给你支几招,让你的华为手机重新焕发活力!一、清...
安卓建议升级鸿蒙系统吗,探讨鸿... 亲爱的安卓用户们,最近是不是被鸿蒙系统的新鲜劲儿给吸引了?是不是在犹豫要不要把你的安卓手机升级成鸿蒙...
安卓如何变苹果系统桌面,桌面系... 你有没有想过,把你的安卓手机变成苹果系统桌面,是不是瞬间高大上了呢?想象那流畅的动画效果,那简洁的界...
windows平板安卓系统升级... 你有没有发现,最近你的Windows平板电脑突然变得有些不一样了?没错,就是那个一直默默陪伴你的小家...
安卓系统扩大运行内存,解锁更大... 你知道吗?在科技飞速发展的今天,手机已经成为了我们生活中不可或缺的好伙伴。而手机中,安卓系统更是以其...
安卓系统怎么改变zenly,探... 你有没有发现,你的安卓手机上的Zenly应用最近好像变得不一样了?没错,安卓系统的大手笔更新,让Ze...
英特尔安卓子系统,引领高效移动... 你有没有想过,手机里的安卓系统竟然也能和电脑上的英特尔处理器完美结合呢?这可不是天方夜谭,而是科技发...
永远会用安卓系统的手机,探索安... 亲爱的手机控们,你是否也有那么一款手机,它陪伴你度过了无数个日夜,成为了你生活中不可或缺的一部分?没...
有哪些安卓手机系统好用,好用系... 你有没有发现,现在手机市场上安卓手机的品牌和型号真是琳琅满目,让人挑花了眼?不过别急,今天我就来给你...
卡片记账安卓系统有吗,便捷财务... 你有没有想过,用手机记账是不是比拿着小本本记录来得方便多了?现在,手机上的应用层出不穷,那么,有没有...
武汉摩尔影城安卓系统APP,便... 你有没有想过,一部手机就能带你走进电影的世界,享受大屏幕带来的震撼?今天,就让我带你详细了解武汉摩尔...
联想刷安卓p系统,畅享智能新体... 你有没有发现,最近联想的安卓P系统刷机热潮可是席卷了整个互联网圈呢!这不,我就迫不及待地来和你聊聊这...
mac从安卓系统改成双系统,双... 你有没有想过,你的Mac电脑从安卓系统改成双系统后,生活会有哪些翻天覆地的变化呢?想象一边是流畅的苹...
kindke安卓系统激活码,激... 亲爱的读者,你是否在寻找一款能够让你手机焕然一新的操作系统?如果你是安卓用户,那么今天我要给你带来一...
萤石云监控安卓系统,安卓系统下... 你有没有想过,家里的安全可以随时随地掌握在手中?现在,有了萤石云监控安卓系统,这不再是梦想啦!想象无...
手机安卓系统会不会爆炸,系统升... 手机安卓系统会不会爆炸——一场关于安全的探讨在当今这个数字化的世界里,手机已经成为我们生活中不可或缺...
安卓系统双清详图解,恢复出厂设... 你有没有遇到过手机卡顿、运行缓慢的问题?别急,今天就来给你详细解析一下安卓系统的“双清”操作,让你的...