jz2440:QT控制LED灯点亮熄灭(11)

1.LED灯的驱动:

首先要准备好在驱动文件,通过insmod led.ko来加载模块,然后在QT的代码里面配合调用open,write,read函数来点亮,关闭LED灯。这一步,做完,应该可以通过测试程序点亮关闭LED。

具体内容可参照:jz2440点亮LED

2.QT代码:

实现的功能:

  1. LED按键进入右图,Back键进入LED按键界面。
  2. LEDx open 与 LEDx close可以打开关闭3个LED灯。

 代码在这个位置:https://github.com/zion6135/QT/tree/main/4.LED/QT

LED页面:

这是LED按键的主要函数:比较关键的就是connect()函数:

4个参数是这样的,按键对象pushButtonLed 发送按下的信号SIGNAL(clicked())给this(也就是LED这个页面),然后执行回调函数ButtonToLed();

总之:点下LED按键就会执行ButtonToLed()函数。

#include "mainwindow.h"
#include <QList>
#include "Class/LedWindow.h"



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->setGeometry(0, 0, 472, 300);  // set windows size
    pushButtonLed = new QPushButton("LED", this); //set button name
    pushButtonLed->setGeometry(50, 50, 100, 100); //set button size
    // button push callback exec ButtonToLed()
    connect(pushButtonLed, SIGNAL(clicked()), this, SLOT(ButtonToLed()));
}

void MainWindow::ButtonToLed() {
    LedWindow* mLed = new LedWindow();
    mLed->show();
    connect(mLed, SIGNAL(signaltomain()), this, SLOT(ButtonToMain()));

    this->hide();
    qDebug("To Led");
}

void MainWindow::ButtonToMain() {
    this->show();
    qDebug("To main");
}


MainWindow::~MainWindow()
{

}


6个按键的页面:

1.6个按键没有啥复杂的,主要是返回按键发送自定义的信号,然后需要在回调函数隐藏按键页面,显示LED页面。

#include "mainwindow.h"
#include <QList>
#include "Class/LedWindow.h"
#define upxxxxxxx 0

bool LedWindow::openLedDrv() {
#if upxxxxxxx
    fd = open("/dev/xyz", O_RDWR);
    if (fd < 0) {
        qDebug("open dev failed!!!");
        return false;
    }
#endif
    return true;
}

LedWindow::LedWindow(QWidget *parent)
    : QMainWindow(parent)
{
    if (true == openLedDrv()) {
        this->setGeometry(0, 0, 472, 300);

        pushButtonBack = new QPushButton("Back", this);
        pushButtonBack->setObjectName("btnBack");
        pushButtonBack ->setGeometry(10, 10, 60, 30);
        connect(pushButtonBack, SIGNAL(clicked()), this, SLOT(ButtonLedclicked()));

        pushButton[0] = new QPushButton("LED1 open", this);
        pushButton[0]->setObjectName("btn1");
        pushButton[0] ->setGeometry(50, 50, 100, 100);
        connect(pushButton[0], SIGNAL(clicked()), this, SLOT(ButtonLedclicked()));

        pushButton[1] = new QPushButton("LED2 open", this);
        pushButton[1]->setObjectName("btn2");
        pushButton[1] ->setGeometry(150, 50, 100, 100);
        connect(pushButton[1], SIGNAL(clicked()), this, SLOT(ButtonLedclicked()));

        pushButton[2] = new QPushButton("LED3 open", this);
        pushButton[2]->setObjectName("btn3");
        pushButton[2] ->setGeometry(250, 50, 100, 100);
        connect(pushButton[2], SIGNAL(clicked()), this, SLOT(ButtonLedclicked()));

        pushButton[3] = new QPushButton("LED4 close", this);
        pushButton[3]->setObjectName("btn4");
        pushButton[3] ->setGeometry(50, 150, 100, 100);
        connect(pushButton[3], SIGNAL(clicked()), this, SLOT(ButtonLedclicked()));

        pushButton[4] = new QPushButton("LED5 close", this);
        pushButton[4]->setObjectName("btn5");
        pushButton[4] ->setGeometry(150, 150, 100, 100);
        connect(pushButton[4], SIGNAL(clicked()), this, SLOT(ButtonLedclicked()));

        pushButton[5] = new QPushButton("LED6 close", this);
        pushButton[5]->setObjectName("btn6");
        pushButton[5] ->setGeometry(250, 150, 100, 100);
        connect(pushButton[5], SIGNAL(clicked()), this, SLOT(ButtonLedclicked()));
    } else {
        qDebug("open failed");
    }
}

void LedWindow::ButtonLedclicked() {

    QObject* obj = sender();
//    obj->dumpObjectInfo();
    int val = -1;
   if (obj->objectName() == "btn1") {
       qDebug("1");
#if upxxxxxxx
       val = 1;
       ::write(fd, &val, 4);
#endif
   } else if (obj->objectName() == "btn2") {
       qDebug("2");
#if upxxxxxxx
       val = 2;
       ::write(fd, &val, 4);
#endif
   } else if (obj->objectName() == "btn3") {
       qDebug("3");
#if upxxxxxxx
       val = 3;
       ::write(fd, &val, 4);
#endif
   } else if (obj->objectName() == "btn4") {
       qDebug("4");
#if upxxxxxxx
       val = 4;
       ::write(fd, &val, 4);
#endif
   } else if (obj->objectName() == "btn5") {
       qDebug("5");
#if upxxxxxxx
       val = 5;
       ::write(fd, &val, 4);
#endif
   } else if (obj->objectName() == "btn6") {
       qDebug("6");
#if upxxxxxxx
       val = 6;
       ::write(fd, &val, 4);
#endif
   } else if (obj->objectName() == "btnBack") {
       qDebug("7");
       emit signaltomain();
       this->close();
   }

}


 

 

 

 

 

 

Guess you like

Origin blog.csdn.net/m0_37844072/article/details/119958770