当前位置: 首页 > article >正文

Qt控制开发板的LED

Qt控制开发板的LED

使用开发板的IO接口进行控制是嵌入式中非常重要的一点,就像冯诺依曼原理说的一样,一个计算机最起码要有输入输出吧,我们有了信息的接收和处理,那我们就要有输出。

我们在开发板上一般都是使用开发板的GPIO接口,那么我们今天就来学学如何在Ubuntu上来编写代码后在开发板上实现控制LED。

UI界面介绍

我们设计简单一点

我们要使用信号和槽来使用按钮来控制灯的亮灭,有两种状态,那我们就要是哟个bool类型的信号

1.              

2.              

编写代码

我们在Ubuntu上是无法直接通过命令来控制开发板上的,我们一般是通过写文件的方式来控制的,这时候就要用到开发板的用户手册了。

它上面写明了设备树,还有驱动的文件地址等等。例如(龙芯2k1000):

注意:部分开发板会在出场的时候就写好这个驱动,比如说,正点原子的6u开发板会有系统运行的呼吸灯,如果有的话,要设置。设置方法在代码中有注释需要的看!!

好,讲完了原理我们来上代码!!!

我们说控制IO接口其实就是通过文件写驱动状态,那我们就先要读写文件

.h文件的编写

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QFile>//添加QFile头文件

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked(bool checked);

private:
    Ui::Widget *ui;
    QFile file;//声名
};
#endif // WIDGET_H

.cpp文件编写

#include "widget.h"
#include "ui_widget.h"
#include"QMessageBox"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //指定文件
    file.setFileName("/sys/class/leds/led1/brightness");
    //这里就是如果你的那个灯有绑定的驱动,使用这命令来将这个驱动设置位NONE,要不然你写进去也没用
    system("echo none > /sys/class/leds/led1/brightness");
}

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

void Widget::on_pushButton_clicked(bool checked)
{
    //检查LED是否存在
    if(!file.exists()){
        QMessageBox::about(this,"错误","led不存在");
    }
    
    //将文件设置为只写状态,因为我们不读它
    if(file.open(QIODevice::WriteOnly)){
        return;
    }
//我们这里设置一个数组,方便写
    QByteArray buf[] = {"0","1"};

//设置UI的状态,点击后变成另一个样子,然后使用write来写文件来控制
    if(checked){
        ui->pushButton->setText("关");
        file.write(buf[0]);
    }else {
        ui->pushButton->setText("开");
        file.write(buf[1]);
    }
    //要关闭文件!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    file.close();
}

好了,交叉编译的过程就不讲了,每个板子都不一样,原理知道了,你们就自求多福吧。哈哈哈哈!!!

下课  吃饭!!!!!


http://www.kler.cn/news/304743.html

相关文章:

  • openCV的python频率域滤波
  • 唯品会大数据面试题及参考答案(3万字长文)
  • C到C++入门基础知识
  • Linux环境基础开发工具---yum
  • Numpy 单位矩阵创建 eye()函数详解
  • 如何管理付费媒体预算:分配、风险与扩展
  • 企业数字化转型建设方案(数据中台、业务中台、AI中台)(可编辑的188页WORD)
  • 助力汽车半导体产业发展,2025 广州国际新能源汽车功率半导体技术展览会与您相约“羊城”广州
  • pm2 进程守护python flask
  • 《订单来了2024中秋预订趋势报告》发布:截至9月13日,商家中秋预订率上涨42.73%,山西文化巡礼成顶流
  • 2024年8月HarmonyOS鸿蒙应用开发者高级认证全新题库
  • JavaScript --函数的作用域(全局和局部)
  • Java面试篇基础部分-垃圾回收算法
  • 科研定制化无人机硬件技术详解
  • Leetcode面试经典150题-141.环形链表
  • CSP-J 算法基础 深度优先搜索
  • 如何通过 Apache Camel 将数据导入 Elasticsearch
  • cityengine修改纹理创建模型
  • 速通sass基础语法
  • OpenHarmony(鸿蒙南向开发)——标准系统移植指南(二)Linux内核
  • samba提速
  • roctracer 的应用示例
  • 6- 【JavaWeb】Maven管理项目
  • html+css+js网页设计 旅游 厦门旅游网11个页面
  • K8s利用etcd定时备份集群结合钉钉机器人通知
  • MySQL下载安装
  • 数据备份和迁移-—SAAS本地化及未来之窗行业应用跨平台架构
  • 关于单片机的【汇编指令系统】
  • 数学建模常用模型全面总结(含适用条件、优点、局限性和应用场景)
  • 鸿蒙轻内核A核源码分析系列七 进程管理 (1)