# RGB灯模块代码 **Repository Path**: a-flying-panda/rgb-light-module-code ## Basic Information - **Project Name**: RGB灯模块代码 - **Description**: RGB灯模块代码 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-09 - **Last Updated**: 2025-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RGB 控制模块使用说明 ## 概述 该模块用于控制 RGB 灯的状态,支持常亮、闪烁和关闭三种模式。通过调用相应的函数,可以设置 RGB 灯的颜色和模式。 ## 头文件 ```c #ifndef BSP_RGB #define BSP_RGB #include #define LED_R(n) (n?HAL_GPIO_WritePin(RED_GPIO_Port,RED_Pin,GPIO_PIN_RESET):HAL_GPIO_WritePin(RED_GPIO_Port,RED_Pin,GPIO_PIN_SET)) #define LED_R_TogglePin HAL_GPIO_TogglePin(RED_GPIO_Port,RED_Pin) //LED_R电平翻转 #define LED_G(n) (n?HAL_GPIO_WritePin(GREEN_GPIO_Port,GREEN_Pin,GPIO_PIN_RESET):HAL_GPIO_WritePin(GREEN_GPIO_Port,GREEN_Pin,GPIO_PIN_SET)) #define LED_G_TogglePin HAL_GPIO_TogglePin(GREEN_GPIO_Port,GREEN_Pin) //LED_G电平翻转 #define LED_B(n) (n?HAL_GPIO_WritePin(BLUE_GPIO_Port,BLUE_Pin,GPIO_PIN_RESET):HAL_GPIO_WritePin(BLUE_GPIO_Port,BLUE_Pin,GPIO_PIN_SET)) #define LED_B_TogglePin HAL_GPIO_TogglePin(BLUE_GPIO_Port,BLUE_Pin) //LED_B电平翻转 #define RGB_SET(r, g, b) \ do { \ LED_R(r); \ LED_G(g); \ LED_B(b); \ } while (0) enum rgb_mode { RGB_MODE_OFF, // 关闭 RGB_MODE_STEADY, // 常亮 RGB_MODE_BLINK // 闪烁 }; struct rgb_dev { bool isOpen; // 是否开灯 char * color; // 当前颜色 uint16_t tim_ms_cnt; // 定时器计数毫秒数 enum rgb_mode mode; // 当前模式 }; // 开启RGB灯闪烁模式 uint8_t bsp_rgb_blink(struct rgb_dev *dev, char* color, uint16_t tim_ms); // 开启RGB灯常亮模式 uint8_t bsp_rgb_steady(struct rgb_dev *dev, char* color); // 关闭RGB灯 uint8_t bsp_rgb_close(struct rgb_dev *dev); // 动态申请结构体内存 struct rgb_dev *rgb_create(void); // 释放结构体内存 void rgb_destroy(struct rgb_dev *dev); #endif ``` ## 函数说明 ### `bsp_rgb_blink` **功能**: 开启 RGB 灯的闪烁模式。 **参数**: - `dev`: RGB 设备结构体指针。 - `color`: 颜色字符串,支持 "red", "green", "blue", "yellow", "white"。 - `tim_ms`: 闪烁间隔时间(毫秒)。 **返回值**: - `0`: 成功。 - `1`: 未知颜色。 **示例**: ```c struct rgb_dev *dev = rgb_create(); bsp_rgb_blink(dev, "red", 500); // 红色闪烁,间隔500ms ``` ### `bsp_rgb_steady` **功能**: 开启 RGB 灯的常亮模式。 **参数**: - `dev`: RGB 设备结构体指针。 - `color`: 颜色字符串,支持 "red", "green", "blue", "yellow", "white"。 **返回值**: - `0`: 成功。 - `1`: 未知颜色。 **示例**: ```c bsp_rgb_steady(dev, "green"); // 绿色常亮 ``` ### `bsp_rgb_close` **功能**: 关闭 RGB 灯。 **参数**: - `dev`: RGB 设备结构体指针。 **返回值**: - `0`: 成功。 **示例**: ```c bsp_rgb_close(dev); // 关闭RGB灯 ``` ### `rgb_create` **功能**: 动态申请 RGB 设备结构体内存。 **返回值**: - 成功: 返回结构体指针。 - 失败: 返回 `NULL`。 **示例**: ```c struct rgb_dev *dev = rgb_create(); if (dev == NULL) { // 处理内存分配失败 } ``` ### `rgb_destroy` **功能**: 释放 RGB 设备结构体内存。 **参数**: - `dev`: RGB 设备结构体指针。 **示例**: ```c rgb_destroy(dev); // 释放内存 ``` ## 使用步骤 1. **创建 RGB 设备**: ```c struct rgb_dev *dev = rgb_create(); if (dev == NULL) { // 处理内存分配失败 } ``` 2. **设置 RGB 灯模式**: - 常亮模式: ```c bsp_rgb_steady(dev, "red"); // 红色常亮 ``` - 闪烁模式: ```c bsp_rgb_blink(dev, "blue", 1000); // 蓝色闪烁,间隔1000ms ``` 3. **关闭 RGB 灯**: ```c bsp_rgb_close(dev); ``` 4. **释放 RGB 设备**: ```c rgb_destroy(dev); ``` ## 注意事项 - 在使用 `rgb_create` 创建设备后,务必在使用完毕后调用 `rgb_destroy` 释放内存,避免内存泄漏。 - `bsp_rgb_blink` 和 `bsp_rgb_steady` 函数中的 `color` 参数必须为支持的字符串,否则会返回错误。 ## 支持的颜色 - "close": 关闭 - "red": 红色 - "green": 绿色 - "blue": 蓝色 - "yellow": 黄色 - "white": 白色 ## 示例代码 ```c #include "bsp_rgb.h" int main() { struct rgb_dev *dev = rgb_create(); if (dev == NULL) { return -1; // 内存分配失败 } bsp_rgb_steady(dev, "green"); // 绿色常亮 // 延时一段时间 bsp_rgb_blink(dev, "red", 500); // 红色闪烁,间隔500ms // 延时一段时间 bsp_rgb_close(dev); // 关闭RGB灯 rgb_destroy(dev); // 释放内存 return 0; } ``` 通过以上步骤和函数,您可以轻松控制 RGB 灯的状态和模式。