Qt从开发板获取数据的方法(led控制、陀螺仪icm20608)

1、使用 QFile 这个类直接访问文件 

设定file路径——打开文件——读写文件——关闭文件;

参考正点Qt开发第15章led控制

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QFile>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
#if __arm__
    system("echo none > /sys/class/leds/sys-led/trigger");
#endif
    //1、使用file直接访问led;
    QFile file;
    file.setFileName("/sys/devices/platform/leds/leds/sys-led/brightness");
    if(!file.exists())
        ui->pushButton->setText("no file");
}

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

void MainWindow::on_pushButton_clicked()
{
    //2、打开文件;
    if(!file.open(QIODevice::ReadWrite))
    {
        qDebug()<<file.errorString();
        return;
    }
    //3、读写文件;
    QTextStream in(&file);
    QString state = in.readLine();
    qDebug() << "read buf:" << state <<endl;
    QByteArray buf[2]= {"0","1"};
    if(state == "1")//此时状态为关闭;
    {
        file.write(buf[0]);
        ui->pushButton->setText("led on");
    }
    if(state == "0")
    {
        ui->pushButton->setText("led off");
        file.write(buf[1]);
    }
    //4、关闭文件
    file.close();
}

2、open()方法访问数据

确定文件路径——打开文件——读文件——关闭文件;

与QFile的区别:这里的open是C语言提供的函数,而不是QFile类的成员函数file.open();

参考正点Qt第23章icm20608(简化)

icm20608.cpp提供数据接口

#include "icm20608.h"
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <QDebug>

Icm20608::Icm20608(QObject *parent) : QObject (parent)
{
    timer  = new QTimer();
#if __arm__
    system("insmod /home/root/driver/icm20608/icm20608.ko");
#endif
    connect(timer,SIGNAL(timeout()),this,SLOT(icm20608ReadData()));
}
Icm20608::~Icm20608(){}
void Icm20608::setCapture(bool str)
{
    if(str)
        timer->start(500);
    else 
        timer->stop();
}

void Icm20608::icm20608ReadData()
{
1.确定文件路径
    int fd;
    char const *filename = "/dev/icm20608";
    signed int databuf[7];
    signed int gyro_x_adc, gyro_y_adc, gyro_z_adc;
    signed int temp_adc;
    float gyro_x_act, gyro_y_act, gyro_z_act;
    float temp_act;
    int ret = 0;
2、使用open()打开文件;
    fd = open(filename,O_RDWR);
    if(fd <0)
    {
        printf("cann't open file:%s\n",filename);
        return;
    }
3、read读文件;
    ret = read(fd,databuf,sizeof (databuf));
    if(ret == 0)
    {
        gyro_x_adc = databuf[0];
        gyro_y_adc = databuf[1];
        gyro_z_adc = databuf[2];
        temp_adc = databuf[6];
        gyro_x_act = (float)(gyro_x_adc)/16.4;
        gyro_y_act = (float)(gyro_y_adc)/16.4;
        gyro_z_act = (float)(gyro_z_adc)/16.4;
        temp_act = ((float)temp_adc-25)/326.8+25;
        gxdata = QString::number(gyro_x_act,'f',2);
        gydata = QString::number(gyro_y_act,'f',2);
        gzdata = QString::number(gyro_z_act,'f',2);
        tempdata = QString::number(temp_act, 'f', 2);
    }
4、关闭文件;
    close(fd);
    emit icm20608DataChange();
}

QString Icm20608::gxData(){return gxdata;}
QString Icm20608::gyData(){return gydata;}
QString Icm20608::gzData(){return gzdata;}
QString Icm20608::tempData(){return tempdata;}

mainwindow.cpp调用数据;

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->resize(800,480);
//实例化对象,方便后续调用icm20608的数据;
    icm20608 = new Icm20608(this);
#if __arm__
    icm20608->setCapture(true);
#endif
    connect(icm20608,SIGNAL(icm20608DataChange()),this,SLOT(showData()));
}
MainWindow::~MainWindow(){delete ui;}
//调用并显示在界面;
void MainWindow::showData()
{
    ui->ax->setText(icm20608->axData());
    ui->ay->setText(icm20608->ayData());
    ui->az->setText(icm20608->azData());
    ui->gx->setText(icm20608->gxData());
    ui->gy->setText(icm20608->gyData());
    ui->gz->setText(icm20608->gzData());
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值