传感器导航 全部分类

相关商品

浏览历史

当前位置: 首页 > 传感器常见问题 > arduino+L3G4200D的代码有吗?
arduino+L3G4200D的代码有吗?
传感器常见问题 / 2012-12-27

 最近在研究陀螺仪,参照网上的一些玩家贴子,用的是arduino+L3G4200D,很多贴子里的代码有:

#include 
这一行,但arduino1.01版的开发环境里并没带,楼主也没说是哪添加进来的。折腾了一晚上,终于在国外坛子里看到一个链接:https://github.com/pololu/L3G4200D/tree/66f1448d7f6767e12d0fe0c5c50d4e037aedc27c/L3G4200D

没错,这是老外公布出来的代码,经过试用可以让L3G4200D工作。但要注意几步:
1、下载这两个文件L3G4200D.cpp   L3G4200D.h,但文件好像不能直接下,代码都贴在网页上,拷下来,还得在编辑器里把格式重新编辑一下(一行行换行,唉);
2、下好的文件放在你的arduino开发环境的libraries目录下,建一个L3G4200D的目录,两个文件就放这里;
3、可能要重新开启arduino程序才能用;

这样就OK了;代码我贴下面,不知道好不好提取:

 

#ifndef L3G4200D_h
#define L3G4200D_h
#include // for byte data type// register addresses
#define L3G4200D_WHO_AM_I      0x0F
#define L3G4200D_CTRL_REG1     0x20
#define L3G4200D_CTRL_REG2     0x21
#define L3G4200D_CTRL_REG3     0x22
#define L3G4200D_CTRL_REG4     0x23
#define L3G4200D_CTRL_REG5     0x24
#define L3G4200D_REFERENCE     0x25
#define L3G4200D_OUT_TEMP      0x26
#define L3G4200D_STATUS_REG    0x27
#define L3G4200D_OUT_X_L       0x28
#define L3G4200D_OUT_X_H       0x29
#define L3G4200D_OUT_Y_L       0x2A
#define L3G4200D_OUT_Y_H       0x2B
#define L3G4200D_OUT_Z_L       0x2C
#define L3G4200D_OUT_Z_H       0x2D
#define L3G4200D_FIFO_CTRL_REG 0x2E
#define L3G4200D_FIFO_SRC_REG  0x2F
#define L3G4200D_INT1_CFG      0x30
#define L3G4200D_INT1_SRC      0x31
#define L3G4200D_INT1_THS_XH   0x32
#define L3G4200D_INT1_THS_XL   0x33
#define L3G4200D_INT1_THS_YH   0x34
#define L3G4200D_INT1_THS_YL   0x35
#define L3G4200D_INT1_THS_ZH   0x36
#define L3G4200D_INT1_THS_ZL   0x37
#define L3G4200D_INT1_DURATION 0x38

class L3G4200D
{
 public:
 typedef struct vector
 {
  float x, y, z;
 } vector;
 vector g;

 // gyro angular velocity readings
 void enableDefault(void);
 void writeReg(byte reg, byte value);
 byte readReg(byte reg);
 void read(void);

 // vector functions
 static void vector_cross(const vector *a, const vector *b, vector *out);
 static float vector_dot(const vector *a,const vector *b);
 static void vector_normalize(vector *a);
};
#endif

 

 

#include 
#include 
#include

// Defines ////////////////////////////////////////////////////////////////
// The Arduino two-wire interface uses a 7-bit number for the address, 
// and sets the last bit correctly based on reads and writes
#define GYR_ADDRESS (0xD2 >> 1)
// Public Methods //////////////////////////////////////////////////////////////
// Turns on the L3G4200D's gyro and places it in normal mode.
void L3G4200D::enableDefault(void)
{
 // 0x0F = 0b00001111
 // Normal power mode, all axes enabled
 writeReg(L3G4200D_CTRL_REG1, 0x0F);
}
// Writes a gyro register
void L3G4200D::writeReg(byte reg, byte value)
{
 Wire.beginTransmission(GYR_ADDRESS);
 Wire.write(reg);
 Wire.write(value);
 Wire.endTransmission();
}
// Reads a gyro register
byte L3G4200D::readReg(byte reg)
{
 byte value;
 Wire.beginTransmission(GYR_ADDRESS);
 Wire.write(reg);
 Wire.endTransmission();
 Wire.requestFrom(GYR_ADDRESS, 1);
 value = Wire.read();
 Wire.endTransmission();
 return value;
}
// Reads the 3 gyro channels and stores them in vector g
void L3G4200D::read()
{
 Wire.beginTransmission(GYR_ADDRESS);
 // assert the MSB of the address to get the gyro
  // to do slave-transmit subaddress updating.
 Wire.write(L3G4200D_OUT_X_L | (1 << 7));
  Wire.endTransmission();
 Wire.requestFrom(GYR_ADDRESS, 6);

 while (Wire.available() < 6);

 uint8_t xla = Wire.read();
 uint8_t xha = Wire.read();
 uint8_t yla = Wire.read();
 uint8_t yha = Wire.read();
 uint8_t zla = Wire.read();
 uint8_t zha = Wire.read();

 g.x = xha << 8 | xla;
 g.y = yha << 8 | yla;
 g.z = zha << 8 | zla;
}

void L3G4200D::vector_cross(const vector *a,const vector *b, vector *out)
{
  out->x = a->y*b->z - a->z*b->y;
  out->y = a->z*b->x - a->x*b->z;
  out->z = a->x*b->y - a->y*b->x;
}

float L3G4200D::vector_dot(const vector *a,const vector *b)
{
  return a->x*b->x+a->y*b->y+a->z*b->z;
}

void L3G4200D::vector_normalize(vector *a)
{
  float mag = sqrt(vector_dot(a,a));
  a->x /= mag;
  a->y /= mag;
  a->z /= mag;
}


本文标题: arduino+L3G4200D的代码有吗?
本文地址: http://www.rdbuy.cn/
本文标签: L3G4200D驱动,L3G4200D代码

用户评论(共0条评论)

  • 暂时还没有任何用户评论
总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页
用户名: 游客
E-mail:
评价等级:
评论内容:

挑选商品 > 确认购买 > 网上支付/货到付款 > 验货满意 > 点评商品

原装正品 金牌服务 购物有保障
  • 放心:我们的任何商品,均为原装正品
  • 舒心:倾力为您打造人性化的购物平台
  • 省心:把麻烦交给我,把快乐网购交给您
新手上路
售后流程
购物流程
订购方式
配送与支付
货到付款区域
配送支付智能查询
支付方式说明
会员中心
资金管理
我的收藏
我的订单
服务保证
退换货原则
售后服务保证
产品质量保证
联系我们
网站故障报告
选机咨询
投诉与建议