Всем привет!
Пытаюсь построить график данных, поступающих из СОМ порта.
Данные поступают побайтно в бинарном виде.
Читаю их как:
void Receiver::slotReadyRead( )
{
QByteArray data;
data = m_serialPort.readAll( );
emit signalReceivedData( data );
}
Далее пытаюсь преобразовать в десятичный вид:
void MainWindow::slotReceivedData( const QByteArray &data )
{
graphData = data;
graphValue = graphData.toInt(&ok,16);
}
и построить график
void MainWindow::realtimeDataSlot()
{
// calculate two new data points:
double key = QDateTime::currentDateTime().toMSecsSinceEpoch()/1000.0;
static double lastPointKey = 0;
if (key-lastPointKey > 0.01) // at most add point every 10 ms
{
double value0 = graphValue;
// add data to lines:
ui->customPlot->graph(0)->addData(key, value0);
// set data of dots:
ui->customPlot->graph(2)->clearData();
ui->customPlot->graph(2)->addData(key, value0);
// remove data of lines that's outside visible range:
ui->customPlot->graph(0)->removeDataBefore(key-8);
// rescale value (vertical) axis to fit the current data:
ui->customPlot->graph(0)->rescaleValueAxis();
lastPointKey = key;
}
// make key axis range scroll with the data (at a constant range size of 8):
ui->customPlot->xAxis->setRange(key+0.25, 8, Qt::AlignRight);
ui->customPlot->replot();
// calculate frames per second:
static double lastFpsKey;
static int frameCount;
++frameCount;
if (key-lastFpsKey > 2) // average fps over 2 seconds
{
ui->statusBar->showMessage(
QString("%1 FPS, Total Data points: %2")
.arg(frameCount/(key-lastFpsKey), 0, 'f', 0)
.arg(ui->customPlot->graph(0)->data()->count()+ui->customPlot->graph(1)->data()->count())
, 0);
lastFpsKey = key;
frameCount = 0;
}
}
Пример графика взял из qcustomplot
К сожалению, по оси Y выводится нулевое значение.
Пытался читать данные как
void Receiver::slotReadyRead( )
{
char data[64];
m_serialPort.read( data,1 );
emit signalReceivedData( data );
}
Результат тот же.
Может кто подскажет, где затык?