Arduino WS2812B LED燈帶可單獨控制每個LED的亮度和顏色,提供了一種簡單而酷炫的LED效果體驗。
WS2812B LED燈帶以串聯(lián)方式組合LED燈,內(nèi)嵌有放大驅(qū)動電路、振蕩器和電壓可編程控制芯片,可尋址,可通過一個單線接口通訊。這意味著,用戶可通過Arduino板子上的一個數(shù)字引腳,同時控制多個LEDs。
DC5V WS2812B 5米可尋址LED燈帶特點如下:
輸入電壓:DC 5V
功率:60LEDS/M -18watt/M
FPCB寬度:60LEDS/M—-10mm
顏色:全色RGB,夢幻流彩
長度:定制
IC類型:內(nèi)嵌
LED類型:SMD 5050
PCB顏色:白色
防護:IP65級防水
首先,按照電路圖把Arduino插接到面包板上,連接電阻器和電容器后接通5V電源。其中,Arduino的#2數(shù)字引腳先通過一個330歐姆電阻器,再通過跳線連接到LED燈帶中間的Din引腳。
?
?
接下來,下載 FastLED 庫,在Arduino IDE中打開庫。
鍵入FastLED,點擊安裝。
安裝成功后,接著上傳 FastLED header。
?
?
然后,設(shè)置LED數(shù)據(jù)引腳,本項目中為2。LED燈帶的LED數(shù)可達60,本項目選擇12。
#include
#define LED_PIN 2
#define NUM_LEDS 12
現(xiàn)在,創(chuàng)建陣型CRGB,長度為所使用的LEDs數(shù)量。
CRGB leds[NUM_LEDS];
通過RGB校驗控制ws2812,本例中NUM LEDs為12。
FastLED.addLeds(leds, NUM_LEDS);,>
設(shè)置最大電壓(5v)和最大電流(500mA),讓不會消耗Arduino太大電流。
FastLED.setMaxPowerInVoltsAndMilliamps(5, 500);
每次上傳一組新代碼時,通過FastLED.clear() 和 FastLED.show() 刷新LEDs。
FastLED.clear();
FastLED.show();
按照常規(guī)順序校準LEDs:即紅 - 綠 - 藍。如果實際顯示的顏色順序與FastLED.show()函數(shù)所寫不一致,就對修改函數(shù)的順序。
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都真是顯示了函數(shù)賦值,即紅色。
?
?
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都將顯示為紅色。
如果改變函數(shù)中的第二個值為255,可改變LED的顏色為綠色:
leds[i] = CRGB(0, 255, 0 )
如果希望得到混色效果,如紫色,函數(shù)賦值為:leds[i] = CRGB(255, 0, 255 )。上傳代碼后,燈帶就全部顯示了紫色。
?
?
在保持紫色的同時,如果想讓燈帶閃爍,需要使用 FastLED.setBrightness() 函數(shù),設(shè)置亮度的等級,并從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);;>
}
}
上傳上述代碼后,就獲得了閃爍效果。但是,這個閃爍實在是太快了,這就需要增加時延,獲得理想的閃爍效果。
最后,讓我們實現(xiàn)燈帶從左向右,從綠向藍漸變。將綠色RGB取值每個循環(huán)減小20,經(jīng)過12次循環(huán)這個值就接近0,顏色就成為藍色。
for (int i=0; i{
leds[i] = CRGB(0, 255-2*i, 20*i );
FastLED.setBrightness(6*i);
FastLED.show();
delay (50);
};>
再從紅色開始循環(huán)……
?
?
這樣,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);;>
}
}
評論
查看更多