У меня есть 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
Почему датчик IMU ICM20948 Waveshare отправляет неточные данные? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1719904691
Anonymous
У меня есть Raspberry Pi 4 с Bookworm и датчик Waveshare 10-Dof IMU, подключенный через i2c. Я уверен, что подключил правильно. Я получил тестовое приложение (wget https://files.waveshare.com/upload/c/c1/10_DOF_IMU_Sensor_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()
Подробнее здесь: [url]https://stackoverflow.com/questions/78695427/why-does-icm20948-waveshare-imu-sensor-send-inaccurate-data[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия