一、通过代码控制双色LED灯
1. 定义常量
PWM(脉宽调制)
- 原理:快速开关数字信号,用占空比控制平均电压/功率
- 电平:
- 0:低电平,关闭,0V
- 1:高电平,开启,3.3V
- 占空比:高电平占整个周期的比例
- 例:25% 占空比 → 等效电压 3.3V×0.25=0.825V → LED 25% 亮度
频率
- 单位:Hz(每秒开关周期数)
- 推荐:2000Hz,人眼无闪烁感
- 显示时长:
COLOR_DURATION = 0.5(每种颜色显示0.5秒)
2. 控制类
颜色映射算法
将[0,255]线性映射到[0.0,1.0]占空比:
def map_value(value, in_min, in_max, out_min, out_max):
return (value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
示例:102 → 0.4
颜色提取
- 红色分量:
(color >> 8) & 0xFF - 绿色分量:
color & 0xFF
示例:0x0FF0
- 红:15/255 ≈ 5.9%
- 绿:240/255 ≈ 94.1%
- 视觉:近似纯绿色
3. 主程序
- 双层异常处理:
- 外层:捕获GPIO初始化错误
- 内层:捕获循环中断(Ctrl+C)
- 必执行:
close()、clear()关闭LED、释放GPIO
4. 运行程序
- 颜色列表:
[0xFF00, 0x00FF, 0x0FF0, 0xF00F] - 现象:肉眼主要看到红绿交替
5. 探索颜色
以0x0FF0二进制分析:
- 16位:
00001111 11110000 - 红:高8位 → 15
- 绿:低8位 → 240
二、接线图
- 红色LED:GPIO27
- 绿色LED:GPIO18
- 公共负极:GND
- 安全警告:禁止3.3V直连GND,会触发过流保护重启
三、知识小结
| 知识点 | 核心内容 | 关键实现步骤 | 技术难点 |
|---|---|---|---|
| PWM原理 | 脉宽调制,占空比控亮度 | 定义2000Hz频率、计算占空比 | 占空比与亮度非线性 |
| 颜色映射 | 16进制拆分红绿分量 | 0-255映射到0.0-1.0、位运算 | 位运算、混合色分辨 |
| 硬件控制 | 双层try-catch异常处理 | 初始化保护、资源自动释放 | 多级错误捕获 |
| 电路规范 | 安全接线、回路完整 | 引脚对应、接GND、防短路 | 引脚误接、过流风险 |
关键参数与代码
- 初始化:
LED(red_pin=27, green_pin=18) - 频率:2000Hz
- 周期:0.5秒
- 颜色表:
[0xFF00,0x00FF,0x0FF0,0xF00F] - 亮度:
duty_cycle = value / 255.0
硬件说明
- 红LED:GPIO27(PWM)
- 绿LED:GPIO18(PWM)
- 公共端:GND
- 限流:必须串联限流电阻
- 电流:约20mA