正点原子ARM板开发教程

准备工作

安装Qt交叉编译器

将fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh 拷贝到 Ubuntu 虚拟机

新建安装目录

/opt/fsl-imx-x11/4.1.15-2.1.0

设置环境变量

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

查看交叉编译器版本

arm-poky-linux-gnueabi-gcc --version

安装lzop工具

sudo apt-get update
sudo apt-get install lzop
sudo apt-get install libncurses*

ARM板

连接电源和串口,打开SecureCRT软件,连接到开发板上

编写Qt程序

打开Qt软件编程,编程结束编译或者运行,查看是否有错误,切换终端路径到Qt工程位置,如果是新的终端,需要重新设置环境变量

source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

然后执行

qmake

然后执行

make

最后将工程目录下的以工程名字命名的执行文件拷贝到开发板上。可以使用nfs挂载的方法或者使用串口发送,串口发送需要将执行文件拷贝到Windows桌面,然后点击SecureCRT的传输,点击Zmodem Upload List…,选择需要拷贝的文件,然后点击上传。

ARM板

文件拷贝过来后给文件加上执行权限,然后执行即可。

Qt点灯

使用Qt界面的按钮对arm板的灯进行点亮和熄灭,并进行相应的界面显示

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    void pushbutton();

private:
    Ui::MainWindow *ui;
    bool stat;
};
#endif // MAINWINDOW_H

源文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    stat = false;
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(pushbutton()));
    system("echo none > /sys/class/leds/sys-led/trigger");
}

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

void MainWindow::pushbutton()
{
    stat = !stat;
    if(stat)
    {
        qDebug() << "echo 1 > /sys/class/leds/sys-led/brightness" << endl;
        system("echo 1 > /sys/class/leds/sys-led/brightness");
        ui->pushButton->setText("熄灭");
    }
    else
    {
        qDebug() << "echo 0 > /sys/class/leds/sys-led/brightness" << endl;
        system("echo 0 > /sys/class/leds/sys-led/brightness");
        ui->pushButton->setText("点亮");
    }
}

Qt显示图片

使用Qt界面显示图片

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDir>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void showPixmap(QString path);

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

源文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    showPixmap("tupian1.jpeg");
}

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

void MainWindow::showPixmap(QString path)
{
    //自动加载当前路径
    QDir dir;
    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QString pathname = dir.currentPath();
    pathname = pathname + "/" + path;
    qDebug() << pathname << endl;
    //设置图片路径
    QPixmap pixmap;
    pixmap.load(pathname);
    //设置图片自适应QLabel的大小
    QPixmap dest=pixmap.scaled(ui->label->size(),Qt::KeepAspectRatio);
    //label加载图片
    ui->label->setPixmap(dest);
}


Qt滑动屏幕

使用Qt界面滑动屏幕切换图片

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDir>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void showPixmap(QString path);

    bool eventFilter(QObject *watched, QEvent *event);

private:
    Ui::MainWindow *ui;
    int tupianNum;
};
#endif // MAINWINDOW_H

源文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTouchEvent>
#include <QMouseEvent>
#include <QEvent>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    tupianNum = 1;
    QString path = "tupian" + QString::number(tupianNum) + ".jpeg";
    showPixmap(path);

    ui->label->installEventFilter(this);
}

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

void MainWindow::showPixmap(QString path)
{
    //自动加载当前路径
    QDir dir;
    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QString pathname = dir.currentPath();
    pathname = pathname + "/" + path;
    qDebug() << pathname << endl;
    //设置图片路径
    QPixmap pixmap;
    pixmap.load(pathname);
    //设置图片自适应QLabel的大小
    QPixmap dest=pixmap.scaled(ui->label->size(),Qt::KeepAspectRatio);
    //label加载图片
    ui->label->setPixmap(dest);
}

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    static QPoint startPoint; // 起始点
    // 检查事件类型是否为鼠标按钮按下事件
    if (event->type() == QEvent::MouseButtonPress)
    {
        // 将事件转换为鼠标事件
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
        if (mouseEvent->button() == Qt::LeftButton)
        {
            startPoint = mouseEvent->pos();// 鼠标左键按下时,记录起始位置
        }
    }
    // 检查事件类型是否为鼠标移动事件
    else if (event->type() == QEvent::MouseMove)
    {
    }
    // 检查事件类型是否为鼠标按钮释放事件
    else if (event->type() == QEvent::MouseButtonRelease)
    {
        // 将事件转换为鼠标事件
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
        QPoint endPoint = mouseEvent->pos();// 获取鼠标当前位置
        int dx = endPoint.x() - startPoint.x();
        if (qAbs(dx) > 50)
        {
            if (dx > 0)
            {
                tupianNum = ++tupianNum > 4? 1:tupianNum;
                QString path = "tupian" + QString::number(tupianNum) + ".jpeg";
                showPixmap(path);
                qDebug() << "Right swipe detected";
            }
            else
            {
                tupianNum = --tupianNum < 1? 4:tupianNum;
                QString path = "tupian" + QString::number(tupianNum) + ".jpeg";
                showPixmap(path);
                qDebug() << "Left swipe detected";
            }
        }
    }
    return QObject::eventFilter(watched, event);//确保其他未被处理的事件能够被正确传播和处理
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值