【树莓派】1 - 双色LED实验

0 阅读2分钟

一、通过代码控制双色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. 主程序

  • 双层异常处理:
    1. 外层:捕获GPIO初始化错误
    2. 内层:捕获循环中断(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