Utilisation d'une sortie GPIO

Question

Créez un projet nommé appGpio disposant d'une IHM contrôlant une LED, contenant :

IHM

Type d'élément

Nom dans le code

Info

Bouton

pbSS

Bouton start/stop du GPIO

Label

laImage

Affichage de l'image représentant la LED allumée ou éteinte.

Combo box

cbGpio

Numéro de la broche GPIO à utiliser.

Bouton

pbActiver

Initialise la GPIO. Ce bouton doit ensuite être désactivé.

et permettant :

  • De choisir la broche raccordée à la LED (cbGpio).

  • Le bouton pbSS est une bascule et se transforme en bouton stop pour allumer/éteindre la LED.

  • D'afficher une image dans le label laImage représentant l'état de la LED (donc 2 images).

Indice

IHM :

Un label se crée à partir de la classe QLabel.

La propriété pixmap permet de placer une image au lieu du texte. Attention toutefois aux type de l'image ! Certains formats ne sont pas reconnus.

La propriété scaledContent permet d'ajuster le l'image aux dimensions du widget (laImage).

Vous pouvez aussi afficher du texte avec la méthode setText().

APPLICATION :

Vous devez utiliser la classe CGpio vue précédemment.

IHM appGpio
Exemple d'IHM pour l'application

Solution

Fichier cihmappgpio.h
1
#ifndef CIHMAPPGPIO_H
2
#define CIHMAPPGPIO_H
3
4
#include <QMainWindow>
5
#include <QMessageBox>
6
#include "cgpio.h"
7
8
namespace Ui {
9
class CIhmAppGpio;
10
}
11
12
class CIhmAppGpio : public QMainWindow
13
{
14
    Q_OBJECT
15
16
public:
17
    explicit CIhmAppGpio(QWidget *parent = 0);
18
    ~CIhmAppGpio();
19
20
private slots:
21
    void on_pbSS_clicked();
22
    void on_pbActiver_clicked();
23
    void onErreurGpio(QString str);
24
25
private:
26
    Ui::CIhmAppGpio *ui;
27
    CGpio *mGpio;
28
};
29
30
#endif // CIHMAPPGPIO_H
31
Le fichier cihmappgpio.cpp
1
#include "cihmappgpio.h"
2
#include "ui_cihmappgpio.h"
3
4
CIhmAppGpio::CIhmAppGpio(QWidget *parent) :
5
    QMainWindow(parent),
6
    ui(new Ui::CIhmAppGpio)
7
{
8
    mGpio=NULL;
9
    ui->setupUi(this);
10
    ui->cbGpio->addItem("4");
11
    ui->cbGpio->addItem("5");
12
    ui->cbGpio->addItem("6");
13
    ui->cbGpio->addItem("12");
14
    ui->cbGpio->addItem("13");
15
    ui->cbGpio->addItem("16");
16
    ui->cbGpio->addItem("17");
17
    ui->cbGpio->addItem("18");
18
    ui->cbGpio->addItem("19");
19
    ui->cbGpio->addItem("20");
20
    ui->cbGpio->addItem("21");
21
    ui->cbGpio->addItem("22");
22
    ui->cbGpio->addItem("23");
23
    ui->cbGpio->addItem("24");
24
    ui->cbGpio->addItem("25");
25
    ui->cbGpio->addItem("26");
26
    ui->cbGpio->addItem("27");
27
    ui->cbGpio->setCurrentIndex(16);
28
}
29
30
CIhmAppGpio::~CIhmAppGpio()
31
{
32
    delete mGpio;
33
    delete ui;
34
}
35
36
void CIhmAppGpio::on_pbSS_clicked()
37
{
38
  if (ui->pbSS->text() == "Allumer") {
39
      mGpio->ecrire(1);
40
      ui->pbSS->setText("Eteindre");
41
      ui->laImage->setText("LED allumée");
42
  } else {
43
      mGpio->ecrire(0);
44
      ui->pbSS->setText("Allumer");
45
      ui->laImage->setText("LED éteinte");
46
  } // else
47
}
48
49
void CIhmAppGpio::on_pbActiver_clicked()
50
{
51
    if (mGpio != NULL) {
52
        delete mGpio;
53
    } // if mGpio
54
    mGpio = new CGpio(ui->cbGpio->currentText().toInt(), OUT);
55
    connect(mGpio, SIGNAL(erreur(QString)), this, SLOT(onErreurGpio(QString)));
56
    ui->pbActiver->setEnabled(false);
57
}
58
59
void CIhmAppGpio::onErreurGpio(QString str)
60
{
61
    QMessageBox msgBox;
62
    msgBox.setInformativeText(str);
63
    msgBox.exec();
64
}
65