Доброго времени суток. Возникла проблема при подключении ИМУ сенсора BMI160 через Амперковский I2C хаб. Хаб запускается, но при запуске кода i2cHubScanner.ino с вики Амперки не видит никаких устройств. При запуске своего кода хаб запускается, пытается инициировать имушку, но имушка падает. Использовал библиотеки TroykaI2CHub Амперки и BMI160-Arduino-master от hanyazou. Хаб и имушки точно живые. Хаб проверял с помощью акселерометра на LIS331 от Амперки и того же i2cHubScanner.ino, BMI160 - напрямую с ардуины через I2C. Понятия не имею в чем дело. Еще один вопрос касаемо частоты измерений. При подключении имушек напрямую через I2C к ардуине уперся в потолок в 215Гц на стандартных настройках. В BMI160-Arduino-master есть много всего интересного, в том числе настройка частоты измерений. Номинально, потолок измерений - 3.2кГц. Но метод почему-то не работает. Подскажите, пожалуйста, в чем может быть проблема и, по возможности, как исправить. Спасибо Код (C++): // библиотека для работы с I²C хабом #include <TroykaI2CHub.h> #include <BMI160Gen.h> #define channels 8 const int add = 0x70; const int select_pin = 10; BMI160GenClass sensor1; BMI160GenClass sensor2; BMI160GenClass sensor3; // создаём объект для работы с хабом // адрес по умолчанию 0x70 TroykaI2CHub splitter; int address_list[channels]; // можно создавать несколько объектов с разными адресами // подробнее читайте на: // http://wiki.amperka.ru/продукты:troyka-i2c-hub void setup() { // открываем последовательный порт Serial.begin(115200); // ждём открытия порта while (!Serial) { } // печатаем сообщение об успешной инициализации Serial-порта Serial.println("Serial init OK"); // начало работы с I²C хабом splitter.begin(); // Wire.begin(); for (int i = 0; i < channels; i++) { splitter.setBusChannel(i); // выводим номер канала Serial.print("Set channel "); Serial.print(i); Serial.println(":"); sensor1.begin(BMI160GenClass::I2C_MODE, add, select_pin); } // sensor2.begin(BMI160GenClass::I2C_MODE, i2c_addr_2, select_pin); Serial.println("Splitter init OK"); // ждём одну секунду delay(1000); } void loop() { int gxRaw[2], gyRaw[2], gzRaw[2]; // raw gyro values int axRaw[2], ayRaw[2], azRaw[2]; // raw accel values float gx[2], gy[2], gz[2]; // final gyro values float ax[2], ay[2], az[2]; // final accel values for (int i = 0; i < channels; i++) { // byte state = 1; if (i > 1) { continue; } splitter.setBusChannel(i); // read raw gyro measurements from device sensor1.readGyro(gxRaw[i], gyRaw[i], gzRaw[i]); // read raw accel measurements from device sensor1.readAccelerometer(axRaw[i], ayRaw[i], azRaw[i]); // calculate the gyro and accel ax[i] = convertRawAccel(axRaw[i]); ay[i] = convertRawAccel(ayRaw[i]); az[i] = convertRawAccel(azRaw[i]); gx[i] = convertRawGyro(gxRaw[i]); gy[i] = convertRawGyro(gyRaw[i]); gz[i] = convertRawGyro(gzRaw[i]); Serial.print("Channel "); Serial.print(i); Serial.print(": "); Serial.print(gx[i]); Serial.print("\t"); Serial.print(gy[i]); Serial.print("\t"); Serial.print(gz[i]); Serial.print("\t"); Serial.print(ax[i]); Serial.print("\t"); Serial.print(ay[i]); Serial.print("\t"); Serial.print(az[i]); Serial.println(); } } void startScanerI2C() { // переменная состояние ответа byte state; // переменная хранения текущего адреса byte address; // переменная для хранения количества найденых I²C устройств int countDevices = 0; // печатем о начале поиска Serial.println("Scanning..."); // перебираем по очереди все адреса от 0 до 127 for (address = 1; address < 127; address++ ) { // начинаем передачу данных по текущем адресу Wire.beginTransmission(address); // завершаем передачу данных state = Wire.endTransmission(); // если пришедший байт равен нулю if (state == 0) { // на адресе есть устройство // печатаем об этом Serial.print("I2C device found at address 0x"); // если адрес меньше 16, печатем ноль if (address < 16) { Serial.print("0"); } // печатаем текущий адрес в 16 разрядной системе исчесления Serial.print(address, HEX); Serial.println(" !"); // инкрементируем кол-во найденых устройств countDevices++; } } // если не найдено ни одного I²C устройства // печатаем об этом if (countDevices == 0) { Serial.println("No I²C devices found"); } else { // печатаем о завершении процесса Serial.println("Done"); } } float convertRawGyro(int gRaw) { // since we are using 250 degrees/seconds range // -250 maps to a raw value of -32768 // +250 maps to a raw value of 32767 float g = (gRaw * 250.0) / 32768.0; return g; } float convertRawAccel(int aRaw) { // since we are using +/-2g range // -2g maps to a raw value of -32768 // +2g maps to a raw value of 32767 float a = (aRaw * 19620.0) / 32768.0; //mm/s^2 return a; }