模块: arduino nano + ADXL345
ADXL345模块上延伸出8个引脚
分别为: GND VCC CS INT1 INT2 SDO SDA SCL
电源电压范围:2.0 V至3.6 V 这里我们使用 nano 的3.3V电源引脚
引脚连接
arduino nano ADXL345
GND GND
3V3 VCC
A4 SDA
A5 SCL
A4,A5啥逻辑都还没搞清… 还是在网上找的一篇陀螺仪的连接方法平凑起来的.
连接好硬件部分, 就可以开始捣腾软件部分
在网上找了个例子, 自己仔细研究每个配置量的意义.
// 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 = 0xA7 >> 1; // 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;
void setup()
{
Wire.begin();
Serial.begin(9600);
delay(100);
// enable to measute g data
Wire.beginTransmission(ADXAddress);
Wire.send(Register_2D);
Wire.send(8); //measuring enable
Wire.endTransmission(); // stop transmitting
}
char str[512];
void loop()
{
//--------------X
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.send(Register_X0);
Wire.send(Register_X1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available() {
X0 = Wire.receive();
X1 = Wire.receive();
X1=X1< X_out=X0+X1;
}
//——————Y
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.send(Register_Y0);
Wire.send(Register_Y1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available() {
Y0 = Wire.receive();
Y1 = Wire.receive();
Y1=Y1< Y_out=Y0+Y1;
}
//——————Z
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.send(Register_Z0);
Wire.send(Register_Z1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available() {
Z0 = Wire.receive();
Z1 = Wire.receive();
Z1=Z1< Z_out=Z0+Z1;
}
//----------------轉換成 G 值
Xg=X_out/256.0;
Yg=Y_out/256.0;
Zg=Z_out/256.0;
Serial.print(“X= “);
Serial.print(Xg);
Serial.print(” “);
Serial.print(“Y= “);
Serial.print(Yg);
Serial.print(” “);
Serial.print(“Z= “);
Serial.print(Zg);
Serial.println(” “);
/*sprintf(str, “%d,%d,%d”, Xg, Yg, Zg);
Serial.print(str);
Serial.print(10, BYTE);
Serial.print(13, BYTE);*/
delay(200);
}
ADXAddress 不知道是在那个文档中看到的, 大概的意思就是, 在该芯片使用I2C方式时, 如果芯片接口CS口为低电平时使用0xA7地址访问芯片, 然而nanoWire使用的是7比特地址, 所以将总线地址向右移一位
Register_… 这些都是ADXL芯片中的寄存器地址, 可以在文档中查看到每个地址对应存储的信息
总的回过头在看程序是相当的简单,
但也觉得有点陌生, 可能不是自己亲自写的原因, 也有可能是自己本身对代码就不够了解.
arduino的一些接口确实太不熟悉了. 要是能有个全面的中文文档该多好.
请问A4和A5是什么呀?连到那里去呀?你没写上去的引脚是不是就不用连呢?
A4, A5是nano上的接口, 你也正在尝试做这个吗?
0xA7是cs高电平时候的地址,前七位,最后一位对应读写地址
这个我记得是连接加速度模块的总线地址, 可以在手册中查到