/*
函数描述:加速度值超过阈值,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;
}
//有错误请及时指正,谢谢(第一次发帖) |