Cours:TPgpioQT : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Sorties)
(Sorties)
Ligne 107 : Ligne 107 :
 
|
 
|
 
<source lang=cpp>
 
<source lang=cpp>
//1ère possibilité,
+
//1ère possibilité on l'indique dans la déclaration (mainwindow.h)
 
// ajout d'un attribut dans le header
 
// ajout d'un attribut dans le header
#include "gpio.h"
+
#include "lampe.h"
 
using namespace exploringRPi;
 
using namespace exploringRPi;
 
...
 
...
Ligne 115 : Ligne 115 :
 
{
 
{
 
   ....
 
   ....
   GPIO ledRouge;
+
   Lampe ledRouge{20};
  GPIO ledVerte{20};
 
 
   ....
 
   ....
 
}
 
}
Ligne 122 : Ligne 121 :
 
||
 
||
 
<source lang=cpp>
 
<source lang=cpp>
//2ère possibilité,
+
//2ère possibilité on l'indique dans la définition du constructeur
// instanciation dans le constructeur
+
// dans le mainwindow.h
 +
#include "gpio.h"
 +
...
 +
class MainWindow : public QMainWindow
 +
{
 +
  ....
 +
  Lampe ledRouge;
 +
  ....
 +
}
 +
...
 +
// dans le mainwindow.cpp
 
....
 
....
 
MainWindow::MainWindow(QWidget *parent)
 
MainWindow::MainWindow(QWidget *parent)
Ligne 129 : Ligne 138 :
 
       ui(new Ui::MainWindow),ledRouge(16)
 
       ui(new Ui::MainWindow),ledRouge(16)
 
{
 
{
  ....
 
  ledRouge.setDirection(OUTPUT);
 
  ledVerte.setDirection(OUTPUT);
 
 
   ....
 
   ....
 
}
 
}
...
 
// utilisation dans une méthode
 
  ....
 
  ledRouge.setValue(HIGH);
 
  ledVerte.setValue(LOW);
 
  ....
 
 
</source>
 
</source>
 
|}
 
|}

Version du 15 septembre 2022 à 12:32

Retour à la liste des Tds

GPIO

Gpio rpi3.png

On dispose d'un connecteur avec un certain nombre de GPIO sur la carte rpi.

Ce sont des broches configurables qui peuvent servir de :

  • entrée logique
  • sortie logique
  • fonction particulière :
    • entrée analogique (pas sur les rpi actuelles)
    • i2c
    • spi
    • pwm
    • liaison série
    • ...


Préparation du projet

  • Créer un nouveau projet de type "Widget application"
  • Choisir le kit "Rpi"
  • Télécharger/décompresser et placer les fichiers de l'archive suivant dans votre projet
  • Dans l'arborescence de votre projet,
    • Ajouter des fichiers existants


Sorties

On utilisera la classe Lampe pour piloter des sorties.

lampe.h

#ifndef LAMPE_H
#define LAMPE_H

#include <QObject>
#include "gpio.h"
using namespace exploringRPi;

class Lampe : public QObject
{
    Q_OBJECT
public:
    Lampe(int nbBroche);

private :
    bool etat;
    GPIO broche;

signals:
    void nouvelEtat(bool etat);
public slots:
    void allumer();
    void eteindre();
    void setValue(bool e);
};

#endif // LAMPE_H

lampe.cpp

#include "lampe.h"

Lampe::Lampe(int nbBroche) : QObject(), broche(nbBroche)
{
    broche.setDirection(OUTPUT);
    setValue(false);
}

void Lampe::allumer()
{
    setValue(true);
}

void Lampe::eteindre()
{
    setValue(false);
}

void Lampe::setValue(bool e)
{
    if (e==true) broche.setValue(HIGH);
            else broche.setValue(LOW);
    etat = e;
    emit nouvelEtat(etat);
}

Question.jpg Faire le diagramme de classe d'après le fichier lampe.h


On va instancier la classe Lampe en précisant le numéro de GPIO utilise. Pour cela, le constructeur de la classe GPIO nécessite le passage d'un paramètre :

Lampe(int nbBroche);

2 approches sont possibles :

//1ère possibilité on l'indique dans la déclaration (mainwindow.h)
// ajout d'un attribut dans le header
#include "lampe.h"
using namespace exploringRPi;
...
class MainWindow : public QMainWindow
{
   ....
   Lampe ledRouge{20};
   ....
}
//2ère possibilité on l'indique dans la définition du constructeur
// dans le mainwindow.h
#include "gpio.h"
...
class MainWindow : public QMainWindow
{
   ....
   Lampe ledRouge;
   ....
}
...
// dans le mainwindow.cpp
....
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),
      ui(new Ui::MainWindow),ledRouge(16)
{
   ....
}