我想为我的走廊设计一个运动控制的夜光。在我的项目中
在对我的灯条进行了修补之后,我设法让Red打开并褪色到一种低红色,然后延迟,并最终淡出到它们关闭的地方。据我所知,Neopixel库的最大光强为255。然而,当我们谈论夜光时,我估计小于20的值足以照亮我的走廊。(我应该注意到,我看到了许多建议,在LED条前面放置一个电阻器,在电源上安装一个电容器--这会影响强度吗?)因此,灯不会平滑地褪色/关闭,而是在关闭前通过较低的强度因此,我的问题是,如果你知道有什么办法创造一个更顺利的褪色?下面是我目前的代码。请注意,我必须在底部插入具体的线条才能真正关闭leds,因为将亮度设置为"0“显然并没有起到什么作用--我在这里遗漏了什么吗?
理想情况下,我希望能够规定LED需要多长时间才能淡入/熄灭。
提前感谢
#include <Adafruit_NeoPixel.h>
#define LED_PIN 6
#define LED_COUNT 30 // How many NeoPixels are attached to the Arduino?
#define High_Intensity 20
#define Low_Intensity 1
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);
// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel. Avoid connecting
// on a live circuit... if you must, connect GND first.
void setup() {
strip.begin();
strip.show(); // initialize all pixels to "off"
}
void loop() {
brighten();
darken();
}
// 0 to 255
void brighten() {
uint16_t i, j;
for (j = Low_Intensity; j < High_Intensity; j++) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, j, 0, 0);
}
strip.show();
delay(50);
}
delay(500);
}
// 255 to 0
void darken() {
Serial.begin(9600);
uint16_t i, j;
for (j = High_Intensity; j > 1; j--) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, j, 0, 0);
}
strip.show();
delay(100);
Serial.println(j);
}
// Turn leds back off
for(int i=0; i<60; i++) {
strip.setPixelColor(i, 0);
strip.show();}
delay(5000);
}发布于 2021-01-05 22:36:32
关于主题以外的部分(我不打算详述)
电源引线之间的电容将保护Neopixels控制器免受突然电压变化的影响,这是因为每个像素都使用PWM驱动leds。
电阻器终止通信线路,从而减少电线中的反射。
既提高了性能,又降低了像素损坏的风险。因此,你应该使用它们。确保你用在正确的引脚上。网上有很多关于如何正确控制Neopixel字符串的信息。
(我应该注意到,我看到了许多建议,在LED条前面放置一个电阻,在电源上设置一个电容器--这会影响强度吗?)
这不会影响强度!强度仅由像素的pwm信号和提供的电流控制。
规划-明智:
据我所知,
的最大光强值为255。
是的亮度由3个值控制,红色,绿色和蓝色的范围从0(关闭)到255 (最大亮度)。这是led彩色通道的工作周期。这使你在整个亮度范围内的亮度分辨率为256。(8位)。
,我的问题是,如果你知道有什么办法创造一个更顺利的褪色?
这造成了一个问题。如果你想在一个较低的亮度范围内工作,你只有非常有限的步骤可以淡出。
那么,如果我们减少提供leds的电流呢?由于控制和led电源电压通常通过同一钢轨供电,因此无法在保持8位分辨率的同时使整个带钢变暗。
若要控制衰落时间,请更改每个值更新之间的延迟时间。记住人类视觉的有限的活力和持久性。任何出现<30 Any的可见亮度变化都会导致一个明显的步骤。
下面的
是目前为止我的代码。请注意,我必须在底部插入具体的线条才能真正关闭leds,因为将亮度设置为"0“显然并没有起到什么作用--我在这里遗漏了什么吗?
for (j = High_Intensity; j > 1; j--) 在使条带变暗的循环中,您可以在j > 1时运行循环。所以你设置的最后一个亮度值是2,它显然不是0。
for (j = High_Intensity; j > -1; j--)应该能起作用。
https://stackoverflow.com/questions/65584699
复制相似问题