Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. aide pour la gestion d'une application sur raspberryPi
Forum Updated to NodeBB v4.3 + New Features

aide pour la gestion d'une application sur raspberryPi

Scheduled Pinned Locked Moved Unsolved French
4 Posts 2 Posters 618 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    ludoraspberry
    wrote on last edited by
    #1

    salut as tous , je souhaite crée une application sur mon rasbperry pi4 qui gere un systeme climatisation (chaud et froid) avec mes gpios (pin) , avec un ecran tactile .

    j'ai fais toute un programme "prototype" (https://github.com/ludoiphone/QtGainable) mais je bloque sur plusieurs chose .

    j'aimerai avoir votre avis sur la maniere de proceder par rapport a :

    au lancement du programme :

    l'ecran affiche 5 temperatures qui se mettent a jours tous les 10 secondes (en lisent un fichier "temperature"), trois boutons (un bouton "consigne" , un bouton "arret" et un bouton " marche" qui s'affiche quand le bouton "arret" est cliker) et en meme temps j'ecrit dans le fichier "temperature" la temperature lue des 5 sondes toute les 15 secondes.
    cela est ok et fonctionnel.

    puis en meme temps je lance mon programme "gainable" qui lui enclenche si ma pin thermostat est HIGH l'un de mes 4 modes (froid, chaud,canicule et filtre) en fonction de ma temperature ( en lisent dans le fichier "temperature") .
    "gainable" ce m'est a jour toute les secondes pour verifier le filtre et la pin thermostat (si LOW ou HIGH) la aussi je pense que c'est bon !

    mais la ou je bloque est dans la class Froid du code github plus haut , je souhaite remplacer les tempos time(NULL) par des Qtimer singleShot mes je n'y arrive pas sans erreur dans le terminal

    void Froid::tempos()
    {
        m_timerVoletsFr = new QTimer(this);
        m_timerVoletsFr ->setSingleShot(true);
        connect(m_timerVoletsFr, &QTimer::timeout, this, &Froid::tempoVoletsFr);
        m_timerVoletsFr ->start(timerVoletsFr);
    }
    
    void Froid::tempoVoletsFr() // tempo de 10 secondes
    {
        qDebug() << "tempoVoletFr()";
        
        gifVentilationFroid = true;
        etatsGainableFroid = TEMPO_VENTILATION_FROID;
    }
    
    void Froid::tempoVentilationFr() // tempo de 2 minutes 30 secondes
    {
        qDebug() << "tempoVentilationFr()";
        
        m_froidTemperatures ->lireTemperatureUniteInt();
        m_froidConsignes ->lireConsignesGainable();
        if (m_froidTemperatures ->temperatureUnitInt > m_froidConsignes ->consigneDepartFroidEnFroid) { // si la temperature unite interieur est supperieur (reglable) 
    	gifVentilationFroid = false;
    	gifVentilationIntFroid = true;
    	gifVentilationExtFroid = true;
    	etatsGainableFroid = TEMPO_V4V_FROID; // passe en prodution de froid
        } else if (m_froidTemperatures ->temperatureUnitInt < m_froidConsignes ->consigneDepartChauffageEnFroid) { // si non si la temperature unite interieur est inferieur as 22°C
    	m_froidRelais.activeRelaiEteHiver();//relai étéHiver (mode chauffage)
    	//labelModeFroid = false;
    	//m_froidChauffage.labelModeChauffage = true;
    	//m_froidChauffage.froidChauffage(); // passe en mode chauffage
        } else {
    	etatsGainableFroid = TEMPO_VENTILATION_FROID;//TEMPO_VOLETS_FROID;
        }
    }
    

    je sais pas ci c'est la bonne maniere mais j'ai choisi un swith case

    void Froid::modeFroid()
    {
        //m_timerVoletsFr = new QTimer(this);
        //m_timerVoletsFr ->setSingleShot(true);
        //connect(m_timerVoletsFr, &QTimer::timeout, this, &Froid::tempoVoletsFr);
        
        switch (etatsGainableFroid) {
    
    	case TEMPO_VOLETS_FROID:
    		
    	qDebug() << "TEMPO_VOLETS_FROID";
    
    	//QTimer::singleShot(timerVoletsFr, this, &Froid::tempoVoletsFr);
    	//m_timerVoletsFr = new QTimer(this);
    	//m_timerVoletsFr ->setSingleShot(true);
    	//connect(m_timerVoletsFr, &QTimer::timeout, this, &Froid::tempoVoletsFr);
    	//m_timerVoletsFr ->start(timerVoletsFr);
    	//m_timerVoletsFr = new QTimer(this);
    	//m_timerVoletsFr ->setSingleShot(true);
    	//connect(m_timerVoletsFr, &QTimer::timeout, this, &Froid::tempoVoletsFr);
    	//m_timerVoletsFr ->start(timerVoletsFr);
    
    	break;
    	
    	case TEMPO_VENTILATION_FROID:
    	
    	qDebug() << "TEMPO_VENTILATION_FROID";
    	
    	m_froidRelais.activeRelaisVentilationInt();
    	QTimer::singleShot(timerVentilationFr, this, &Froid::tempoVentilationFr);
    	
    	break;
    

    merci a vous tous , de m'orienté dans la bonne direction . cordialement

    1 Reply Last reply
    0
    • C Offline
      C Offline
      CassD
      wrote on last edited by CassD
      #2

      Bonsoir

      Pour la partie timer, la ligne m_timerVoletsFr ->start(timerVoletsFr); est problématique car il faut passer la durée du timer (si ce n'est pas déjà fait par le setter correspondant) et non le pointeur vers l'objet lui même. Il n'y a pas besoin de repasser l'instance en argument puisque la méthode s'applique déjà sur cette instance.
      la version correcte devrait donc être m_timerVoletsFr->start(10000) ;

      1 Reply Last reply
      0
      • C Offline
        C Offline
        CassD
        wrote on last edited by CassD
        #3

        Pour le switch, je suggérerais quelque chose du style

        switch(condition)
        {
            case1: method1(args) ; break ;
            case2: method2(args) ; break ;
            case3: method3(args) ; break ;
            default: ???
        }
        

        pour avoir quelque chose d'un peu plus lisible et plus maintenable, en créant les nouvelles méthodes vraisemblablement en protected ou en private.
        Si le besoin de faire évoluer et de rajouter d'autre cas se fait sentir, à un moment où à un autre il pourra être opportun d'évoluer vers un pattern strategy.

        1 Reply Last reply
        0
        • L Offline
          L Offline
          ludoraspberry
          wrote on last edited by
          #4

          j'avais oublier le .h

          #ifndef FROID_H
          #define FROID_H
          
          #include <ctime>
          
          #include "consignes.h"
          #include "temperatures.h"
          #include "filtre.h"
          #include "relais.h"
          
          class Froid: public QObject
          {
              Q_OBJECT
          
          public:
              Froid();
          
              bool gifFroid = false;
          
              bool gifVentilationFroid = false;
              bool gifVentilationIntFroid = false;
              bool gifVentilationExtFroid = false;
              bool gifVentilationDegFroid = false;
              
              bool gifDegivrageFroid = false;
              bool gifEgouttageFroid = false;
              
              bool degivrageFroid = false;
              
              unsigned long long departChronoFiltreFr;
              unsigned long long finChronoFiltreFr;
              unsigned long chronoNettoyageFiltreFr;
              
              void modeFroid();
              
              void arretFroid();
              
              void chauffageFroid();
          
          public slots:
              void tempos();
          
          private:
              Temperatures *m_froidTemperatures;
              
              Consignes *m_froidConsignes;
              
              Filtre *m_froidFiltre;
              
              Relais m_froidRelais;
              
              QTimer *m_timerVoletsFr;
          
              int timerVoletsFr = 10000; // 10 secondes
              int timerVentilationFr = 15000; // 2 min 30 secondes
              int timerV4VFr = 4500; // 45 secondes
              int timerCompresseurFr = 7800; // 1 minute 30 secondes
              //int timerLancementDegivrageFr = 120000; // 20 minutes
              
              int timerDegivrageFr = 120000; // 20 minutes 
              
              int timerControleDegivrageFr = 12000; // 2 minutes
              
              int timerFinDegivrageFr = 10000; // 10 secondes
              int timerEgouttageFr = 30000; // 5 minutes
              int timerFinEgouttageFr = 18000; // 3 minutes
          
              enum
              {
                  TEMPO_VOLETS_FROID,
                  TEMPO_VENTILATION_FROID,
                  TEMPO_V4V_FROID,
                  TEMPO_COMPRESSEUR_FROID,
                  TEMPO_DEGIVRAGE_FROID,
                  TEMPO_CONTROLE_DEGIVRAGE_FROID,
                  LANCEMENT_DEGIVRAGE_FROID,
                  TEMPO_FIN_DEGIVRAGE_FROID,
                  TEMPO_EGOUTTAGE_FROID,
                  TEMPO_FIN_EGOUTTAGE_FROID,
                  TEMPO_ARRET,
                  //COMMANDE_CANICULE,
                  //TEMPO_V4V_CANICULE,
                  //TEMPO_COMPRESSEUR_CANICULE,
                  //TEMPO_DEGIVRAGE_CANICULE,
              } etatsGainableFroid;// = TEMPO_VOLETS_FROID;
              
              void tempoVoletsFr();
              
              void lancementDegivrageFr();
          
          private slots:
              //void tempoVoletsFr();
              void tempoVentilationFr();
              void tempoV4VFr();
              void tempoCompresseurFr();
              void tempoDegivrageFr();
              
              //void tempoLancementDegivrageFr();
              
              void tempoControleDegivrageFr();
              void tempoFinDegivrageFr();
              void tempoEgouttageFr();
              void tempoFinEgouttageFr();
              
              
          };
          
          #endif //FROID_H
          
          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved