ADXL346.lua 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. PROJECT = "sensor"
  2. VERSION = "1.0.0"
  3. require "log"
  4. require "sys"
  5. require "misc"
  6. -- i2c ID
  7. i2cid = 2
  8. -- i2c 速率
  9. speed = 100000
  10. ---ADXL346所用寄存器地址
  11. local ADXL346_DATA_FORMAT = 0x31 --测量范围,正负16g,13位模式
  12. local ADXL346_BW_RATE = 0x2C --速率设定为12.5
  13. local ADXL346_POWER_CTL = 0x2D --选择电源模式
  14. local ADXL346_INT_ENABLE = 0x2E --使能 DATA_READY 中断
  15. local ADXL346_OFSX = 0x1E --X 偏移量
  16. local ADXL346_OFSY = 0x1F --Y 偏移量
  17. local ADXL346_OFSZ = 0x20 --Z 偏移量
  18. local ADXL346_RA_ACCEL_XOUT_H = 0x32
  19. local ADXL346_RA_ACCEL_XOUT_L = 0x33
  20. local ADXL346_RA_ACCEL_YOUT_H = 0x34
  21. local ADXL346_RA_ACCEL_YOUT_L = 0x35
  22. local ADXL346_RA_ACCEL_ZOUT_H = 0x36
  23. local ADXL346_RA_ACCEL_ZOUT_L = 0x37
  24. -- 初始化
  25. function init(address)
  26. if i2c.setup(i2cid, speed, address) ~= speed then
  27. log.error("i2c", "setup fail", addr)
  28. return
  29. end
  30. addr = address
  31. i2c.send(i2cid, addr, {ADXL346_DATA_FORMAT, 0x0B})
  32. i2c.send(i2cid, addr, {ADXL346_BW_RATE, 0x08})
  33. i2c.send(i2cid, addr, {ADXL346_POWER_CTL, 0x08})
  34. i2c.send(i2cid, addr, {ADXL346_INT_ENABLE, 0x80})
  35. i2c.send(i2cid, addr, {ADXL346_OFSX, 0x00})
  36. i2c.send(i2cid, addr, {ADXL346_OFSY, 0x00})
  37. i2c.send(i2cid, addr, {ADXL346_OFSZ, 0x05})
  38. log.info("i2c init_ok")
  39. end
  40. --获取加速度计的原始数据
  41. local function ADXL346_get_accel_raw()
  42. local accel={x=nil,y=nil,z=nil}
  43. i2c.send(i2cid, addr,ADXL346_RA_ACCEL_XOUT_H)--获取的地址
  44. local x = i2c.recv(i2cid, addr, 2)--获取2字节
  45. _,accel.x = pack.unpack(x,">h")
  46. i2c.send(i2cid, addr,ADXL346_RA_ACCEL_YOUT_H)--获取的地址
  47. local y = i2c.recv(i2cid, addr, 2)--获取2字节
  48. _,accel.y = pack.unpack(y,">h")
  49. i2c.send(i2cid, addr,ADXL346_RA_ACCEL_ZOUT_H)--获取的地址
  50. local z = i2c.recv(i2cid, addr, 2)--获取2字节
  51. _,accel.z = pack.unpack(z,">h")
  52. return accel or 0
  53. end
  54. -- ADXL346
  55. sys.taskInit(function()
  56. sys.wait(8000)
  57. init(0x53)
  58. while true do
  59. local test1 = ADXL346_get_accel_raw()
  60. log.info("ADXL346acceltest", "accel.x",test1.x,"accel.y",test1.y,"accel.z",test1.z)
  61. sys.wait(1000)
  62. end
  63. end)
  64. sys.init(0, 0)
  65. sys.run()