2016-12-15 5 views
2

私はC++とQtで初心者です。私は文字列 "Data"を受け取った後、シリアルポートに受け取った値を配列に保存したい。 私は、シリアルポートが正しく動作するように端末の例を使用しています。Qtで決められた受信文字列の後に、次の100が受け取った値を配列に保存する

The read function in the Example is the same: 
void MainWindow::readData() 
{ 
    QByteArray data = serial->readAll(); 
    console->putData(data); 

} 

どうすれば変更できますか?ありがとう!

+1

を使用しています私のためとしては、この同期または非同期ですか?あなたのパケットのフォーマットは何ですか? –

+0

非同期で、パケットはint型です。 –

+0

送信の開始と終了を決定する要因は何ですか?チェックサムを使用していますか? –

答えて

1

手動でデータを送信する場合は、フレームデリミタの先頭とフレームデリミタとチェックサムの終了を追加することをお勧めします。

ただシリアル番号を宣言してください。 StartOfMessage and EndOfMessageはお使いの端末によって異なります。 あなたの送信内容がわかりません。うまくいけば、あなたのデバイスのドキュメントからあなたの発送内容を知ることができます。

私は

enum Constants 
    { 
     StartOfMessage = '\x02', /* Value of byte that marks the start of a message */ 
     EndOfMessage = '\x03', /* Value of byte that marks the end of a message */ 
     CarridgeReturn = '\x0D', /* Carridge return is first byte of end of line */ 
     LineFeed  = '\x0A', /* Line feed is second byte of end of line */ 
     NullChar  = '\0'  /* Null Character */ 
    }; 

void MainWindow::readData() 
{ 
    // read all 
    QByteArray data = serial->readAll(); 

    // store all read data packet_storage is a QByteArray 
    packet_storage.append(data); 

    int start_index = 0; 
    int end_index = 0; 

    // process packet if not empty 
    if(!packet_storage.isEmpty()) 
    { 
     if(packet_storage.contains(StartOfMessage) && packet_storage.contains(EndOfMessage)) 
     { 
        start_index = packet_storage.indexOf(StartOfMessage,0); 
        end_index = packet_storage.indexOf(EndOfMessage,0); 

        int length = 0; 

        for (int i=start_index; i <= end_index; i++) 
        { 
         length++; 
        } 

        // get data 
        QByteArray dt = packet_storage.mid(start_index,length); 

        // do your processing here. 
        // store in vector write to file etc. 
        processpacket(dt);       

        packet_storage.remove(start_index,dt.size()); 

      } 

     } 
} 
+0

ありがとうラファエル!今私はそれを使用しようとする! –

+0

申し訳ありませんが、どのようにpacket_storageとstartとend_indexを定義できますか? =) –

関連する問題