main.lua 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "ws2812demo"
  3. VERSION = "1.0.0"
  4. log.info("main", PROJECT, VERSION)
  5. -- 引入必要的库文件(lua编写), 内部库不需要require
  6. sys = require("sys")
  7. if wdt then
  8. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  9. wdt.init(15000)--初始化watchdog设置为15s
  10. sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
  11. end
  12. local show_520 = {
  13. {0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  14. {0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  15. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  16. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  17. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  18. {0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  19. {0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  20. {0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  21. }
  22. local show_520_w = 24
  23. local show_520_h = 8
  24. local ws2812_w = 8
  25. local ws2812_h = 8
  26. local buff = zbuff.create({ws2812_w,ws2812_h,24},0x000000)
  27. local function ws2812_roll_show(show_data,data_w)
  28. local m = 0
  29. while 1 do
  30. for j=0,ws2812_w-1 do
  31. if j%2==0 then
  32. for i=ws2812_w-1,0,-1 do
  33. if m+ws2812_w-i>data_w then
  34. buff:pixel(i,j,show_data[j+1][m+ws2812_w-i-data_w])
  35. else
  36. buff:pixel(i,j,show_data[j+1][m+ws2812_w-i])
  37. end
  38. end
  39. else
  40. for i=0,ws2812_w-1 do
  41. if m+i+1>data_w then
  42. buff:pixel(i,j,show_data[j+1][m+i+1-data_w])
  43. else
  44. buff:pixel(i,j,show_data[j+1][m+i+1])
  45. end
  46. end
  47. end
  48. end
  49. m = m+1
  50. if m==data_w then m=0 end
  51. sensor.ws2812b_pwm(5,buff)--此处使用pwm方法驱动,当然也可以用gpio,spi方式,API详情查看wiki https://wiki.luatos.com/api/sensor.html
  52. -- sensor.ws2812b_spi(0,buff)
  53. sys.wait(300)
  54. end
  55. end
  56. sys.taskInit(function()
  57. sys.wait(500)
  58. ws2812_roll_show(show_520,show_520_w)
  59. end)
  60. -- 用户代码已结束---------------------------------------------
  61. -- 结尾总是这一句
  62. sys.run()
  63. -- sys.run()之后后面不要加任何语句!!!!!