main.lua 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. local rtos_bsp = rtos.bsp():lower()
  8. if rtos_bsp=="air101" or rtos_bsp=="air103" then
  9. mcu.setClk(240)
  10. end
  11. if wdt then
  12. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  13. wdt.init(9000)--初始化watchdog设置为9s
  14. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  15. end
  16. local show_520 = {
  17. {0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  18. {0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  19. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  20. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  21. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  22. {0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  23. {0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  24. {0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  25. }
  26. local show_520_w = 24
  27. local show_520_h = 8
  28. local ws2812_w = 8
  29. local ws2812_h = 8
  30. local buff = zbuff.create({ws2812_w,ws2812_h,24},0x000000)
  31. local function ws2812_roll_show(show_data,data_w)
  32. local m = 0
  33. while 1 do
  34. for j=0,ws2812_w-1 do
  35. if j%2==0 then
  36. for i=ws2812_w-1,0,-1 do
  37. if m+ws2812_w-i>data_w then
  38. buff:pixel(i,j,show_data[j+1][m+ws2812_w-i-data_w])
  39. else
  40. buff:pixel(i,j,show_data[j+1][m+ws2812_w-i])
  41. end
  42. end
  43. else
  44. for i=0,ws2812_w-1 do
  45. if m+i+1>data_w then
  46. buff:pixel(i,j,show_data[j+1][m+i+1-data_w])
  47. else
  48. buff:pixel(i,j,show_data[j+1][m+i+1])
  49. end
  50. end
  51. end
  52. end
  53. m = m+1
  54. if m==data_w then m=0 end
  55. --可选pwm,gpio,spi方式驱动,API详情查看wiki https://wiki.luatos.com/api/sensor.html
  56. sensor.ws2812b(7,buff,0,20,20,0)--此处使用gpio方法驱动
  57. -- sensor.ws2812b_pwm(5,buff)--此处使用pwm方法驱动
  58. -- sensor.ws2812b_spi(0,buff)--此处使用spi方法驱动
  59. sys.wait(300)
  60. end
  61. end
  62. sys.taskInit(function()
  63. sys.wait(500)
  64. ws2812_roll_show(show_520,show_520_w)
  65. end)
  66. -- 用户代码已结束---------------------------------------------
  67. -- 结尾总是这一句
  68. sys.run()
  69. -- sys.run()之后后面不要加任何语句!!!!!