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

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

三、测试

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

故意输入错误试试

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

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

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

相关内容

热门资讯

安卓只恢复系统应用,重拾系统流... 你有没有遇到过这种情况?手机突然卡顿,或者某个应用突然罢工,你一气之下,直接开启了“恢复出厂设置”大...
安卓系统出现支付漏洞,揭秘潜在... 你知道吗?最近安卓系统可是闹出了不小的风波呢!没错,就是那个我们每天离不开的安卓系统,竟然出现了支付...
苹果换了安卓系统恢复,体验变革... 你有没有遇到过这种情况?手机里的苹果突然变成了安卓系统,而且还是那种让你摸不着头脑的恢复模式。别急,...
安卓怎么卸载系统app,轻松告... 手机里的系统应用越来越多,有时候真的让人眼花缭乱。有些应用虽然看起来很实用,但用起来却发现并不适合自...
安卓系统查看步数,揭秘日常运动... 你有没有发现,每天手机里的小秘密越来越多?今天,咱们就来聊聊安卓系统里那个悄悄记录你每一步的小家伙—...
安卓系统未来会不会,未知。 你有没有想过,那个陪伴我们手机生活的安卓系统,它的未来会怎样呢?想象每天早上醒来,手机屏幕上跳出的信...
安卓系统怎么设置截图,轻松捕捉... 亲爱的手机控们,你是不是也和我一样,有时候想记录下手机屏幕上的精彩瞬间呢?别急,今天就来手把手教你如...
安卓系统下载软件安装,安卓系统... 你有没有发现,手机里的安卓系统就像一个巨大的宝藏库,里面藏着各种各样的软件,让人眼花缭乱。今天,就让...
安卓10系统转移程序,轻松实现... 你有没有想过,当你从一台安卓手机升级到安卓10系统后,那些珍贵的照片、联系人、应用和数据怎么才能无缝...
安卓电脑强制重启系统,原因解析... 你有没有遇到过这种情况?你的安卓电脑突然间就强制重启了,屏幕上闪过一行行代码,你还没来得及保存文件,...
安卓怎么降低系统耗电,深度解析... 手机电量总是不够用,是不是你也和我一样,每天都要担心手机没电呢?别急,今天就来教你怎么给安卓手机降耗...
安卓系统的总体框架,架构与核心... 你有没有想过,你的手机里那个神奇的安卓系统,它到底是怎么运作的呢?今天,就让我带你一探究竟,揭开安卓...
谁的安卓系统好,谁家的安卓系统... 说到安卓系统,这可是个热门话题呢!你有没有想过,这么多安卓手机品牌,哪个的操作系统最让你心动?今天,...
安卓系统信付通,安全无忧的移动... 你知道吗?在安卓手机的世界里,有一个超级好用的支付工具,它就是信付通。今天,就让我带你来全方位了解一...
小米官方系统安卓包,深度解析与... 亲爱的数码爱好者们,你是否曾为手机系统而烦恼?市面上那么多手机品牌,各种操作系统让人眼花缭乱。今天,...
自制安卓手机双系统,自制安卓手... 你有没有想过,自己的手机可以同时运行两个操作系统呢?没错,就是那种安卓手机双系统!听起来是不是很酷?...
小米安卓系统怎么设置,科技前沿... 小米手机的用户们,是不是觉得安卓系统有点复杂,设置起来有点头疼呢?别担心,今天就来手把手教你如何轻松...
点歌系统支持安卓系统么,安卓用... 你有没有想过,在手机上点歌听歌,是不是也能像在KTV里那样随心所欲呢?现在,就让我来告诉你一个超级酷...
原版安卓系统刷机,解锁无限可能 你有没有想过,你的安卓手机其实可以焕然一新?没错,就是那种原汁原味的安卓系统,让你的手机重新找回当初...
欧尚改装安卓系统,打造智能驾驶... 你有没有想过,你的欧尚汽车其实也可以变身成为智能座驾呢?没错,就是那个你每天上下班的伙伴——欧尚,现...