i-FOX 发表于 2025-5-13 09:12:30

【Beetle 树莓派RP2350】 补光灯

本帖最后由 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_BRIGHTNESS128   // 亮度(0-255)
#define CYCLE_TIME   3000 // 亮度循环周期(毫秒)
CRGB 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);


}


页: [1]
查看完整版本: 【Beetle 树莓派RP2350】 补光灯