Не в состоянии записать или прочитать регистры датчиков. Есть ли у меня ошибка в коде?

Я пытаюсь записать, чтобы зарегистрировать изменение некоторых настроек для датчика, который я использую (BNO055), а затем прочитать тот же регистр, чтобы проверить, являются ли изменения успешными.

Однако единственное значение, которое я могу прочитать из регистра, - это 1. Это проблема с моим кодом или что - то связано с датчиком?

Спасибо вам за помощь. Я включил то, что, по моему мнению, является соответствующим кодом.

/**************************************************************************/
void write_register(uint8_t sensor_address, uint8_t register_address, uint8_t register_value) {
  wire_custom.beginTransmission (sensor_address);
  wire_custom.write(register_address);
  wire_custom.write(register_value);
  wire_custom.endTransmission ();
}

/**************************************************************************/
byte read_register(uint8_t sensor_address, uint8_t register_address, uint8_t bytes) {
  uint8_t result;
  wire_custom.beginTransmission (sensor_address);
  wire_custom.write(register_address);
  wire_custom.endTransmission ();
  wire_custom.requestFrom(sensor_address, bytes);
  result = wire_custom.read();
  return result;
}

/**************************************************************************/
void setup(void)
{
  wire_custom.begin(I2C_SDA, I2C_SCL, 400000);

  Serial.begin(115200);

  if (!bno.begin())
  {
    Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
    while (1);
  }
  delay(1000);
  bno.setExtCrystalUse(true);

  // updating range
  bno.setMode(Adafruit_BNO055::OPERATION_MODE_CONFIG);
  delay(1000);
  write_register (0x28, 0x0A, 0b00111000);
  // bno.setMode(Adafruit_BNO055::OPERATION_MODE_GYRONLY);
  delay(1000);
  register_1 = read_register (0x28, 0x0A, 1); 
}

/**************************************************************************/
void loop(void)
{
  sensor_calibration ();

  sensor_data (x_placeholder, y_placeholder);

  // printing register 1
  Serial.print(register_1);
  Serial.print("\n");
}

, 👍1

Обсуждение

Я не знаком с BNO055, но из таблицы данных видно, что есть две страницы карты регистров (которые можно изменить с помощью регистра № 7), которые могут быть либо 0 (что является конфигурацией по умолчанию при загрузке), либо 1. Регистр, который вы пытаетесь записать (0x0A), является младшим байтом данных об ускорении по оси Y (которые предположительно доступны только для чтения), когда выбрана страница регистра № 0 (по умолчанию) или конфигурация гироскопа на странице № 1. Убедитесь, что выбрана правильная страница регистрации., @StarCat

Спасибо вам за помощь. Я буду экспериментировать с этим и обновлять результаты., @Zhelyazko Grudov

Похоже, функция setMode из библиотеки, которую я использую, не работает, поэтому я изучу это. Рад принять комментарий в качестве ответа на вопрос, но не позволяет мне. Спасибо за вашу помощь., @Zhelyazko Grudov