2018年5月31日 星期四

Digispark chap2.通訊應用-2 RGD LED串接控制 WS2812 5050

本章要跟大家介紹如何用Digispark控制WS2812的RGB LED
這個LED整合了RGB三個顏色與控制器,可以很簡單用一根IO控制一整排的RGB LED
WS2812是將RGB LED控制IC WS2811跟RGB LED包在5050的封裝裡面

目前市面上很多彩色的廣告燈都是用WS2812的RGB LED
如果學會其實可以應用在不少的地方,比方說做遙控車的煞車燈、霧燈、大燈、七彩霓虹燈..
而且,控制起來非常簡單,只需要一片小小的Digispark,只用其中一隻I/O,串遍整台車的RGB LED就可以控制,線路相當簡單





相關接線方式:




範例程式碼:
 1  
 2 #include 
 3 DEFINE_WS2811_FN(WS2811RGB, PORTB, 1)
 4 RGB_t rgb[6]; //1 for 1 pixel
 5 int RGB_NUM;
 6 
 7 void setup() {
 8 
 9   pinMode(1,OUTPUT);
10 
11 }
12 
13 void loop() {
14 
15   RGB_NUM+=1;
16     switch( RGB_NUM/50 )
17     {
18       case 0:     //第一顆LED,亮紅色
19         rgb[0].r=40;  rgb[0].b=0;   rgb[0].g=0;
20       break;
21       case 1:     //第二顆LED,亮紫色
22         rgb[1].r=40;  rgb[1].b=40;  rgb[1].g=0;
23       break;
24       case 2:     //第三顆LED,亮藍色
25         rgb[2].r=0;   rgb[2].b=40;  rgb[2].g=0;
26       break;
27       case 3:     //第四顆LED,亮青藍色
28         rgb[3].r=0;   rgb[3].b=40;  rgb[3].g=40;
29       break;
30       case 4:     //第五顆LED,亮綠色
31         rgb[4].r=0;   rgb[4].b=0;  rgb[4].g=40;
32       break;
33       case 5:     //第六顆LED,亮黃色
34         rgb[5].r=40;  rgb[5].b=0;  rgb[5].g=40;
35       break;
36       case 6:
37       RGB_NUM=0;
38       break;
39     }
40 
41  updatePixels(); //show the change
42   delay(20);
43 }
44 
45 void updatePixels(){
46  WS2811RGB(rgb, ARRAYLEN(rgb));
47 }
48 


結果影片:上述程式可以達成如下的樣子,可以再依照您的需求修改程式



另外一個型態顯示,但由於程式比較複雜一點點,就沒有把這隻範例放到網路上








影片拍的顏色沒有那麼鮮豔,因為顏色反差太大,拍起來並不漂亮
實際上的顏色是很鮮豔,很漂亮的






沒有留言:

張貼留言

專題許願池,請不要吝嗇將你想製作的專題用回覆的方式寫在下方

專題許願池 開這個板是為了幫助一些人,有專題製作需求,但是又不知道要如何實現 如果您有想製作的專題,請您將您的題目回覆在下方,先提出您的需求,進而討論可行性或製做的方向,或是您進行到什麼階段,有遇到什麼樣的問題也可以提出來討論,如果我知道會盡量幫助您順利完成。 不限...