使用Arduino控制LED的亮度

时间:2017-06-27 20:07:45

标签: arduino-uno led

我写了一个示例代码,通过控制连接到Arduino的LED的占空比来测量LED的亮度。我希望在特定时期内获得最低亮度范围到最大亮度范围。当我把desired_brightness = 1时,LED以93勒克斯单位发光,这不是最不亮的。关于如何获得最弱光的任何建议?

int led = 3;           // the pin that the LED is attached to
int brightness =0;    // how bright the LED is
int incrementfactor = 10;    // how many points to fade the LED by
int desired_brightness = 255   ;
int extra_delay = 1000;

void setup() {      // declare pin 9 to be an output:
  pinMode(led, OUTPUT);
  analogWrite(led, desired_brightness);
}
void loop() {
  analogWrite(led, desired_brightness);
  brightness=brightness+incrementfactor;
  if (brightness==desired_brightness) {
     delay(extra_delay);
  }
}

1 个答案:

答案 0 :(得分:0)

我已经为你量身定制了一些代码。主要问题是你要立即达到最大亮度,并且永远不会降低亮度。 [1,4,2,5]只取0到255之间的值。你从255开始并从那里开始增加,所以它只是保持明亮。试试这个,这就是你现在在这么多电子产品上看到的“呼吸效应”,并永远循环:

analogWrite()

这将变得更亮,然后变暗,并重复。延迟是非常重要的 - 你可以减少它或延长它,但没有它,变化发生得如此之快,你无法用肉眼看到,只能在示波器上。希望这能帮到你!

编辑:

在最低亮度时添加“超级延迟”以测量该级别。

要注意的一点是,像这样的脉冲宽度调制仍会从输出引脚提供完整的驱动电压。 PWM只会改变引脚高电平与低电平的时间比。在这款Aduino上,它仍然可以在0V和3.3V之间瞬间快速摆动。要从此输出获得真实模拟电压,需要一些电路将PWM的高低电平滤波为更平滑的平均直流电压。如果您想这样做,请搜索“RC低通滤波器”或访问网站like this one