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()); }
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()); }
// 获取加速度零漂偏移量 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; }
// 获取角速度零漂偏移量 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()); }
// 采集传感器数据 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; // } }
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); */ }
int ADXL345::Read(int address, int length, uint8_t *buffer) { return i2cread(m_Address, address, length, buffer); }