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
设置最大电压(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
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
FastLED.clear();
FastLED.show();
}
void loop() {
// RED Green Blue
for (int i=0; i { leds = CRGB(0, 255-2*i, 20*i ); FastLED.setBrightness(6*i); FastLED.show(); delay (50); } for (int i=NUM_LEDS; i> 0; i-- ) { leds = 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 FastLED.setMaxPowerInVoltsAndMilliamps(5, 500); FastLED.clear(); FastLED.show(); } void loop() { // RED Green Blue for (int i=0; i leds = CRGB(255, 0, 0 ); FastLED.show(); } 把代码上传到Arduino后,所有LED都将显示为红色。 如果改变函数中的第二个值为255,可改变LED的颜色为绿色: leds = CRGB(0, 255, 0 ) 如果希望得到混色效果,如紫色,函数赋值为:leds = 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 FastLED.setMaxPowerInVoltsAndMilliamps(5, 500); FastLED.clear(); FastLED.show(); } void loop() { // RED Green Blue for (int i=0; i { leds = CRGB(255, 0, 255 ); FastLED.setBrightness(2*i); FastLED.show(); delay (20); } for (int i=NUM_LEDS; i> 0; i-- ) { leds = CRGB(255, 0, 255 ); FastLED.setBrightness(2*i); FastLED.show(); delay (20); } } 上传上述代码后,就获得了闪烁效果。但是,这个闪烁实在是太快了,这就需要增加时延,获得理想的闪烁效果。 最后,让我们实现灯带从左向右,从绿向蓝渐变。将绿色RGB取值每个循环减小20,经过12次循环这个值就接近0,颜色就成为蓝色。 for (int i=0; i { leds = 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 FastLED.setMaxPowerInVoltsAndMilliamps(5, 500); FastLED.clear(); FastLED.show(); } void loop() { // RED Green Blue for (int i=0; i { leds = CRGB(0, 255-2*i, 20*i ); FastLED.setBrightness(6*i); FastLED.show(); delay (50); } for (int i=NUM_LEDS; i> 0; i-- ) { leds = CRGB(20*i, 0, 255-20*i ); FastLED.setBrightness(60-2*i); FastLED.show(); delay (50); } }
作者: 硬之城Allchips, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-3975615.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
文章评论(0条评论)
登录后参与讨论