ADXL345 SPI 配置代码
时间: 2023-07-02 10:20:13 浏览: 255
以下是ADXL345的SPI配置代码示例,供您参考:
```c
#include <SPI.h>
#define ADXL345_CS_PIN 10
void setup() {
SPI.begin();
pinMode(ADXL345_CS_PIN, OUTPUT);
digitalWrite(ADXL345_CS_PIN, HIGH); // 默认禁用 ADXL345
delay(100);
// 配置 ADXL345 寄存器
writeRegister(0x31, 0x0B); // 设置测量范围为 ±16g
writeRegister(0x2D, 0x08); // 进入测量模式
}
void loop() {
// 读取加速度值
int16_t x = readRegister16(0x32);
int16_t y = readRegister16(0x34);
int16_t z = readRegister16(0x36);
// 处理加速度值
float ax = x / 256.0;
float ay = y / 256.0;
float az = z / 256.0;
// 输出加速度值
Serial.print("x = ");
Serial.print(ax);
Serial.print(", y = ");
Serial.print(ay);
Serial.print(", z = ");
Serial.println(az);
delay(100);
}
void writeRegister(uint8_t reg, uint8_t value) {
digitalWrite(ADXL345_CS_PIN, LOW); // 使能 ADXL345
SPI.transfer(reg); // 发送寄存器地址
SPI.transfer(value); // 发送数据
digitalWrite(ADXL345_CS_PIN, HIGH); // 禁用 ADXL345
}
uint8_t readRegister(uint8_t reg) {
uint8_t value;
digitalWrite(ADXL345_CS_PIN, LOW); // 使能 ADXL345
SPI.transfer(reg | 0x80); // 发送寄存器地址,并设置最高位为1,表示读操作
value = SPI.transfer(0); // 发送一个空字节,读取 ADXL345 的数据
digitalWrite(ADXL345_CS_PIN, HIGH); // 禁用 ADXL345
return value;
}
int16_t readRegister16(uint8_t reg) {
int16_t value;
digitalWrite(ADXL345_CS_PIN, LOW); // 使能 ADXL345
SPI.transfer(reg | 0x80); // 发送寄存器地址,并设置最高位为1,表示读操作
value = SPI.transfer(0); // 发送一个空字节,读取 ADXL345 的数据
value |= (int16_t)SPI.transfer(0) << 8; // 发送一个空字节,将数据组合成16位整数
digitalWrite(ADXL345_CS_PIN, HIGH); // 禁用 ADXL345
return value;
}
```
上述代码中,`writeRegister()`函数用于向ADXL345写入寄存器值,`readRegister()`函数用于从ADXL345读取寄存器值,`readRegister16()`函数用于从ADXL345读取16位寄存器值。在`setup()`函数中,首先初始化SPI接口,然后设置ADXL345的测量范围和进入测量模式。在`loop()`函数中,循环读取ADXL345的加速度值,并输出到串口。
阅读全文