點(diǎn)燈,嵌入式工程師難以割舍的獨(dú)有情懷。也只有他們才能這么大膽,用耀眼綠光在溫馨霓虹中跳脫閃現(xiàn),變幻中演繹與眾不同的浪漫愛意。
520點(diǎn)燈表白,為愛發(fā)光——今晚就脫單!快來~
本教程示例采用合宙LuatOS-SoC系列Air105開發(fā)板、WS2812系列LED光源演示
1
LuatOS-SoC驅(qū)動(dòng)WS2812的三種方式

WS2812是一款比較常用的外控集成LED光源,控制簡單,應(yīng)用領(lǐng)域極廣——包括但不限于表白。
具有低電壓驅(qū)動(dòng)、環(huán)保節(jié)能、亮度高、散射角度大、一致性好、低功率及超長壽命等優(yōu)點(diǎn)。
驅(qū)動(dòng)WS2812需要滿足如下條件,顯然不是所有MCU都能支持的:


LuatOS-SoC三種驅(qū)動(dòng)方式
合宙LuatOS-SoC在支持GPIO直驅(qū)的情況下,加入了PWM和SPI驅(qū)動(dòng)的方法:
sensor.ws2812b_pwm(pin,data)
sensor.ws2812b_spi(pin,data)
下面看看這兩個(gè)函數(shù)對硬件要求:
sensor.ws2812b_pwm(pin,data):
800k的PWM輸出頻率
sensor.ws2812b_spi(pin,data):
5Mbps的SPI輸出速率
顯然,這要求就很低了。三種驅(qū)動(dòng)方式,總有一款適合你:
Air101/Air103系列:
推薦使用SPI驅(qū)動(dòng)方式;
Air105系列:
推薦使用PWM驅(qū)動(dòng)方式,也可使用SPI驅(qū)動(dòng)方式;GPIO直驅(qū)也可以,但實(shí)際有點(diǎn)勉強(qiáng)。

2
520表白程序開發(fā)/demo下載
接下來,我們正式編寫表白程序。
01
首先將我們要顯示的內(nèi)容,換算成GBR顏色數(shù)組:
local show_520 = {
{0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
{0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
{0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
{0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
{0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
}local show_520_w = 24local show_520_h = 8
02之后,申請一個(gè)8*8的zbuff空間:
local ws2812_w = 8local ws2812_h = 8
local buff = zbuff.create({ws2812_w,ws2812_h,24},0x000000)
03然后,我們做一個(gè)簡單的滾動(dòng)顯示函數(shù)就可以了:
local function ws2812_roll_show(show_data,data_w)
local m = 0
while 1 do
for j=0,ws2812_w-1 do
if j%2==0 then
for i=ws2812_w-1,0,-1 do
if m+ws2812_w-i>data_w then
buff:pixel(i,j,show_data[j+1][m+ws2812_w-i-data_w]) else
buff:pixel(i,j,show_data[j+1][m+ws2812_w-i]) end
end
else
for i=0,ws2812_w-1 do
if m+i+1>data_w then
buff:pixel(i,j,show_data[j+1][m+i+1-data_w]) else
buff:pixel(i,j,show_data[j+1][m+i+1]) end
end
end
end
m = m+1
if m==data_w then m=0 end
sensor.ws2812b_pwm(5,buff)--此處使用pwm方法驅(qū)動(dòng),當(dāng)然也可以用gpio,spi方式,API詳情查看wiki https://wiki.luatos.com/api/sensor.html
-- sensor.ws2812b_spi(0,buff)
sys.wait(300)
end
end
好,我們的點(diǎn)燈表白程序?qū)懞昧?。前面沒看視頻的同學(xué),來看一下點(diǎn)燈效果吧:

每個(gè)閃耀的LED,都是滿滿愛意
你學(xué)會(huì)了嗎?
快來試試看!
發(fā)揮你的點(diǎn)燈創(chuàng)意為愛發(fā)光吧
-
嵌入式
+關(guān)注
關(guān)注
5200文章
20468瀏覽量
334379
發(fā)布評論請先 登錄
系統(tǒng)嵌入式的學(xué)習(xí)路線
ARM嵌入式這樣學(xué)
嵌入式就業(yè)形勢好不好?
為什么嵌入式驅(qū)動(dòng)開發(fā)工程師可以拿高薪
硬件工程師和嵌入式軟件哪個(gè)更有前途?
招鑲?cè)?b class='flag-5'>式工程師1個(gè),硬件工程師一個(gè),
電子發(fā)燒友工程師看!電子領(lǐng)域評職稱,技術(shù)之路更扎實(shí)
嵌入式工程師為什么要學(xué)QT?
嵌入式工程師的進(jìn)階之路
盤點(diǎn)嵌入式就業(yè)所需要的技能有哪些?
嵌入式開發(fā)入門指南:從零開始學(xué)習(xí)嵌入式
飛凌嵌入式2025嵌入式及邊緣AI技術(shù)論壇圓滿結(jié)束
嵌入式工程師的520表白
評論