Arduino WS2812B LED灯带可单独控制每个LED的亮度和颜色,提供了一种简单而酷炫的LED效果体验。
WS2812B LED灯带以串联方式组合LED灯,内嵌有放大驱动威廉希尔官方网站 、振荡器和电压可编程控制芯片,可寻址,可通过一个单线接口通讯。这意味着,用户可通过Arduino板子上的一个数字引脚,同时控制多个LEDs。
DC5V WS2812B 5米可寻址LED灯带特点如下:
输入电压:DC 5V
功率:60LEDS/M -18watt/M
FPCB宽度:60LEDS/M—-10mm
颜色:全色RGB,梦幻流彩
长度:定制
IC类型:内嵌
LED类型:SMD 5050
PCB颜色:白色
防护:IP65级防水
首先,按照威廉希尔官方网站 图把Arduino插接到面包板上,连接电阻器和电容器后接通5V电源。其中,Arduino的#2数字引脚先通过一个330欧姆电阻器,再通过跳线连接到LED灯带中间的Din引脚。
接下来,下载 FastLED 库,在Arduino IDE中打开库。
键入FastLED,点击安装。
安装成功后,接着上传 FastLED header。
然后,设置LED数据引脚,本项目中为2。LED灯带的LED数可达60,本项目选择12。
#include
#define LED_PIN 2
#define NUM_LEDS 12
现在,创建阵型CRGB,长度为所使用的LEDs数量。
CRGB leds[NUM_LEDS];
通过RGB校验控制ws2812,本例中NUM LEDs为12。
FastLED.addLeds(leds, NUM_LEDS);,>
设置最大电压(5v)和最大电流(500mA),让不会消耗Arduino太大电流。
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
每次上传一组新代码时,通过FastLED.clear() 和 FastLED.show() 刷新LEDs。
FastLED.clear();
FastLED.show();
按照常规顺序校准LEDs:即红 - 绿 - 蓝。如果实际显示的颜色顺序与FastLED.show()函数所写不一致,就对修改函数的顺序。
Arduino WS2812B LED灯带校准的代码如下:
#include
#define LED_PIN 2
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();
},>
void loop() {
// RED Green Blue
for (int i=0; i{
leds[i] = CRGB(0, 255-2*i, 20*i );
FastLED.setBrightness(6*i);
FastLED.show();
delay (50);
}
for (int i=NUM_LEDS; i> 0; i-- )
{
leds[i] = CRGB(20*i, 0, 255-20*i );
FastLED.setBrightness(60-2*i);
FastLED.show();
delay (50);;>
}
}
校准后,LED灯带的所有LED都真是显示了函数赋值,即红色。
Arduino WS2812B LED灯带全部显示红色代码:
#include
#define LED_PIN 2
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();,>
}
void loop() {
// RED Green Blue
for (int i=0; ileds[i] = CRGB(255, 0, 0 );
FastLED.show();
};>
把代码上传到Arduino后,所有LED都将显示为红色。
如果改变函数中的第二个值为255,可改变LED的颜色为绿色:
leds[i] = CRGB(0, 255, 0 )
如果希望得到混色效果,如紫色,函数赋值为:leds[i] = CRGB(255, 0, 255 )。上传代码后,灯带就全部显示了紫色。
在保持紫色的同时,如果想让灯带闪烁,需要使用 FastLED.setBrightness() 函数,设置亮度的等级,并从0 逐渐递增。
下面是Arduino WS2812B LED灯带闪烁代码:
#include
#define LED_PIN 2
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();,>
}
void loop() {
// RED Green Blue
for (int i=0; i{
leds[i] = CRGB(255, 0, 255 );
FastLED.setBrightness(2*i);
FastLED.show();
delay (20);
}
for (int i=NUM_LEDS; i> 0; i-- )
{
leds[i] = CRGB(255, 0, 255 );
FastLED.setBrightness(2*i);
FastLED.show();
delay (20);;>
}
}
上传上述代码后,就获得了闪烁效果。但是,这个闪烁实在是太快了,这就需要增加时延,获得理想的闪烁效果。
最后,让我们实现灯带从左向右,从绿向蓝渐变。将绿色RGB取值每个循环减小20,经过12次循环这个值就接近0,颜色就成为蓝色。
for (int i=0; i{
leds[i] = CRGB(0, 255-2*i, 20*i );
FastLED.setBrightness(6*i);
FastLED.show();
delay (50);
};>
再从红色开始循环……
这样,Arduino WS2812B LED灯带就按照我们希望的旋律和效果开始闪烁,代码如下:
#include
#define LED_PIN 2
#define NUM_LEDS 12
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds(leds, NUM_LEDS);
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();,>
}
void loop() {
// RED Green Blue
for (int i=0; i{
leds[i] = CRGB(0, 255-2*i, 20*i );
FastLED.setBrightness(6*i);
FastLED.show();
delay (50);
}
for (int i=NUM_LEDS; i> 0; i-- )
{
leds[i] = CRGB(20*i, 0, 255-20*i );
FastLED.setBrightness(60-2*i);
FastLED.show();
delay (50);;>
}
}
评论
查看更多