STM32 物联网智能家居 (五) 设备子系统之点亮LED灯

STM32 物联网智能家居 (五) 设备子系统之点亮LED灯

一、设计思路

image-20250116212623910

对于LED灯控制,我们可以设想一下LED灯的功能。首先就是灯的开关、亮度、颜色,主要大概就是这三个功能。我们如何将这三个功能抽象出来呢,无论底层的LED设备是什么,都可以用这个结构体抽象出来。

如下面所示,控制LED设备肯定需要初始化函数,控制LED设备亮灭,目前设置LED灯的颜色需要三色灯,目前不支持,控制LED灯的亮灭,可以通过给出不同占空比的PWM波进行控制亮度,目前该项目没有考虑。

typedef struct LEDDevice {
   
	int which;

	/* 初始化LED设备, 成功则返回0 */
	int (*Init)(struct LEDDevice *ptLEDDevice);

	/* 控制LED设备, iStatus取值: 1-亮,0-灭 */
	int (*Control)(struct LEDDevice *ptLEDDevice, int iStatus);

	/* 未实现 */
	void (*SetColor)(struct LEDDevice *ptLEDDevice, int iColor);

	/* 未实现 */
	void (*SetBrightness)(struct LEDDevice *ptLEDDevice, int iBrightness);
}LEDDevice, *PLEDDevice;

下面我们把LED设备分为四层,如下图:

image-20250118092011729

二、设备层

在设备层,里面有LED设备的结构体,里面列举了支持的所有的LED设备,支持白、蓝和绿灯,支持LED初始化和LED控制,如下图所示:

static LEDDevice g_tLEDDevices[] = {
   
	{
   LED_WHITE, 0, LEDDeviceInit, LEDDeviceControl},
	{
   LED_BLUE,  0, LEDDeviceInit, LEDDeviceControl},
	{
   LED_GREEN, 0, LEDDeviceInit, LEDDeviceControl},
};

下面是设备层的函数:LEDDeviceInit(),LEDDeviceControl(),GetLEDDevice()。

/**********************************************************************
 * 函数名称: KAL_LEDDeviceInit
 * 功能描述: 设备层的LED初始化函数
 * 输入参数: ptLEDDevice-哪个LED设备
 * 输出参数: 无
 * 返 回 值: 0-成功
 ***********************************************************************/
static int LEDDeviceInit(struct LEDDevice *ptLEDDevice)
{
   
	return KAL_LEDDeviceInit(ptLEDDevice)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

艾格北峰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值