Browse Source

:sparkles: 添加开机时 netled 的呼吸灯效果, 联网后变成闪烁状态

Mizore 2 years ago
parent
commit
53e4120f73
2 changed files with 48 additions and 18 deletions
  1. 1 1
      script/main.lua
  2. 47 17
      script/util_netled.lua

+ 1 - 1
script/main.lua

@@ -74,7 +74,7 @@ sys.taskInit(
         -- 等待网络环境准备就绪
         sys.waitUntil("IP_READY")
 
-        util_netled.blink(50, 50, 1000)
+        util_netled.init()
 
         -- 开机基站定位
         util_location.getCoord(

+ 47 - 17
script/util_netled.lua

@@ -1,39 +1,69 @@
 local util_netled = {}
 
-local netled = gpio.setup(27, 0, gpio.PULLUP)
-
 local netled_default_duration = 200
-local netled_default_interval = 2000
+local netled_default_interval = 3000
 
 local netled_duration = netled_default_duration
 local netled_interval = netled_default_interval
 
+local netled_inited = false
+
+-- 开机时呼吸灯效果
 sys.taskInit(
     function()
+        local nums = {0, 1, 2, 4, 6, 12, 16, 21, 27, 34, 42, 51, 61, 72, 85, 100, 100}
         while true do
-            netled(1)
-            sys.waitUntil("NET_LED_UPDATE", netled_duration)
-            netled(0)
-            sys.waitUntil("NET_LED_UPDATE", netled_interval)
+            for i = 1, #nums, 1 do
+                pwm.open(4, 1000, nums[i])
+                result = sys.waitUntil("NET_LED_INIT", 25)
+                if result then
+                    pwm.close(4)
+                    return
+                end
+            end
+            for i = #nums, 1, -1 do
+                pwm.open(4, 1000, nums[i])
+                result = sys.waitUntil("NET_LED_INIT", 25)
+                if result then
+                    pwm.close(4)
+                    return
+                end
+            end
         end
     end
 )
 
+-- 注册网络后开始闪烁
+function util_netled.init()
+    if netled_inited then
+        return
+    end
+    netled_inited = true
+    sys.publish("NET_LED_INIT")
+
+    sys.taskInit(
+        function()
+            local netled = gpio.setup(27, 0, gpio.PULLUP)
+            while true do
+                netled(1)
+                sys.waitUntil("NET_LED_UPDATE", netled_duration)
+                netled(0)
+                sys.waitUntil("NET_LED_UPDATE", netled_interval)
+            end
+        end
+    )
+end
+
 function util_netled.blink(duration, interval, restore)
+    if duration == netled_duration and interval == netled_interval then
+        return
+    end
     netled_duration = duration or netled_default_duration
     netled_interval = interval or netled_default_interval
-    log.info("publish NET_LED_UPDATE")
+    log.debug("EVENT.NET_LED_UPDATE", duration, interval, restore)
     sys.publish("NET_LED_UPDATE")
     if restore then
-        sys.timerStart(
-            function()
-                netled_duration = netled_default_duration
-                netled_interval = netled_default_interval
-                log.info("publish NET_LED_UPDATE")
-                sys.publish("NET_LED_UPDATE")
-            end,
-            restore
-        )
+        sys.timerStart(util_netled.blink, restore)
     end
 end