PWM可调灯珠模块(三针) — 代码例程
示例 1:Arduino — 呼吸灯效果
#define LED_PIN 9
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(LED_PIN, brightness);
delay(5);
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(LED_PIN, brightness);
delay(5);
}
delay(200);
}
示例 2:Arduino — 串口控制亮度
#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 呼吸灯
#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) {
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);
}
}
示例 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%亮度