本帖最后由 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);
 - 
 - 
 - }
 
  复制代码
  
 
 |