Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. QserialPort

QserialPort

Scheduled Pinned Locked Moved Solved French
onjour jai écr
6 Posts 2 Posters 802 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.
  • djikzayD Offline
    djikzayD Offline
    djikzay
    wrote on last edited by
    #1

    Bonjour j'ai écrit un programme qui me permet de lire des données que m'envois ma carte Arduino via le port série, je voulais vous montrer mon code pour que vous me conseillez sur ce qui ne va pas, le code marche, j'arrive à recevoir toutes les données, en fait les données envoyées par la carte Arduino sont les valeurs de trois potentiomètres et l'état de deux boutons poussoirs. Je voulais savoir s'il y'a une meilleure technique pour faire le traitement Merci.
    voici mon code:

    void fenetre_principal::save_donnee()
    {
    QByteArray donnees;
     if(m_port->bytesAvailable()>=9)
    {
         while(continu)
       {
             qDebug()<<"i m in while\n";
             if(m_port->peek(2).toInt()!=-1){
            m_port->getChar(nullptr);
        }
            else
          {
            m_port->getChar(nullptr);
             m_port->getChar(nullptr);
    
            qDebug()<<"debut_trame\n";
    
            while(m_port->peek(2).toInt()!=-2)
            {
    qDebug()<<"enter\n";
                if(m_port->bytesAvailable())
                    donnees.push_back(m_port->read(1));
                else
                    break;
            }
            m_port->getChar(nullptr);
              m_port->getChar(nullptr);
            qDebug()<<"fin_trame\n";
            //if(!m_port->bytesAvailable())
            continu=false;
    
           }
    
        }
         continu=true;
    dispatch(donnees);
    donnees.clear();
    
     }
        else
          return;
    
    }
    
    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Bonjour et bienvenu sur devnet,

      Plutôt que d'avoir une boucle presque infinie comme ça, le plus simple serai d'utiliser la nature asynchrone de QSerialPort. A chaque fois que des données arrivent, les cumuler dans un buffer. Ensuite vérifier si le buffer contient une trame, si oui, l'extraire et la traiter et recommencer jusqu'à ce qu'il n'y ait plus de trame disponible.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      djikzayD 1 Reply Last reply
      2
      • SGaistS SGaist

        Bonjour et bienvenu sur devnet,

        Plutôt que d'avoir une boucle presque infinie comme ça, le plus simple serai d'utiliser la nature asynchrone de QSerialPort. A chaque fois que des données arrivent, les cumuler dans un buffer. Ensuite vérifier si le buffer contient une trame, si oui, l'extraire et la traiter et recommencer jusqu'à ce qu'il n'y ait plus de trame disponible.

        djikzayD Offline
        djikzayD Offline
        djikzay
        wrote on last edited by
        #3

        @SGaist bonsoir merci pour votre réponse d'accord je vais essayer comme tu as dit, exactement je voulais me débarrasser du while et le fait d'attendre qu'il ait 9 octets pour faire un traitement.

        1 Reply Last reply
        0
        • djikzayD Offline
          djikzayD Offline
          djikzay
          wrote on last edited by djikzay
          #4

          bonjour j'ai réécrit mon programme comme vous me l'avez conseillé, ça marche!
          si vous avez d'autres suggestions , proposez les Svp Mercii

          void fenetre_principal::save_donnee()
          {
             m_buffer.push_back(m_port->readAll());
             QByteArray send{0};
                 while(m_buffer.contains("-1")&&m_buffer.contains("-2"))
             {int r(0);
          
                     for (int i(m_buffer.indexOf("-1")+2);i<(m_buffer.indexOf("-2"));i++)
                     {
                         send.push_back(m_buffer[i]);
                         r++;
                     }
                         m_buffer.remove(m_buffer.indexOf("-1"),r+4);
          
                     dispatch(send);
             }
                 qDebug()<<"out\n";
          }
          
          
          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #5

            Quel est le type the m_buffer ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            djikzayD 1 Reply Last reply
            0
            • SGaistS SGaist

              Quel est le type the m_buffer ?

              djikzayD Offline
              djikzayD Offline
              djikzay
              wrote on last edited by
              #6

              @SGaist bonsoir m_buffer est un QbyteArray

              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