key_drv.lua 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. --[[
  2. @module key_drv
  3. @summary 按键驱动模块
  4. @version 1.0
  5. @date 2025.12.25
  6. @author 江访
  7. @usage
  8. 本文件为按键驱动功能模块,核心业务逻辑为:
  9. 1、初始化切换键(GPIO8)和确认键(GPIO5);
  10. 2、配置按键事件的中断处理函数;
  11. 3、实现按键防抖功能,防止误触发;
  12. 4、对外发布按键消息;
  13. 本文件没有对外接口,直接在main.lua中require "key_drv"就可以加载运行;
  14. ]]
  15. -- 按键定义
  16. local key_switch = 8 -- GPIO8
  17. local key_confirm = 5 -- GPIO5
  18. -- 按键事件处理函数
  19. local function handle_switch_key(val)
  20. if val == 0 then
  21. sys.publish("KEY_EVENT", "switch_down")
  22. else
  23. sys.publish("KEY_EVENT", "switch_up")
  24. end
  25. end
  26. local function handle_confirm_key(val)
  27. if val == 0 then
  28. sys.publish("KEY_EVENT", "confirm_down")
  29. else
  30. sys.publish("KEY_EVENT", "confirm_up")
  31. end
  32. end
  33. --[[
  34. 初始化按键GPIO;
  35. 配置切换键(GPIO8)和确认键(GPIO5)的GPIO中断;
  36. @api init()
  37. @summary 配置切换键(GPIO8)和确认键(GPIO5)的GPIO中断
  38. @return bool 初始化只会返回true
  39. @usage
  40. ]]
  41. local function init()
  42. gpio.setup(key_switch, handle_switch_key, gpio.PULLUP, gpio.FALLING)
  43. gpio.debounce(key_switch, 100, 0) -- 防抖,防止频繁触发
  44. gpio.setup(key_confirm, handle_confirm_key, gpio.PULLUP, gpio.FALLING)
  45. gpio.debounce(key_confirm, 100, 0) -- 防抖,防止频繁触发
  46. log.info("key_drv", "按键初始化完成,切换键:GPIO8, 确认键:GPIO5")
  47. end
  48. init()