嗨,我一直在尝试将方向数据从 adlx345 传递到 esp8266,但它提供了错误的信息,我可以从 acelara
tion 传递数据,但我传递方向数据的代码无法正常工作。我会在这里传递代码。
Scl ---D1
Sda---D2
Gnd--gnd
3v3---3v3
#include // Wire library - 用于 I2C
通信
int ADXL345 = 0x53; // ADXL345 传感器 I2C 地址
float X_out, Y_out, Z_out; // 输出
float roll,pitch,rollF,pitchF=0;
void setup() {
//ESP8266 主控
Serial.begin(9600); // 启动串行通信以在串行监视器上打印结果
Wire.begin(); // 启动 Wire 库
// 将 ADXL345 设置为测量模式
Wire.beginTransmission(ADXL345); // 开始与设备通信
Wire.write(0x2D); // 访问/与 POWER_CTL 寄存器对话 - 0x2D
// 启用测量
Wire.write(8); // 用于测量启用的位 D3 高(8dec -> 0000 1000 二进制)
Wire.endTransmission();
延迟(10);
//偏移校准
//X轴
Wire.beginTransmission(ADXL345);
Wire.write(0x1E);
电线. 写 (1);
Wire.endTransmission();
延迟(10);
//Y 轴
Wire.beginTransmission(ADXL345);
Wire.write(0x1F);
电线.写(-2);
Wire.endTransmission();
延迟(10);
//Z轴
Wire.beginTransmission(ADXL345);
Wire.write(0x20);
电线.写(-9);
Wire.endTransmission();
延迟(10);
}
void loop() {
// === 读取加速器数据 === //
Wire.beginTransmission(ADXL345);
Wire.write(0x32); // 从寄存器 0x32 (ACCEL_XOUT_H) 开始
Wire.endTransmission(false);
Wire.requestFrom(ADXL345, 6, true); // 总共读取 6 个寄存器,每个轴值存储在 2 个寄存器中
X_out = ( Wire.read() | Wire.read() << 8); // X轴值
X_out = X_out / 256; //对于 +-2g 的范围,我们需要将原始值除以 256,根据数据表
Y_out = ( Wire.read() | Wire.read() << 8); // Y轴值
Y_out = Y_out / 256;
Z_out = ( Wire.read() | Wire.read() << 8); // Z轴值
Z_out = Z_out / 256;
// 计算Roll和Pitch(绕X轴旋转,绕Y轴旋转)
roll = atan(Y_out / sqrt(pow(X_out, 2) + pow(Z_out, 2))) * 180 / PI;
pitch = atan(-1 * X_out / sqrt(pow(Y_out, 2) + pow(Z_out, 2))) * 180 / PI;
// 低通滤波器
rollF = 0.94 * rollF + 0.06 * roll;
间距F = 0.94 * 间距F + 0.06 * 间距;
Serial.print(" X= ");
串行打印(rollF);
序列号.print("/");
Serial.print(" Y= ");
Serial.print(pitchF);//ln na ultima linha
Serial.print("/");
Serial.print(" Z= ");
Serial.println(Z_out);
x:89.50 y=-0.01 z=0.83
代码仅显示加速度(有效)
#include
#include // Adafruit 传感器库
#include // ADXL345 库
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(); // ADXL345 对象
void setup() {
Serial.begin(9600);
if(!accel.begin()) // 如果未找到 ASXL345 传感器
{
Serial.println("未检测到 ADXL345");
同时(1);
}
}
void loop() {
sensors_event_t 事件;
accel.getEvent(&事件);
Serial.print("X:");
Serial.print(event.acceleration.x);
序列号.print(" ");
串行。
Serial.print(event.acceleration.y);
序列号.print(" ");
Serial.print("Z:");
Serial.print(event.acceleration.z);
序列号.print(" ");
Serial.println("m/s^2");
延迟(500);
}