Не в состоянии записать или прочитать регистры датчиков. Есть ли у меня ошибка в коде?
Я пытаюсь записать, чтобы зарегистрировать изменение некоторых настроек для датчика, который я использую (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");
}
0
Смотрите также:
- Считывание значений с емкостного сенсорного датчика TTP229 на arduino
- Не удается найти/подключить устройства I2C (SHT31 и SGP30)
- Направление по компасу не изменяется линейно
- Отправка и получение различных типов данных через I2C в Arduino
- Как выбрать альтернативные контакты I2C на ESP32?
- Несколько датчиков I2C с одинаковым адресом
- Альтернативы библиотеке Wire для I2C
- Проблемы с подключением I2C на ESP8266 — 12F, какие контакты использовать?
Я не знаком с BNO055, но из таблицы данных видно, что есть две страницы карты регистров (которые можно изменить с помощью регистра № 7), которые могут быть либо 0 (что является конфигурацией по умолчанию при загрузке), либо 1. Регистр, который вы пытаетесь записать (0x0A), является младшим байтом данных об ускорении по оси Y (которые предположительно доступны только для чтения), когда выбрана страница регистра № 0 (по умолчанию) или конфигурация гироскопа на странице № 1. Убедитесь, что выбрана правильная страница регистрации., @StarCat
Спасибо вам за помощь. Я буду экспериментировать с этим и обновлять результаты., @Zhelyazko Grudov
Похоже, функция setMode из библиотеки, которую я использую, не работает, поэтому я изучу это. Рад принять комментарий в качестве ответа на вопрос, но не позволяет мне. Спасибо за вашу помощь., @Zhelyazko Grudov