2017-08-04 2 views
0

Je travaille sur Qt, mais je suis tombé sur un problème que pour la vie de moi je ne peux pas résoudre du tout. J'ai essayé de nombreuses combinaisons différentes à mon code, mais cela ne m'a toujours pas donné la sortie que je recherche. J'espère que quelqu'un peut m'aider.Qt lecture d'entrée série, puis le diviser en variables distinctes

QStringList buffer_split = serialBuffer.split(","); // split the serialBuffer string, parsing with ',' as the separator 

    // Check to see if there less than 3 tokens in buffer_split. 
    // If there are at least 3 then this means there were 2 commas, 
    // means there is a parsed temperature value as the second token (between 2 commas) 
    if(buffer_split.length() < 3){ 
     // no parsed value yet so continue accumulating bytes from serial in the buffer. 
     serialData = arduino->readAll(); 
     serialBuffer = serialBuffer + QString::fromStdString(serialData.toStdString()); 
     serialData.clear(); 
    }else{ 
     // the second element of buffer_split is parsed correctly, update the temperature value on temp_lcdNumber 
     serialBuffer = ""; 
     qDebug() << buffer_split << "\n"; 
     parsed_data = buffer_split[1]; 

} 

La solution ci-dessus a travaillé pour moi, à son tour, je lis les valeurs qui sont envoyées sur le port série tels que:

0,0,0,0,0,0 

Au-dessus est de savoir comment parsed_data est en train de lire les informations du port série , qui est correct. Le problème que je rencontre, c'est de scinder cela, puis de les stocker dans des variables séparées pour commencer certaines instructions if. jusqu'à présent, je n'arrive pas à le faire fonctionner.

Si quelqu'un peut me aider je vous serais reconnaissant

Merci Vous

+0

supplémentaires Je suis pas clair sur votre question. Comme vous l'avez écrit avec parsed_data = buffer_split [1], vous pouvez accéder à chaque valeur individuelle et la stocker. Où êtes-vous coincé? –

+0

Lorsque j'essaie de stocker disons par exemple buffer_split [2], cela ne semble pas fonctionner. à la recherche de quelque chose comme ça. J'espère que cela le rend un peu plus facile à comprendre. Par exemple, le tableau im envoi est 45,0,67,0,0,13, j'ai besoin de chaque numéro à stocker dans une variable. int num1 = parsed_data [0] qui serait 45, int num2 = parsed_data [1] qui serait 0 et int num3 = parsed_data [2] qui serait 67 –

Répondre

0

Vous n'avez pas besoin parsed_data variables buffer_split stocke, tout ce que vous avez juste besoin int num1 = buffer_split[0].toInt(); int num2 = buffer_split[1].toInt(); ...

+0

Salut j'ai essayé ça avant, mais les valeurs restent juste à zéro même s'ils changent 'num1 = parsed_data.mid (0,1) .toInt();' semble fonctionner mais je crois que ce n'est pas la bonne façon de le contourner. –

+0

Hé, je suis un peu confus. Pouvez-vous lire les données d'origine comme 4,0,2,5,7,1 si vous ne pouvez pas votre problème lit à partir du port série ne pas diviser les valeurs. Essayez d'envoyer des valeurs avec le caractère de saut de ligne \ n et lisez-le quand la ligne entière est reçue, vous pouvez vérifier avec la fonction canReadLine() – onurozturk