树梅派C编程_结合QT使用

Posted Leslie X徐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树梅派C编程_结合QT使用相关的知识,希望对你有一定的参考价值。

WiringPi+QT LED闪烁控制

在这里插入图片描述

小灯循环闪烁

1.要求:
- 按键 blinkloop 实现小灯闪烁3次
- 按键 dark 实现小灯熄灭
- 按键 quit 退出

2.问题:
- 当 blinkloop 按键不小心重复点击后会产生自动重复执行的问题
- 按键程序执行的时候如何执行另一个按键打断它?

3.代码:
pro文件:

LIBS += -lwiringPi

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <wiringPi.h>
#include <QDebug>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_blinkloop_clicked();

    void on_dark_clicked();

    void on_quit_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

源文件

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

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    wiringPiSetup() ;
    pinMode (0, OUTPUT);
}

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

void loop(void)
{
    for(int i=0;i<3;i++)
        {
            qDebug()<<i+1;
            digitalWrite(0, HIGH); delay (500);
            digitalWrite(0, LOW); delay (500);
        }
    qDebug()<<"end";
}

void Widget::on_blinkloop_clicked()
{
    loop();
}


void Widget::on_dark_clicked()
{
    digitalWrite(0, LOW);
    qDebug()<<"light off";
}

void Widget::on_quit_clicked()
{
	digitalWrite(0, LOW);
    QApplication *app;
    app->quit();
}

循环闪烁计时器版

1.修复问题:
- 使用计时器修复 blinkloop 的重复点击问题
- 使用计时器实现定时闪烁

2.代码:
头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <wiringPi.h>
#include <QDebug>
#include <QTimer>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_blinkloop_clicked();

    void on_blinktimer_clicked();

    void on_dark_clicked();

    void on_quit_clicked();

    void handleTimeout();

private:
    Ui::Widget *ui;
    QTimer *my_timer;
};

#endif // WIDGET_H

源文件:

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

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    wiringPiSetup() ;
    pinMode (0, OUTPUT);
    my_timer = new QTimer(this);
    connect(my_timer, SIGNAL(timeout()), this, SLOT(handleTimeout()));
}

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

void Widget::handleTimeout()
{
    ui->blinkloop->setEnabled(true);
    qDebug()<<"timeout";

    digitalWrite(0, HIGH); delay (500);
    digitalWrite(0, LOW); delay (500);
}

void loop(void)
{
    for(int i=0;i<3;i++)
        {
            qDebug()<<i+1;
            digitalWrite(0, HIGH); delay (500);
            digitalWrite(0, LOW); delay (500);
        }
    qDebug()<<"end";
}

void Widget::on_blinkloop_clicked()
{
    ui->blinkloop->setEnabled(false);
    my_timer->start(5000);
    loop();
}

void Widget::on_blinktimer_clicked()
{
     my_timer->start(5000);
     qDebug()<<"light on";
}

void Widget::on_dark_clicked()
{
    digitalWrite(0, LOW);
    qDebug()<<"light off";

	my_timer->stop();
}

void Widget::on_quit_clicked()
{
	digitalWrite(0, LOW);
    QApplication *app;
    app->quit();
}

以上是关于树梅派C编程_结合QT使用的主要内容,如果未能解决你的问题,请参考以下文章

树梅派C编程_Wiring的使用

树梅派硬件编程_按键中断

树梅派硬件学习_多线程任务

树梅派硬件编程_ADC

树梅派硬件编程_红外遥控器

树梅派硬件编程_DTH11温湿度检测