极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8359|回复: 0

请朋友们看看我的九轴是不是硬件坏了

[复制链接]
发表于 2012-12-27 00:38:42 | 显示全部楼层 |阅读模式
本帖最后由 xyxdwh 于 2012-12-27 00:40 编辑

请朋友们看看我刚买的九轴传感器里的加速度传感器Z轴是不是硬件坏了? zAcc的值一直是511


下面是测试代码

#include <Wire.h>           // IIC运行库



int ADXAddress = 0xa7 >> 1; // ADXL345的I2C地址

int L3GAddress = 0x69;      // L3G4200D的I2C地址

int HMCAddress = 0x1E;      // HMC5883L的I2C地址



byte vL, vH;                // 存放低位、高位值

int xAcc,  yAcc,  zAcc;     // 存放加速度值

int xGyro, yGyro, zGyro;    // 存放角速度值

int xMag,  yMag,  zMag;     // 存放地磁场值



void setup()

{

    Serial.begin(38400);         // 定义串口

    Wire.begin();

    delay(100);



    Serial.println("starting up....");

    writeRegister(ADXAddress, 0x2D, 0b00001000);   // 测量模式

                            // 配置ADXL345

    writeRegister(L3GAddress, 0x20, 0b00001111);   // 设置睡眠模式、x, y, z轴使能

    writeRegister(L3GAddress, 0x21, 0b00000000);   // 选择高通滤波模式和高通截止频率

    writeRegister(L3GAddress, 0x22, 0b00000000);   // 设置中断模式

    writeRegister(L3GAddress, 0x23, 0b00110000);   // 设置量程(2000dps)、自检状态、SPI模式

    writeRegister(L3GAddress, 0x24, 0b00000000);   // FIFO & 高通滤波

                            // 配置L3G4200D(2000 deg/sec)

    writeRegister(HMCAddress, 0x02, 0x00);         // 连续测量

                            // 配置HMC5883L

    delay(2000);

}



void loop() {

    getAccValues();

    Serial.print("xAcc=");

    Serial.print(xAcc);

    Serial.print("  yAcc=");

    Serial.print(yAcc);

    Serial.print("  zAcc=");

    Serial.println(zAcc);

    delay(100);



    getGyroValues();

    Serial.print("xGyro=");

    Serial.print(xGyro);

    Serial.print("  yGyro=");

    Serial.print(yGyro);

    Serial.print("  zGyro=");

    Serial.println(zGyro);

    delay(100);



    getMagValues();

    Serial.print("xMag=");

    Serial.print(xMag);

    Serial.print("  yMag=");

    Serial.print(yMag);

    Serial.print("  zMag=");

    Serial.println(zMag);

    Serial.println();

    delay(1000);

}



void getAccValues() {       // 加速度值读取



    vL = readRegister(ADXAddress, 0x32);

    vH = readRegister(ADXAddress, 0x33);

    xAcc = (vH << 8) | vL;



    vL = readRegister(ADXAddress, 0x34);

    vH = readRegister(ADXAddress, 0x35);

    yAcc = (vH << 8) | vL;



    vL = readRegister(ADXAddress, 0x36);

    vH = readRegister(ADXAddress, 0x37);

    zAcc = (vH << 8) | vL;

}



void getGyroValues() {       // 角速度值读取



    vL = readRegister(L3GAddress, 0x28);

    vH = readRegister(L3GAddress, 0x29);

    xGyro = (vH << 8) | vL;



    vL = readRegister(L3GAddress, 0x2A);

    vH = readRegister(L3GAddress, 0x2B);

    yGyro = (vH << 8) | vL;



    vL = readRegister(L3GAddress, 0x2C);

    vH = readRegister(L3GAddress, 0x2D);

    zGyro = (vH << 8) | vL;

}



void getMagValues() {       // 磁场值读取



    vH = readRegister(HMCAddress, 0x03);

    vL = readRegister(HMCAddress, 0x04);

    xMag = (vH << 8) | vL;



    vH = readRegister(HMCAddress, 0x05);

    vL = readRegister(HMCAddress, 0x06);

    yMag = (vH << 8) | vL;



    vH = readRegister(HMCAddress, 0x07);

    vL = readRegister(HMCAddress, 0x08);

    zMag = (vH << 8) | vL;

}



int readRegister(int deviceAddress, byte address) {

            // 读寄存器

    int v;

    Wire.beginTransmission(deviceAddress);

    Wire.write(address);

    Wire.endTransmission();

    Wire.requestFrom(deviceAddress, 1);

    while(!Wire.available()) {}

    v = Wire.read();

    return v;

}



void writeRegister(int deviceAddress, byte address, byte val) {

            // 写寄存器

    Wire.beginTransmission(deviceAddress);

    Wire.write(address);

    Wire.write(val);

    Wire.endTransmission();

}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-18 09:24 , Processed in 0.057977 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表