乐鑫技术交流
直播中

张燕

7年用户 1300经验值
私信 关注
[问答]

将方向数据从adlx345传递到esp8266报错是哪里的问题?

嗨,我一直在尝试将方向数据从 adlx345 传递到 esp8266,但它提供了错误的信息,我可以从 acelaration 传递数据,但我传递方向数据的代码无法正常工作。我会在这里传递代码。
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); // 从寄存器 0x​​32 (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);
}

               


                        

更多回帖

发帖
×
20
完善资料,
赚取积分