极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14147|回复: 0

ADXL345 活动事件(Activity)中断设置

[复制链接]
发表于 2016-4-3 13:41:52 | 显示全部楼层 |阅读模式
/*
函数描述:加速度值超过阈值,13引脚LED状态改变
板子:Arduino  Uno
中断:中断0
*/

#include <Wire.h>
#define DEVICE_ID       0X53
#define OFSX            0X1E  
#define OFSY            0X1F
#define OFSZ            0X20
#define DUR             0X21
#define THRESH_ACT      0X24
#define ACT_INACT_CTL   0X27
#define BW_RATE         0x2C
#define POWER_CTL       0X2D
#define INT_ENABLE      0X2E
#define INT_MAP         0X2F
#define INT_SOURCE      0X30
#define DATA_FORMAT     0x31
#define DATAX0          0X32
#define DATAX1          0X33
#define DATAY0          0X34
#define DATAY1          0X35
#define DATAZ0          0X36
#define DATAZ1          0X37
#define FIFO_CTL        0x38
#define LED   13
int reading = 0;
int val =0;
int X_out,Y_out,Z_out;
double Xg,Yg,Zg;
int state=0;
unsigned char buffer[6];
unsigned char data[1];
void setup(){
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
  digitalWrite(LED,LOW);
  Wire.begin();  //初始化I2C
  delay(100);
  Init_ADX();
  INT_Config();
  setOffset();
  attachInterrupt(0,led_Change,CHANGE);//PIN_2
}
void loop(){
  int Init=0;
  digitalWrite(LED,state);
  I2C_Read(DEVICE_ID,INT_SOURCE,1,data);
  Init=(*data&0x10)>>4;
  Serial.print("Init=");
  Serial.println(Init);
  Serial.println("");
}
void  I2C_Read(byte ADXAddress,byte Register, byte num, byte buffer[]){
   int i=0;
   Wire.beginTransmission(ADXAddress);
   Wire.write(Register);
   Wire.endTransmission();
   Wire.beginTransmission(ADXAddress);
   Wire.requestFrom(ADXAddress,num);
   while(Wire.available()){
     for(i;i<num+1;i++)
       buffer=Wire.read();
   }
  Wire.endTransmission();
}
void I2C_Write(byte ADXAddress,byte Register,byte data){
  Wire.beginTransmission(ADXAddress);
  Wire.write(Register);
  Wire.write(data);
  Wire.endTransmission();
}
void  Init_ADX(){
  I2C_Write(DEVICE_ID,POWER_CTL,0x08);//正常测量模式  
  I2C_Write(DEVICE_ID,BW_RATE,0x0A);// 100HZ
  I2C_Write(DEVICE_ID,DATA_FORMAT,0X0B);//全分辨率,右对齐,范围16G
}
void  setOffset() {//设定偏移量为0
  I2C_Write(DEVICE_ID, OFSX, 0);
  I2C_Write(DEVICE_ID, OFSY, 0);
  I2C_Write(DEVICE_ID, OFSZ, 0);  
}
void INT_Config(){
  I2C_Write(DEVICE_ID,INT_ENABLE,0x00);// 中断清零
  I2C_Write(DEVICE_ID,INT_ENABLE,0x93);//Activity中断使能
  I2C_Write(DEVICE_ID,INT_MAP,0x10);//Activity中断映射到INT2
  I2C_Write(DEVICE_ID,THRESH_ACT,0x10);//阈值设置
  I2C_Write(DEVICE_ID,ACT_INACT_CTL,0xF0);//交流模式,X,Y,Z参与检测
}
void led_Change(){  
  state=!state;
}


//有错误请及时指正,谢谢(第一次发帖)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 02:08 , Processed in 0.035270 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表