Почему датчик IMU ICM20948 Waveshare отправляет неточные данные?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Почему датчик IMU ICM20948 Waveshare отправляет неточные данные?

Сообщение Anonymous »

У меня есть Raspberry Pi 4 с Bookworm и датчик Waveshare 10-Dof IMU, подключенный через i2c. Я уверен, что подключил правильно. Я получил тестовое приложение (wget https://files.waveshare.com/upload/c/c1 ... _D_Code.7z) и изменил его для libi2c-dev.
Waveshare_10Dof-D. cpp:
// ...

int file = -1;
void i2cInit(void)
{
int adapter_nr = 1;
char filename[20];
snprintf(filename, 19, "/dev/i2c-%d", adapter_nr);
file = open(filename, O_RDWR);
if (file < 0) {
exit(1);
}
return;
}

uint8_t I2C_ReadOneByte(uint8_t DevAddr, uint8_t RegAddr)
{
if (ioctl(file, I2C_SLAVE, DevAddr) < 0) {
exit(1);
}

uint8_t res;
res = i2c_smbus_read_byte_data(file, RegAddr);
if (res < 0) {
qDebug() view->setScene(scene);
//scene->addItem(new QGraphicsRectItem(scene->sceneRect()));
r = new QGraphicsRectItem(scene->sceneRect());
scene->addItem(r);

QThread *thread = new QThread;
m_thread = new Thread;
m_thread->moveToThread(thread);

connect(thread, &QThread::started, m_thread, &Thread::run);
connect(m_thread, &Thread::data, this, &MainWindow::onData);

thread->start();
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::onData(float roll, float pitch, float yaw, int x, int y, int z)
{
ui->lePitch->setText(QString::number(pitch));
ui->leRow->setText(QString::number(roll));
ui->leYaw->setText(QString::number(yaw));

{
QGraphicsRectItem* n = new QGraphicsRectItem(QRect(0, 0, 1, 1), r);
n->setPos(r->rect().width() - 10, -pitch);

if(!_pitch.isEmpty()) {
QGraphicsLineItem * line = new QGraphicsLineItem(QLineF(_pitch.last()->pos(), n->pos()), r);
line->setPen(QPen(QBrush(Qt::red), 2));
}
_pitch.push_back(n);
}

{
QGraphicsRectItem* n = new QGraphicsRectItem(QRect(0, 0, 1, 1), r);
n->setPos(r->rect().width() - 10, -roll);

if(!_roll.isEmpty()) {
QGraphicsLineItem * line = new QGraphicsLineItem(QLineF(_roll.last()->pos(), n->pos()), r);
line->setPen(QPen(QBrush(Qt::green), 2));
}
_roll.push_back(n);
}

{
QGraphicsRectItem* n = new QGraphicsRectItem(QRect(0, 0, 1, 1), r);
n->setPos(r->rect().width() - 10, -yaw);

if(!_yaw.isEmpty()) {
QGraphicsLineItem * line = new QGraphicsLineItem(QLineF(_yaw.last()->pos(), n->pos()), r);
line->setPen(QPen(QBrush(Qt::blue), 2));
}
_yaw.push_back(n);
}

r->setRect(0, 0, r->rect().width() + 10, r->rect().height());
ui->view->scene()->setSceneRect(r->rect());
ui->view->horizontalScrollBar()->setValue( ui->view->horizontalScrollBar()->maximum() );
}

void Thread::run()
{
IMU_EN_SENSOR_TYPE enMotionSensorType, enPressureType;
IMU_ST_ANGLES_DATA stAngles;
IMU_ST_SENSOR_DATA stGyroRawData;
IMU_ST_SENSOR_DATA stAccelRawData;
IMU_ST_SENSOR_DATA stMagnRawData;
int32_t s32PressureVal = 0, s32TemperatureVal = 0, s32AltitudeVal = 0;

imuInit(&enMotionSensorType, &enPressureType);
if (IMU_EN_SENSOR_TYPE_ICM20948 == enMotionSensorType)
{
qDebug()

Подробнее здесь: https://stackoverflow.com/questions/786 ... urate-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»