Przeglądaj źródła

add: 添加adxl345 通过活动阀值触发中断功能和demo

PKM-Bai 1 rok temu
rodzic
commit
775a7926da
2 zmienionych plików z 94 dodań i 1 usunięć
  1. 49 0
      demo/adxl345/main.lua
  2. 45 1
      script/libs/adxl34x.lua

+ 49 - 0
demo/adxl345/main.lua

@@ -0,0 +1,49 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "adxl345_demo"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- 一定要添加sys.lua !!!!
+sys = require("sys")
+
+-- 添加硬狗防止程序卡死
+if wdt then
+    wdt.init(9000) -- 初始化watchdog设置为9s
+    sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
+end
+
+local adxl34x = require "adxl34x"
+
+i2cid = 0
+i2c_speed = i2c.FAST
+
+gpio.setup(24, function() --配置wakeup中断,外部唤醒用  连接ADXL34X INT1引脚
+    log.info("gpio ri")
+end, gpio.PULLUP, gpio.FALLING)
+
+sys.taskInit(function()
+    i2c.setup(i2cid, i2c_speed)
+
+    adxl34x.init(i2cid)--初始化,传入i2c_id
+
+    sys.wait(50)
+    adxl34x.set_thresh(i2cid, string.char(0x05), string.char(0x02), string.char(0x05))  -- 设置阀值
+    sys.wait(50)
+    adxl34x.set_irqf(i2cid, string.char(0x00), string.char(0xff), string.char(0x10))     -- activity映射到到INT1,并开启对应中断功能
+
+    while 1 do
+        adxl34x.get_int_source()    -- 不加这个不会触发中断
+        
+        local adxl34x_data = adxl34x.get_data()
+        log.info("adxl34x_data", "adxl34x_data.x"..(adxl34x_data.x),"adxl34x_data.y"..(adxl34x_data.y),"adxl34x_data.z"..(adxl34x_data.z))
+        sys.wait(1000)
+    end
+end)
+
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 45 - 1
script/libs/adxl34x.lua

@@ -116,7 +116,7 @@ function adxl34x.init(i2c_id)
     if chip_check() then
         i2c.send(i2cid, ADXL34X_ADDRESS_ADR, {ADXL34X_BW_RATE,0X0D})
         i2c.send(i2cid, ADXL34X_ADDRESS_ADR, {ADXL34X_POWER_CTL,0X08})
-        i2c.send(i2cid, ADXL34X_ADDRESS_ADR, {ADXL34X_DATA_FORMAT,0X09})
+        i2c.send(i2cid, ADXL34X_ADDRESS_ADR, {ADXL34X_DATA_FORMAT,0X2B})
         log.info("adxl34x init_ok")
         sys.wait(20)
         return true
@@ -143,6 +143,50 @@ function adxl34x.get_data()
     return accel
 end
 
+--[[
+获取 adxl34x 中断源
+@api adxl34x.get_int_source()
+@usage
+adxl34x.get_int_source()
+]]
+function adxl34x.get_int_source()
+    i2c.readReg(0, ADXL34X_ADDRESS_ADR, ADXL34X_INT_SOURCE, 2)
+end
+
+--[[
+设置 adxl34x 活动和静止阀值
+@api adxl34x.set_thresh(i2cid, activity, inactivity, time_inactivity)
+@number 所在的i2c总线id
+@number 活动阀值
+@number 静止阀值
+@number 静止时间
+@usage
+adxl34x.set_thresh(i2cid, string.char(0x05), string.char(0x02), string.char(0x05)) 
+log.info("adxl34x_data", "adxl34x_data.x"..(adxl34x_data.x),"adxl34x_data.y"..(adxl34x_data.y),"adxl34x_data.z"..(adxl34x_data.z))
+]]
+function adxl34x.set_thresh(i2cid, activity, inactivity, time_inactivity)
+    i2c.writeReg(i2cid, ADXL34X_ADDRESS_ADR, ADXL34X_THRESH_ACT, activity)
+    i2c.writeReg(i2cid, ADXL34X_ADDRESS_ADR, ADXL34X_THRESH_INACT, inactivity)
+    i2c.writeReg(i2cid, ADXL34X_ADDRESS_ADR, ADXL34X_THRESH_INACT, time_inactivity)
+end
+
+--[[
+adxl34x 中断设置
+@api adxl34x.set_irqf(i2cid, irqf_map, irqf_act_ctl, irqf_enable)
+@number 所在的i2c总线id
+@number 中断映射
+@number 中断活动控制
+@number 中断使能
+@usage
+adxl34x.set_irqf(i2cid, string.char(0x10), string.char(0xff), string.char(0x10))
+]]
+function adxl34x.set_irqf(i2cid, irqf_map, irqf_act_ctl, irqf_enable)
+    i2c.writeReg(i2cid, ADXL34X_ADDRESS_ADR, ADXL34X_INT_ENABLE, string.char(0x00))     -- 关闭所有中断
+    i2c.writeReg(i2cid, ADXL34X_ADDRESS_ADR, ADXL34X_INT_MAP, irqf_data)
+    i2c.writeReg(i2cid, ADXL34X_ADDRESS_ADR, ADXL34X_ACT_INACT_CTL, irqf_act_ctl)
+    i2c.writeReg(i2cid, ADXL34X_ADDRESS_ADR, ADXL34X_INT_ENABLE, irqf_enable)           -- 开启中断
+end
+
 return adxl34x