MC3416.lua 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. module(..., package.seeall)
  2. require "utils"
  3. local i2cId = 2
  4. function ind(data)
  5. --print("shk.ind", data, cpu.INT_GPIO_POSEDGE)
  6. -- log.info("标志")
  7. if data == cpu.INT_GPIO_POSEDGE then
  8. --print("shk.ind DEV_SHK_IND")
  9. sys.publish("DEV_SHK_IND")
  10. end
  11. end
  12. pins.setup(pio.P0_10, ind) -- 高电平有效,来自机械振动传感器的中断
  13. function init() -- 3416
  14. local i2cSlaveAddr = 0x4c
  15. -- 配置模式地址
  16. local modeAddr = 0x07
  17. -- 插入中断控制地址
  18. local intrCtrlAddr = 0x06
  19. -- 运动控制地址
  20. local motionCtrlAddr = 0x09
  21. -- 输出速率配置地址
  22. local sampleAAddr = 0x08
  23. -- 运动阈值设置地址
  24. -- LSB
  25. local threshLSBAddr = 0x43
  26. -- MSB
  27. local thershMSBAddr = 0x44
  28. -- 取消反跳地址
  29. local debounceAddr = 0x45
  30. -- 读设备电路状态地址
  31. local devicestatusAddr = 0x05
  32. -- 读运动状态地址
  33. local devicemotionAddr = 0x13
  34. local speed = i2c.setup(i2cId, 100000, i2cSlaveAddr)
  35. if speed ~= 100000 then
  36. log.warn("通道开启失败")
  37. return
  38. end
  39. local _ = i2c.send(i2cId, i2cSlaveAddr, 0x05)
  40. --log.warn("发送地址", _)
  41. local r = i2c.recv(i2cId, i2cSlaveAddr, 1)
  42. --log.warn("asldkfnalksdf", string.toHex(r))
  43. -- enter standy mode, cann't write register in wakeup mode
  44. local _ = i2c.send(i2cId, i2cSlaveAddr, {modeAddr, 0xC3})
  45. --log.warn("配置待机模式传输成功字节", _)
  46. local _ = i2c.send(i2cId, i2cSlaveAddr, 0x05)
  47. local r = i2c.recv(i2cId, i2cSlaveAddr, 1)
  48. --log.warn("asldkfnalksdf", string.toHex(r))
  49. local _ = i2c.send(i2cId, i2cSlaveAddr, {intrCtrlAddr, 0x44})
  50. --log.warn("配置插入传输成功字节", _)
  51. local _ = i2c.send(i2cId, i2cSlaveAddr, {motionCtrlAddr, 0x04})
  52. --log.warn("配置运动传输成功字节", _)
  53. local _ = i2c.send(i2cId, i2cSlaveAddr, {sampleAAddr, 0x02})
  54. --log.warn("配置速率传输成功字节", _)
  55. local _ = i2c.send(i2cId, i2cSlaveAddr, {threshLSBAddr, 0x50})
  56. --log.warn("配置运动阈值高传输成功字节", _)
  57. local _ = i2c.send(i2cId, i2cSlaveAddr, {thershMSBAddr, 0x00})
  58. --log.warn("配置运动阈值低传输成功字节", _)
  59. local _ = i2c.send(i2cId, i2cSlaveAddr, {debounceAddr, 0x00})
  60. --log.warn("配置取消反跳传输成功字节", _)
  61. local _ = i2c.send(i2cId, i2cSlaveAddr, {modeAddr, 0xC1})
  62. --log.warn("配置唤醒模式传输成功字节", _)
  63. local _ = i2c.send(i2cId, i2cSlaveAddr, devicestatusAddr)
  64. local r = i2c.recv(i2cId, i2cSlaveAddr, 1)
  65. --log.warn("asldkfnalksdf", string.toHex(r))
  66. -- while true do
  67. local _ = i2c.send(i2cId, i2cSlaveAddr, devicestatusAddr)
  68. --log.warn("发送地址", _)
  69. local r = i2c.recv(i2cId, i2cSlaveAddr, 1)
  70. --log.warn("asldkfnalksdf", string.toHex(r))
  71. -- end
  72. end
  73. init()