Cours:PooTD1 ledsbps : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(clignotement)
(Classe Bouton)
 
(12 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
  [[Cours:3105|{{Rouge|'''Retour à la liste des Tds'''}}]]
 
  [[Cours:3105|{{Rouge|'''Retour à la liste des Tds'''}}]]
 +
 +
 +
= Bonnes pratiques =
 +
 +
* Constructeurs
 +
** Accolades pour les appels
 +
** Initialisation des attributs avant le corps du constructeur
 +
* Méthodes
 +
** Parenthèses pour les appels
  
 
=1ère classe=
 
=1ère classe=
Ligne 10 : Ligne 19 :
 
*Dans l'arborescence de votre projet,
 
*Dans l'arborescence de votre projet,
 
**Ajouter des fichiers existants
 
**Ajouter des fichiers existants
 +
*Vérifier/ajouter les noms des fichiers pour les nouvelles classes (fichers *.h et *.cpp)
  
==classe Lampe==
+
==Classe Lampe==
  
 
{|style="vertical-align:middle; width:100%; text-align:left; "
 
{|style="vertical-align:middle; width:100%; text-align:left; "
Ligne 27 : Ligne 37 :
 
     Lampe();
 
     Lampe();
 
     void allumer();
 
     void allumer();
private:
+
 
    int numGpio;
 
 
};
 
};
  
Ligne 67 : Ligne 76 :
 
</source>
 
</source>
  
==clignotement==
+
* Tester le bon fonctionnement
 +
* Ajouter une méthode <code>eteindre()</code>
 +
 
 +
==Clignotement==
  
 
<source lang=cpp>
 
<source lang=cpp>
Ligne 73 : Ligne 85 :
 
using namespace std;
 
using namespace std;
 
...
 
...
usleep( dureeEnMillisecondes );
+
usleep( dureeEnMicrosecondes );
 
sleep( dureeEnSecondes );
 
sleep( dureeEnSecondes );
 
</source>
 
</source>
  
==travail à réaliser==
+
* Faire clignoter la lampe
 +
* Ajouter une méthode <code>Changer()</code>
 +
 
 +
==Travail à réaliser==
 +
 
 +
* Ajouter un second constructeur avec un paramètre pour cibler d'autres GPIO. Nécessitera un attribut interne à la classe, qui sera déclaré en visibilité <code>private</code>.
 +
* Faire clignoter plusieurs leds
 +
 
 +
=Classe Bouton=
 +
 
 +
 
 +
{|style="vertical-align:middle; width:100%; text-align:left; "
 +
|-
 +
| {{boîte déroulante/début|titre=bouton.h}}
 +
<source lang=cpp>
 +
#ifndef BOUTON_H
 +
#define BOUTON_H
 +
 
 +
class Bouton
 +
{
 +
public:
 +
    Bouton();
 +
    int getValue();
 +
};
 +
 
 +
#endif // BOUTON_H
 +
</source>
 +
{{boîte déroulante/fin}}
 +
|| {{boîte déroulante/début|titre=bouton.cpp}}
 +
<source lang=cpp>
 +
#include "bouton.h"
 +
#include <pigpio.h>
 +
#include <QDebug>
 +
 
 +
Bouton::Bouton()
 +
{
 +
    qDebug()<<"création d'un bouton";
 +
    gpioInitialise();
 +
    gpioSetMode(16,PI_INPUT);
 +
 
 +
}
 +
 
 +
int Bouton::getValue()
 +
{
 +
    int etat = gpioRead(16);
 +
    qDebug()<<"je suis dans l'état : "<<etat;
 +
    return etat;
 +
}
 +
</source>
 +
{{boîte déroulante/fin}}
 +
|}
  
*plusieurs leds
+
* Tester le bon fonctionnement de cette classe
 +
* Commander une led avec un bouton
 +
* ajouter un 2ème bouton
 +
**1 clic sur un bouton allume la led
 +
**1 clic sur l'autre bouton éteint la led
 +
*changer l'état de la led à chaque appui sur un bouton

Version actuelle datée du 10 septembre 2025 à 15:52

Retour à la liste des Tds


Bonnes pratiques

  • Constructeurs
    • Accolades pour les appels
    • Initialisation des attributs avant le corps du constructeur
  • Méthodes
    • Parenthèses pour les appels

1ère classe

Préparation du projet

  • Créer un nouveau projet de type "QT en console"
  • Choisir le kit "piTp"
  • ajouter à la fin du fichier .pro la ligne LIBS += -lpigpio
  • Dans l'arborescence de votre projet,
    • Ajouter des fichiers existants
  • Vérifier/ajouter les noms des fichiers pour les nouvelles classes (fichers *.h et *.cpp)

Classe Lampe

lampe.h

#ifndef LAMPE_H
#define LAMPE_H

#include <QObject>

class Lampe
{
public:
    Lampe();
    void allumer();

};

#endif // LAMPE_H

lampe.cpp

#include "lampe.h"
#include <pigpio.h>

Lampe::Lampe()
{
    gpioInitialise();
    gpioSetMode(5,PI_OUTPUT);
}

void Lampe::allumer()
{
    gpioWrite(5,true);
}
#include <QCoreApplication>
#include "lampe.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Lampe l1{};
    l1.allumer();

    return a.exec();
}
  • Tester le bon fonctionnement
  • Ajouter une méthode eteindre()

Clignotement

#include <unistd.h>
using namespace std;
...
usleep( dureeEnMicrosecondes );
sleep( dureeEnSecondes );
  • Faire clignoter la lampe
  • Ajouter une méthode Changer()

Travail à réaliser

  • Ajouter un second constructeur avec un paramètre pour cibler d'autres GPIO. Nécessitera un attribut interne à la classe, qui sera déclaré en visibilité private.
  • Faire clignoter plusieurs leds

Classe Bouton

bouton.h

#ifndef BOUTON_H
#define BOUTON_H

class Bouton
{
public:
    Bouton();
    int getValue();
};

#endif // BOUTON_H

bouton.cpp

#include "bouton.h"
#include <pigpio.h>
#include <QDebug>

Bouton::Bouton()
{
    qDebug()<<"création d'un bouton";
    gpioInitialise();
    gpioSetMode(16,PI_INPUT);

}

int Bouton::getValue()
{
    int etat = gpioRead(16);
    qDebug()<<"je suis dans l'état : "<<etat;
    return etat;
}
  • Tester le bon fonctionnement de cette classe
  • Commander une led avec un bouton
  • ajouter un 2ème bouton
    • 1 clic sur un bouton allume la led
    • 1 clic sur l'autre bouton éteint la led
  • changer l'état de la led à chaque appui sur un bouton