Problema con QString



  • Dunque , sto realizzando un programmino semplice per la rilevazione della temperatura e umidità con arduino. Ricevo correttamente i dati da arduino, ma li visualizzo a schermo nella Qstring piu o meno così:

    ""
    "52" 
    " 22"
    "5 "
    "2 22"
    ""
    "52 2"
    "2"
    

    Ora anche constrollando con il debug la situazione non mi sembra diversa.
    Come potrei fare per averli sulla stessa linea per poi processare la stessa stringa e ottenere i valori da visualizzare su un grafico?

    Inserisco anche il blocco di codice in cui ho scritto la lettura dei valori :

    arduino->waitForReadyRead(500);
                    while (c != b){    //imposto una condizione che mi crea un loop continuo 
                    arduino->waitForReadyRead(2000); //imposto la lettura ogni 2 secondi 
                    lettura.append(arduino->readAll()); //leggo il contenuto della seriale e la metto nella stringa
                    lettura.remove("\r",Qt::CaseSensitive); // elimino i caratteri di formattazione che sono presenti nella stringa
                    lettura.remove("\n",Qt::CaseSensitive);
                    qDebug() << lettura; //visualizzo il tutto 
                    lettura.clear(); //pulisco e ricomincio
                    }
    


  • loop infiniti e readAll senza condizioni sono la ricetta per il disastro.

    Come manda i dati il tuo arduino? come stringhe? comes sono codificate (Ascii, utf8, etc)?



  • li manda come codici Ascii
    ho letto nelle specifiche ,
    mentre la libreria del sensore usa le seguenti caratteristiche

    DHT_Unified::DHT_Unified(uint8_t pin, uint8_t type, uint8_t count, int32_t tempSensorId, int32_t humiditySensorId):
      _dht(pin, type, count),
      _type(type),
      _temp(this, tempSensorId),
      _humidity(this, humiditySensorId)
    


  • dichiara QByteArray m_arduinoData; nella parte private: poi nel costruttore aggiungi

    QObject::connect(arduino,&QIODevice::ReadyRead,this,[this,arduino]()->void{
    m_arduinoData.append(arduino->readAll());
    for(int i=0;i<m_arduinoData.size();++i){
    if(QChar(m_arduinoData.at(i)).isDigit()) continue;
    if(i>0) qDebug() << m_arduinoData.left(i);
    if(i+1==m_arduinoData.size()) m_arduinoData.clear();
    else m_arduinoData = m_arduinoData.mid(i+1);
    i=-1;
    }
    });
    

    Probabilmente sarebbe meglio usare QTextStream ma non so come sono formattati i tuoi dati quindi ho dovuto arrangiarmi



  • perfetto più tardi lo provo poi ti fo sapere



  • Ciao scusami per il ritardo ho avuto mille cose da fare .
    Perfetto ha funzionato. Fa una stringa unica e a quel punto posso gestirla per mandare i grafici.
    Grazie mille.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.