本帖最后由 i-FOX 于 2025-5-13 09:15 编辑
补光灯是一种辅助照明设备,主要用于在光线不足的环境中提供额外光源,以改善拍摄、直播、视频通话或日常照明的效果。
在当前直播行业或是人像摄影、产品拍摄等都有很好的效果。
正好手头上有一个环形的RGB灯,可以通过调整亮度或是色温的方式,支持不同的场景。
功能说明:
由一个GPIO接一个按键,一个GPIO来控制RGB灯的亮度。
根据GPIO按下的时间来动态变化RGB灯的亮度。
而且可以设置成暖光灯或是其他颜色进行补光。
硬件:
RGB灯环模块
按键模块
Beetle与扩展板
4p连接线两条
连接:
按键模块连接到A1接口。
RGB灯环连接到A0接口。
效果:
由于手机有自动 调节功能,拍摄效果不太好,正常使用时,亮度的变化还是很明显的。

代码:
- #include "FastLED.h"
-
- #define BUTTON_PIN 27 // 按钮连接的引脚
- #define NUM_LEDS 36 // LED数量
- #define LED_PIN 26 // 数据引脚
- #define MAX_BRIGHTNESS 128 // 亮度(0-255)
- #define CYCLE_TIME 3000 // 亮度循环周期(毫秒)
- CRGB leds[NUM_LEDS];
-
- unsigned long buttonPressStartTime = 0;
- bool buttonWasPressed = false;
- uint8_t currentBrightness = 0;
-
- void setup() {
- pinMode(BUTTON_PIN, INPUT_PULLUP); // 使用内部上拉电阻
- FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS); // 初始化LED
- // 初始状态:关闭LED
- FastLED.setBrightness(0);
- fill_solid(leds, NUM_LEDS, CRGB::White); // 设置为白色(可根据需要修改)
- FastLED.show();
-
- }
-
- void loop() {
- // 检测按钮是否被按下(低电平)
- if (digitalRead(BUTTON_PIN) == LOW) {
- if (!buttonWasPressed) {
- // 按钮刚被按下,记录开始时间
- buttonPressStartTime = millis();
- buttonWasPressed = true;
- }
-
- // 计算按钮被按下的持续时间(毫秒)
- unsigned long pressDuration = millis() - buttonPressStartTime;
-
- currentBrightness = map(pressDuration % CYCLE_TIME, 0, CYCLE_TIME, 0, MAX_BRIGHTNESS);
-
- // 设置LED亮度并显示
- FastLED.setBrightness(currentBrightness);
- FastLED.show();
-
- } else {
- if (buttonWasPressed) {
- // 按钮被释放
- buttonWasPressed = false;
- }
- }
-
- delay(10);
-
-
- }
复制代码
|