main.lua 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. --可选pwm,gpio,spi方式驱动,API详情查看wiki https://wiki.luatos.com/api/sensor.html
  17. -- mode pin/pwm_id/spi_id T0H T0L T1H T1L
  18. local function ws2812_conf()
  19. local rtos_bsp = rtos.bsp()
  20. if rtos_bsp == "AIR101" then
  21. return "pin",pin.PA7,0,20,20,0 --此为pin方式直驱,注意air101主频设置240
  22. elseif rtos_bsp == "AIR103" then
  23. return "pin",pin.PA7,0,20,20,0 --此为pin方式直驱,注意air103主频设置240
  24. elseif rtos_bsp == "AIR105" then
  25. return "pin",pin.PD13,0,10,10,0 --此为pin方式直驱
  26. elseif rtos_bsp == "ESP32C3" then
  27. return "pin",2,0,10,10,0 --此为pin方式直驱
  28. elseif rtos_bsp == "ESP32S3" then
  29. return "pin",2,0,10,10,0 --此为pin方式直驱
  30. elseif rtos_bsp == "EC618" then
  31. return "spi",0 --air780e 只能通过spi方式驱动
  32. else
  33. log.info("main", "bsp not support")
  34. return
  35. end
  36. end
  37. local show_520 = {
  38. {0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  39. {0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  40. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  41. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  42. {0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  43. {0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x0000ff,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  44. {0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x00ff00,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  45. {0x0000ff,0x0000ff,0x0000ff,0x00ff00,0x00ff00,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff,0x0000ff},
  46. }
  47. local show_520_w = 24
  48. local show_520_h = 8
  49. local ws2812_w = 8
  50. local ws2812_h = 8
  51. local buff = zbuff.create({ws2812_w,ws2812_h,24},0x000000)
  52. local function ws2812_roll_show(show_data,data_w)
  53. local m = 0
  54. while 1 do
  55. for j=0,ws2812_w-1 do
  56. if j%2==0 then
  57. for i=ws2812_w-1,0,-1 do
  58. if m+ws2812_w-i>data_w then
  59. buff:pixel(i,j,show_data[j+1][m+ws2812_w-i-data_w])
  60. else
  61. buff:pixel(i,j,show_data[j+1][m+ws2812_w-i])
  62. end
  63. end
  64. else
  65. for i=0,ws2812_w-1 do
  66. if m+i+1>data_w then
  67. buff:pixel(i,j,show_data[j+1][m+i+1-data_w])
  68. else
  69. buff:pixel(i,j,show_data[j+1][m+i+1])
  70. end
  71. end
  72. end
  73. end
  74. m = m+1
  75. if m==data_w then m=0 end
  76. --可选pwm,gpio,spi方式驱动,API详情查看wiki https://wiki.luatos.com/api/sensor.html
  77. local mode = ws2812_conf()
  78. if mode == "pin" then
  79. local _,pin,T0H,T0L,T1H,T1L = ws2812_conf()
  80. sensor.ws2812b(pin,buff,T0H,T0L,T1H,T1L)
  81. elseif mode == "pwm" then
  82. local _,pwm_id = ws2812_conf()
  83. sensor.ws2812b_pwm(pwm_id,buff)
  84. elseif mode == "spi" then
  85. local _,spi_id = ws2812_conf()
  86. sensor.ws2812b_spi(spi_id,buff)
  87. else
  88. while 1 do
  89. sys.wait(1000)
  90. log.info("main", "bsp not support yet")
  91. end
  92. end
  93. sys.wait(300)
  94. end
  95. end
  96. sys.taskInit(function()
  97. sys.wait(500)
  98. ws2812_roll_show(show_520,show_520_w)
  99. end)
  100. -- 用户代码已结束---------------------------------------------
  101. -- 结尾总是这一句
  102. sys.run()
  103. -- sys.run()之后后面不要加任何语句!!!!!