Пример #1
0
void BaroSensorClass::begin()
{
  Wire.begin();
  Wire.beginTransmission(BARO_ADDR);
  Wire.write(CMD_RESET);
  err = _endTransmission();
  if(err) return;

  uint16_t prom[7];
  for(int i = 0; i < 7; i++) {
    Wire.beginTransmission(BARO_ADDR);
    Wire.write(CMD_PROM_READ(i));
    err = _endTransmission(false);
    if(err)
      return;
    int req = Wire.requestFrom(BARO_ADDR, 2);
    if(req != 2) {
      err = ERR_BAD_READLEN;
      return;
    }
    prom[i] = ((uint16_t)Wire.read()) << 8;
    prom[i] |= Wire.read();
  }

  // TODO verify CRC4 in top 4 bits of prom[0] (follows AN520 but not directly...)

  c1 = prom[1];
  c2 = prom[2];
  c3 = prom[3];
  c4 = prom[4];
  c5 = prom[5];
  c6 = prom[6];
  initialised = true;
}
Пример #2
0
uint32_t BaroSensorClass::takeReading(uint8_t trigger_cmd, BaroOversampleLevel oversample_level)
{
  Wire.beginTransmission(BARO_ADDR);
  Wire.write(trigger_cmd);
  err = _endTransmission();

  if(err)
    return 0;
  uint8_t sampling_delay = pgm_read_byte(SamplingDelayMs + (int)oversample_level);
  delay(sampling_delay);

  Wire.beginTransmission(BARO_ADDR);
  Wire.write(CMD_READ_ADC);
  err = _endTransmission(false);
  if(err)
    return 0;
  int req = Wire.requestFrom(BARO_ADDR, 3);
  if(req != 3)
    req = Wire.requestFrom(BARO_ADDR, 3); // Sometimes first read fails...?
  if(req != 3) {
    err = ERR_BAD_READLEN;
    return 0;
  }
  uint32_t result = (uint32_t)Wire.read() << 16;
  result |= (uint32_t)Wire.read() << 8;
  result |= Wire.read();
  return result;
}
Пример #3
0
float Compass::getReading() {
    _beginTransmission();
    _endTransmission();

    //time delays required by HMC6352 upon receipt of the command
    //Get Data. Compensate and Calculate New Heading : 6ms
    delay(6);

    Wire.requestFrom(HMC6352SlaveAddress, 2); //get the two data bytes, MSB and LSB

    //"The heading output data will be the value in tenths of degrees
    //from zero to 3599 and provided in binary format over the two bytes."
    byte MSB = Wire.read();
    byte LSB = Wire.read();

    float headingSum = (MSB << 8) + LSB; //(MSB / LSB sum)
    float headingInt = headingSum / 10;

    return headingInt;
}