boolean x=true; //是否调试输出
//CD4053的接入方式
//INH口接地 aY->SCL1 bY->SCL2 cY->SCL3 ->SCL_Arduino
#define CD4053_C 10
#define CD4053_B 9
#define CD4053_A 8
//----------1
//CBA 000 不接通
//CBA 100 C接通
//CBA 010 B接通
//CBA 001 A接通
//----------2
//PIN
#define PIN_SDA 20
#define PIN_SCL 21
//I2C (sparkfun breakout)
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37
#include <>
int ADXAddress = 0x53; // the default 7-bit slave address
int reading = 0;
int val=0;
int X0,X1,X_out;
int Y0,Y1,Y_out;
int Z1,Z0,Z_out;
double Xg,Yg,Zg;
int flag=1; //标志变量
void Wire_Start(){
(ADXAddress);
(Register_2D);
(8); //measuring enable
(); // stop transmitting
}
void Wire_Get()
{
//--------------X
(ADXAddress); // transmit to device
(Register_X0);
(Register_X1);
();
(ADXAddress,2);
if(()<=2)
{
X0 = ();
X1 = ();
X1=X1<<8;
X_out=X0+X1;
}
//------------------Y
(ADXAddress); // transmit to device
(Register_Y0);
(Register_Y1);
();
(ADXAddress,2);
if(()<=2)
{
Y0 = ();
Y1 = ();
Y1=Y1<<8;
Y_out=Y0+Y1;
}
//------------------Z
(ADXAddress); // transmit to device
(Register_Z0);
(Register_Z1);
();
(ADXAddress,2);
if(()<=2)
{
Z0 = ();
Z1 = ();
Z1=Z1<<8;
Z_out=Z0+Z1;
}
//----------------
Xg=X_out/256.0;
Yg=Y_out/256.0;
Zg=Z_out/256.0;
}
void setup()
{
();
if(x)
(9600);
delay(100);
pinMode(CD4053_A,OUTPUT);
pinMode(CD4053_B,OUTPUT);
pinMode(CD4053_C,OUTPUT);
// enable to measute g data
digitalWrite(CD4053_A,HIGH);
digitalWrite(CD4053_B,LOW);
digitalWrite(CD4053_C,LOW);
delay(10);
Wire_Start(); //初始化模块1
digitalWrite(CD4053_A,LOW);
digitalWrite(CD4053_B,HIGH);
delay(10);
Wire_Start(); //初始化模块2
digitalWrite(CD4053_B,LOW);
digitalWrite(CD4053_C,HIGH);
delay(10);
Wire_Start(); //初始化模块3
}
void loop()
{
if(x){
("----");
((flag+0));
("----");}
switch(flag){
case 1: {
digitalWrite(CD4053_A,HIGH);
digitalWrite(CD4053_C,LOW);
Wire_Get(); //读取模块1
flag=2;
break;
}
case 2:{
digitalWrite(CD4053_B,HIGH);
digitalWrite(CD4053_A,LOW);
Wire_Get(); //读取模块2
flag=3;
break;
}
case 3:{
digitalWrite(CD4053_C,HIGH);
digitalWrite(CD4053_B,LOW);
Wire_Get(); //读取模块3
flag=1;
break;
}
}
if(x)
{
("X= ");
(Xg);
(" ");
("Y= ");
(Yg);
(" ");
("Z= ");
(Zg);
}
delay(33); //改变参数可以改变读取频率
}