Example #1
0
static uint16_t readRegister(uint8_t i2cAddress, uint8_t reg) {
  Wire.beginTransmission(i2cAddress);
  i2cwrite(ADS1015_REG_POINTER_CONVERT);
  Wire.endTransmission();
  Wire.requestFrom(i2cAddress, (uint8_t)2);
  return ((i2cread() << 8) | i2cread());  
}
Example #2
0
void Adafruit_MPL115A2::getPT(float *P, float *T) {
  uint16_t 	pressure, temp;
  float     pressureComp;

  // Get raw pressure and temperature settings
  Wire.beginTransmission(MPL115A2_ADDRESS);
  i2cwrite((uint8_t)MPL115A2_REGISTER_STARTCONVERSION);
  i2cwrite((uint8_t)0x00);
  Wire.endTransmission();

  // Wait a bit for the conversion to complete (3ms max)
  delay(5);

  Wire.beginTransmission(MPL115A2_ADDRESS);
  i2cwrite((uint8_t)MPL115A2_REGISTER_PRESSURE_MSB);  // Register
  Wire.endTransmission();

  Wire.requestFrom(MPL115A2_ADDRESS, 4);
  pressure = (( (uint16_t) i2cread() << 8) | i2cread()) >> 6;
  temp = (( (uint16_t) i2cread() << 8) | i2cread()) >> 6;

  // See datasheet p.6 for evaluation sequence
  pressureComp = _mpl115a2_a0 + (_mpl115a2_b1 + _mpl115a2_c12 * temp ) * pressure + _mpl115a2_b2 * temp;

  // Return pressure and temperature as floating point values
  *P = ((65.0F / 1023.0F) * pressureComp) + 50.0F;        // kPa
  *T = ((float) temp - 498.0F) / -5.35F +25.0F;           // C
  
}
static int16_t read16(uint8_t reg) {
  Wire.beginTransmission(ADXL345_ADDRESS);
  i2cwrite(reg);
  Wire.endTransmission();
  Wire.requestFrom(ADXL345_ADDRESS, 2);
  return (int16_t)(i2cread() | (i2cread() << 8));
}
int hmc5883_read(char *buffer)
{
//	char data[1];
	char tmp[1];
	short i;
//	data[0]=0x01;
	i2cread(HMC5983_ADDRESS,ADDR_STATUS,1,tmp);
	if(tmp[0] & 0x1 == 1){
		 for(i=0;i<6;i++)
		 	i2cread(HMC5983_ADDRESS,(ADDR_DATA_OUT_X_MSB+i),1,&buffer[i]);
		 return 1;
	}
	return 0;
}
int16_t ADXL345::read16(uint8_t reg) {
  if (_i2c) {
    Wire.beginTransmission(ADXL345_ADDRESS);
    i2cwrite(reg);
    Wire.endTransmission();
    Wire.requestFrom(ADXL345_ADDRESS, 2);
    return (uint16_t)(i2cread() | (i2cread() << 8));  
  } else {
    reg |= 0x80 | 0x40; // read byte | multibyte
    digitalWrite(_cs, LOW);
    spixfer(_clk, _di, _do, reg);
    uint16_t reply = spixfer(_clk, _di, _do, 0xFF)  | (spixfer(_clk, _di, _do, 0xFF) << 8);
    digitalWrite(_cs, HIGH);
    return reply;
  }    
}
int16_t Adafruit_ADXL345_Unified::read16(uint8_t reg) {
//  if (_i2c) {
    TinyWireM.beginTransmission(ADXL345_ADDRESS);
    i2cwrite(reg);
    TinyWireM.endTransmission();
    TinyWireM.requestFrom(ADXL345_ADDRESS, 2);
    return (uint16_t)(i2cread() | (i2cread() << 8));  
//  } else {
//    reg |= 0x80 | 0x40; // read byte | multibyte
//    digitalWrite(_cs, LOW);
//    spixfer(_clk, _di, _do, reg);
//    uint16_t reply = spixfer(_clk, _di, _do, 0xFF)  | (spixfer(_clk, _di, _do, 0xFF) << 8);
//    digitalWrite(_cs, HIGH);
//    return reply;
//  }
}
static uint8_t readRegister(uint8_t reg) {
  Wire.beginTransmission(ADXL345_ADDRESS);
  i2cwrite(reg);
  Wire.endTransmission();
  Wire.requestFrom(ADXL345_ADDRESS, 1);
  return (i2cread());
}
Example #8
0
// 获取加速度零漂偏移量
void Get_Accel_Bias(void)
{
	uint32_t i;
	int16_t accel[3]; 
	uint8_t data_write[6];
	float accel_x = 0, accel_y = 0, accel_z = 0;
	static int16_t count2 = 0;
	
	// 取2000次数据
	for(i = 0; i < 2000; i++)
	{
		if(!i2cread(MPU6050_Addr2, ACCEL_XOUT_H, 14, data_write))
		{
			// 获取三轴数据
			accel[0] = (((int16_t)data_write[0])<<8) | data_write[1];
			accel[1] = (((int16_t)data_write[2])<<8) | data_write[3];
			accel[2] = (((int16_t)data_write[4])<<8) | data_write[5];
			accel_x += accel[0];
			accel_y += accel[1];
			accel_z += accel[2];
			// 记录有效次数
			count2++;
		}
	}
	
	// 求平均值得到零漂偏移量
	Accel_Xout_Offset = (float)accel_x / count2;
	Accel_Yout_Offset = (float)accel_y / count2;
	Accel_Zout_Offset = (float)accel_z / count2;
}
Example #9
0
// 获取角速度零漂偏移量
void Get_Gyro_Bias(void)
{
	uint16_t i;
	int16_t gyro[3];
	int32_t gyro_x = 0, gyro_y = 0, gyro_z = 0;
	static int16_t count = 0;
	uint8_t data_write[6];

	// 取2000次数据
	for(i = 0; i < 2000; i++)
	{
		if(!i2cread(MPU6050_Addr2, GYRO_XOUT_H, 6, data_write))
		{
			// 获取三轴数据
			gyro[0] = ((((int16_t)data_write[0])<<8) | data_write[1]);
			gyro[1] = ((((int16_t)data_write[2])<<8) | data_write[3]);
			gyro[2] = ((((int16_t)data_write[4])<<8) | data_write[5]);
			gyro_x += gyro[0];
			gyro_y += gyro[1];
			gyro_z += gyro[2];
			// 记录有效次数
			count++;
		}
	}
	
	// 求平均值得到零漂偏移量
	Gyro_Xout_Offset = (float)gyro_x / count;
	Gyro_Yout_Offset = (float)gyro_y / count;
	Gyro_Zout_Offset = (float)gyro_z / count;
}
uint8_t Adafruit_CAP1188::readRegister(uint8_t reg) {
  if (_i2c) {
    Wire.beginTransmission(_i2caddr);
    i2cwrite(reg);
    Wire.endTransmission();
    Wire.requestFrom(_i2caddr, 1);
    return (i2cread());
  } else {
    if (_clk == -1) {
      //SPCRback = SPCR;
      //SPCR = mySPCR;
    }
    digitalWrite(_cs, LOW);
    // set address
    spixfer(0x7D);
    spixfer(reg);
    digitalWrite(_cs, HIGH);
    digitalWrite(_cs, LOW);
    spixfer(0x7F);
    uint8_t reply = spixfer(0); 
    digitalWrite(_cs, HIGH);
    if (_clk == -1) {
      //SPCR = SPCRback;
    }
    return reply;
  }  
}
uint8_t Adafruit_MMA8451::readRegister8(uint8_t reg) {
    Wire.beginTransmission(_i2caddr);
    i2cwrite(reg);
    Wire.endTransmission(false); // MMA8451 + friends uses repeated start!!

    Wire.requestFrom(_i2caddr, 1);
    if (! Wire.available()) return -1;
    return (i2cread());
}
Example #12
0
// 采集传感器数据
void Get_AHRS_Data(void)
{
	int16_t gyro[3], accel[3]; 
	uint8_t data_write[14];

	// 获取加速度和角速度
	if(!i2cread(MPU6050_Addr2, ACCEL_XOUT_H, 14, data_write))
	{
		accel[0] = (((int16_t)data_write[0])<<8) | data_write[1];
		accel[1] = (((int16_t)data_write[2])<<8) | data_write[3];
		accel[2] = (((int16_t)data_write[4])<<8) | data_write[5];
		gyro[0]  = (((int16_t)data_write[8])<<8) | data_write[9];
		gyro[1]  = (((int16_t)data_write[10])<<8) | data_write[11];
		gyro[2]  = (((int16_t)data_write[12])<<8) | data_write[13];
		
		// 零漂处理及单位转换
		init_ax = (float)(accel[0] - Accel_Xout_Offset) / Accel_4_Scale_Factor;
		init_ay = (float)(accel[1] - Accel_Yout_Offset) / Accel_4_Scale_Factor;
		init_az = (float)(accel[2] + (Accel_4_Scale_Factor - Accel_Zout_Offset)) / Accel_4_Scale_Factor;
		init_gx = ((float)gyro[0] - Gyro_Xout_Offset) / Gyro_500_Scale_Factor / ARC_TO_DEG;
		init_gy = ((float)gyro[1] - Gyro_Yout_Offset) / Gyro_500_Scale_Factor / ARC_TO_DEG;
		init_gz = ((float)gyro[2] - Gyro_Zout_Offset) / Gyro_500_Scale_Factor / ARC_TO_DEG;
	}
	// 获取磁通量
	if(!i2cread(HMC5883L_Addr2, HMC5883L_XOUT_MSB, 6, data_write))
	{	
		init_mx = (data_write[0] << 8) | data_write[1];
		init_my = (data_write[4] << 8) | data_write[5];
		init_mz = (data_write[2] << 8) | data_write[3];

		// 补码处理及单位转换
		if(init_mx > 0x7fff) init_mx-=0xffff;
		if(init_my > 0x7fff) init_my-=0xffff;
		if(init_mz > 0x7fff) init_mz-=0xffff;
		init_mx /= 1090.0f;
		init_my /= 1090.0f;
		init_mz /= 1090.0f;
	}
}
uint8_t ADXL345::readRegister(uint8_t reg) {
  if (_i2c) {
    Wire.beginTransmission(ADXL345_ADDRESS);
    i2cwrite(reg);
    Wire.endTransmission();
    Wire.requestFrom(ADXL345_ADDRESS, 1);
    return (i2cread());
  } else {
    reg |= 0x80; // read byte
    digitalWrite(_cs, LOW);
    spixfer(_clk, _di, _do, reg);
    uint8_t reply = spixfer(_clk, _di, _do, 0xFF);
    digitalWrite(_cs, HIGH);
    return reply;
  }  
}
uint8_t Adafruit_ADXL345_Unified::readRegister(uint8_t reg) {
//  if (_i2c) {
    TinyWireM.beginTransmission(ADXL345_ADDRESS);
    i2cwrite(reg);
    TinyWireM.endTransmission();
    TinyWireM.requestFrom(ADXL345_ADDRESS, 1);
    return (i2cread());
//  } else {
//    reg |= 0x80; // read byte
//    digitalWrite(_cs, LOW);
//    spixfer(_clk, _di, _do, reg);
//    uint8_t reply = spixfer(_clk, _di, _do, 0xFF);
//    digitalWrite(_cs, HIGH);
//    return reply;
//  }
}
Example #15
0
void Adafruit_MPL115A2::readCoefficients() {
  int16_t a0coeff;
  int16_t b1coeff;
  int16_t b2coeff;
  int16_t c12coeff;

  Wire.beginTransmission(MPL115A2_ADDRESS);
  i2cwrite((uint8_t)MPL115A2_REGISTER_A0_COEFF_MSB);
  Wire.endTransmission();

  Wire.requestFrom(MPL115A2_ADDRESS, 8);
  a0coeff = (( (uint16_t) i2cread() << 8) | i2cread());
  b1coeff = (( (uint16_t) i2cread() << 8) | i2cread());
  b2coeff = (( (uint16_t) i2cread() << 8) | i2cread());
  c12coeff = (( (uint16_t) (i2cread() << 8) | i2cread())) >> 2;

  /*  
  Serial.print("A0 = "); Serial.println(a0coeff, HEX);
  Serial.print("B1 = "); Serial.println(b1coeff, HEX);
  Serial.print("B2 = "); Serial.println(b2coeff, HEX);
  Serial.print("C12 = "); Serial.println(c12coeff, HEX);
  */

  _mpl115a2_a0 = (float)a0coeff / 8;
  _mpl115a2_b1 = (float)b1coeff / 8192;
  _mpl115a2_b2 = (float)b2coeff / 16384;
  _mpl115a2_c12 = (float)c12coeff;
  _mpl115a2_c12 /= 4194304.0;

  /*
  Serial.print("a0 = "); Serial.println(_mpl115a2_a0);
  Serial.print("b1 = "); Serial.println(_mpl115a2_b1);
  Serial.print("b2 = "); Serial.println(_mpl115a2_b2);
  Serial.print("c12 = "); Serial.println(_mpl115a2_c12);
  */
}
Example #16
0
int ADXL345::Read(int address, int length, uint8_t *buffer) {
	return i2cread(m_Address, address, length, buffer);
}