Я программирую BBB для управления MPU6050 с помощью шины I2C. Моя цель — сделать трекер движения, который в конечном итоге дает комбинации рысканья-тангажа. Я использую библиотеку MPU6050, созданную Джеффом Роубергом. Под моим main.cpp,
MPU6050 accelgyro;
int main() {
accelgyro.initialize();
while(true){
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
printf(" %d \t %d \t %d \t %d \t %d \t %d\r", ax, ay, az, gx, gy, gz);
usleep(50*1000);
}
}
Это аннотация моего основного файла. Проблема, с которой я здесь сталкиваюсь, заключается в том, что печать 6 различных значений acc и gyro может быть достигнута, пока шина I2C, к которой подключен MPU6050, не заблокируется. Например, в этом цикле с задержкой 50 мсек между каждым циклом я могу получить иногда 40000 выборок, иногда 30000 выборок. Затем происходит ошибка чтения / записи на шине I2C. Как я проверяю команду i2cdetect на BBB i2cdetect -y -r 1
нет ответа ни от MPU, ни от BBB. Я попытался увеличить продолжительность 50 мс до 100 мсек, и та же самая ситуация происходит. Кроме того, даже если я ничего не печатаю, только работает accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
внутри цикла while линия I2C снова блокируется. Когда я отключаю MPU6050, затем снова подключаю его к линии SDL, не перезагружая BBB, все возвращается в норму. Что мне здесь не хватает? Любое предложение приветствуется, спасибо.
Задача ещё не решена.
Других решений пока нет …