util_netled.lua 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. local util_netled = {}
  2. local netled_default_duration = 200
  3. local netled_default_interval = 3000
  4. local netled_duration = netled_default_duration
  5. local netled_interval = netled_default_interval
  6. local netled_inited = false
  7. -- 开机时呼吸灯效果
  8. sys.taskInit(function()
  9. local nums = { 0, 1, 2, 4, 6, 12, 16, 21, 27, 34, 42, 51, 61, 72, 85, 100, 100 }
  10. local len = #nums
  11. while true do
  12. for i = 1, len, 1 do
  13. pwm.open(4, 1000, nums[i])
  14. result = sys.waitUntil("NET_LED_INIT", 25)
  15. if result then
  16. pwm.close(4)
  17. return
  18. end
  19. end
  20. for i = len, 1, -1 do
  21. pwm.open(4, 1000, nums[i])
  22. result = sys.waitUntil("NET_LED_INIT", 25)
  23. if result then
  24. pwm.close(4)
  25. return
  26. end
  27. end
  28. end
  29. end)
  30. -- 注册网络后开始闪烁
  31. function util_netled.init()
  32. if netled_inited then return end
  33. netled_inited = true
  34. sys.publish("NET_LED_INIT")
  35. sys.taskInit(function()
  36. local netled = gpio.setup(27, 0, gpio.PULLUP)
  37. while true do
  38. netled(1)
  39. sys.waitUntil("NET_LED_UPDATE", netled_duration)
  40. netled(0)
  41. sys.waitUntil("NET_LED_UPDATE", netled_interval)
  42. end
  43. end)
  44. end
  45. function util_netled.blink(duration, interval, restore)
  46. if duration == netled_duration and interval == netled_interval then return end
  47. netled_duration = duration or netled_default_duration
  48. netled_interval = interval or netled_default_interval
  49. log.debug("EVENT.NET_LED_UPDATE", duration, interval, restore)
  50. sys.publish("NET_LED_UPDATE")
  51. if restore then sys.timerStart(util_netled.blink, restore) end
  52. end
  53. return util_netled