完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨,我一直在尝试将方向数据从 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); // 从寄存器 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); } |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1042 浏览 1 评论
562浏览 6评论
470浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
454浏览 5评论
456浏览 4评论
428浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-5 02:39 , Processed in 0.747634 second(s), Total 72, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号