PWM可调灯珠模块(三针) — 代码例程

知识库
知识库文档
/firmware/其他/PWM可调灯珠模块(三针)/PWM可调灯珠模块(三针) — 代码例程.md

文档

PWM可调灯珠模块(三针) — 代码例程


示例 1:Arduino — 呼吸灯效果

/*
 * PWM灯珠模块 — Arduino 呼吸灯
 * SIG → D9 (PWM)
 * VCC → 5V, GND → GND
 */

#define LED_PIN 9

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  // 渐亮 (0 → 255)
  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(LED_PIN, brightness);
    delay(5);
  }
  // 渐暗 (255 → 0)
  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(LED_PIN, brightness);
    delay(5);
  }
  delay(200);
}

示例 2:Arduino — 串口控制亮度

/*
 * PWM灯珠 — 串口指令调光
 * 发送 0~255 设置亮度,发送 "ON"/"OFF" 开关
 */
#define LED_PIN 9

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(115200);
  Serial.println("PWM灯珠控制:输入 0~255 调光,ON/OFF 开关");
}

void loop() {
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();

    if (cmd == "ON") {
      analogWrite(LED_PIN, 255);
      Serial.println("灯珠 → ON (255)");
    } else if (cmd == "OFF") {
      analogWrite(LED_PIN, 0);
      Serial.println("灯珠 → OFF");
    } else {
      int brightness = cmd.toInt();
      if (brightness >= 0 && brightness <= 255) {
        analogWrite(LED_PIN, brightness);
        Serial.print("亮度 → ");
        Serial.println(brightness);
      } else {
        Serial.println("无效值,请输入 0~255");
      }
    }
  }
}

示例 3:STM32 HAL — TIM PWM 呼吸灯

/*
 * STM32 HAL — TIM2_CH1 (PA0) 驱动PWM灯珠
 * CubeMX配置: TIM2 → Channel1 → PWM Generation, ARR=999, PSC=71
 * 72MHz / (71+1) / (999+1) = 1kHz PWM
 */
#include "main.h"

TIM_HandleTypeDef htim2;

#define LED_PWM_CH   TIM_CHANNEL_1
#define ARR_MAX      999

void LED_Init(void) {
  HAL_TIM_PWM_Start(&htim2, LED_PWM_CH);
  __HAL_TIM_SET_COMPARE(&htim2, LED_PWM_CH, 0);
}

void LED_SetBrightness(uint16_t val) {
  // val: 0 ~ ARR_MAX
  if (val > ARR_MAX) val = ARR_MAX;
  __HAL_TIM_SET_COMPARE(&htim2, LED_PWM_CH, val);
}

void LED_Breathe(uint32_t stepDelayMs) {
  // 渐亮
  for (uint16_t i = 0; i <= ARR_MAX; i += 10) {
    LED_SetBrightness(i);
    HAL_Delay(stepDelayMs);
  }
  // 渐暗
  for (int32_t i = ARR_MAX; i >= 0; i -= 10) {
    LED_SetBrightness(i);
    HAL_Delay(stepDelayMs);
  }
}

// 在主循环中调用
// while(1) { LED_Breathe(3); HAL_Delay(200); }

示例 4:MicroPython (ESP32)

"""
PWM灯珠模块 — ESP32 MicroPython
SIG → GPIO25, VCC → 3.3V 或 5V, GND → GND
"""
from machine import Pin, PWM
import time

led = PWM(Pin(25), freq=1000, duty=0)

def breathe():
    # 渐亮
    for d in range(0, 1024, 4):
        led.duty(d)
        time.sleep_ms(10)
    # 渐暗
    for d in range(1023, -1, -4):
        led.duty(d)
        time.sleep_ms(10)

def set_brightness(percent: int):
    """percent: 0~100"""
    duty = int(percent * 1023 / 100)
    led.duty(duty)

# 测试循环
print("PWM灯珠呼吸灯演示")
while True:
    breathe()
    time.sleep(0.5)

# 手动设置亮度示例
# set_brightness(50)   # 50%亮度
# set_brightness(10)   # 10%亮度

信息

路径
/firmware/其他/PWM可调灯珠模块(三针)/PWM可调灯珠模块(三针) — 代码例程.md
更新时间
2026/5/26