树梅派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使用的主要内容,如果未能解决你的问题,请参考以下文章