ec11.lua 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. --[[
  2. @module ec11
  3. @summary ec11 旋转编码器
  4. @version 1.0
  5. @date 2023.03.27
  6. @author Dozingfiretruck
  7. @usage
  8. -- 用法实例, 当前支持一定一脉冲
  9. local ec11 = require("ec11")
  10. -- 按实际接线写
  11. local GPIO_A = 6
  12. local GPIO_B = 7
  13. ec11.init(GPIO_A,GPIO_B)
  14. -- 演示接收旋转效果
  15. local count = 0
  16. local function ec11_callBack(direction)
  17. if direction == "left" then
  18. -- 往左选,逆时针
  19. count = count - 1
  20. else
  21. -- 往右旋,顺时针
  22. count = count + 1
  23. end
  24. log.info("ec11", direction, count)
  25. end
  26. sys.subscribe("ec11",ec11_callBack)
  27. ]]
  28. local ec11 = {}
  29. local sys = require "sys"
  30. local A = false
  31. local B = false
  32. --[[
  33. 初始化ec11
  34. @api ec11.init(GPIO_A,GPIO_B)
  35. @number GPIO_A A引脚对应的GPIO编号, 例如 GPIO6, 就写6
  36. @number GPIO_B B引脚对应的GPIO编号, 例如 GPIO7, 就写7
  37. @usage
  38. ec11.init(6,7)
  39. ]]
  40. function ec11.init(GPIO_A,GPIO_B)
  41. gpio.debounce(GPIO_A, 10)
  42. gpio.debounce(GPIO_B, 10)
  43. gpio.setup(GPIO_A, function()
  44. if B then
  45. sys.publish("ec11","left")
  46. A = false
  47. B = false
  48. else
  49. A = true
  50. end
  51. end,gpio.PULLUP,gpio.FALLING)
  52. gpio.setup(GPIO_B, function()
  53. if A then
  54. sys.publish("ec11","right")
  55. A = false
  56. B = false
  57. else
  58. B = true
  59. end
  60. end,gpio.PULLUP,gpio.FALLING)
  61. end
  62. return ec11