Russian Qt Forum
Ноябрь 25, 2024, 12:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: График из СОМ порта  (Прочитано 2855 раз)
Subscriber
Гость
« : Июнь 27, 2015, 22:44 »

Всем привет!
Пытаюсь построить график данных, поступающих из СОМ порта.
Данные поступают побайтно в бинарном виде.
Читаю их как:
Код:
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 );
}
Результат тот же.
Может кто подскажет, где затык?
Записан
lks
Новичок

Offline Offline

Сообщений: 19


Просмотр профиля
« Ответ #1 : Июнь 28, 2015, 12:32 »

Посмотрите пример из Qt terminal.
Открывайте и читайте порт как в этом примере.
Записан
AlFoX
Гость
« Ответ #2 : Июнь 29, 2015, 05:16 »

Цитировать
void MainWindow::slotReceivedData( const QByteArray &data )
{
    graphData = data;
    graphValue = graphData.toInt(&ok,16);
}

Во пeрвых - это не в десятичную систему перевод. Во вторых проверьте значение 'ok'.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.142 секунд. Запросов: 23.