diff options
Diffstat (limited to 'main.cpp')
| -rw-r--r-- | main.cpp | 56 |
1 files changed, 42 insertions, 14 deletions
@@ -8,6 +8,12 @@ #include "QmlCustomPlot.h" +template <typename T> +T& median3(const T& a, const T& b, const T& c) { + using namespace std; + return max(min(a,b), min(max(a,b),c)); +} + int main(int argc, char *argv[]) { QApplication app(argc, argv); @@ -38,7 +44,7 @@ int main(int argc, char *argv[]) auto graph = plot->addGraph(); graph->setPen(QPen(QBrush(Qt::red), 2)); - graph->setLineStyle(QCPGraph::lsLine); + graph->setLineStyle(QCPGraph::lsNone); graph->setScatterStyle(QCPScatterStyle::ssDot); graph->setData(x_profile, y_profile); @@ -46,7 +52,7 @@ int main(int argc, char *argv[]) auto manager = new QNetworkAccessManager(&app); QTimer pixelsAutoRestartTimer(&app); - pixelsAutoRestartTimer.setInterval(1000); + pixelsAutoRestartTimer.setInterval(500); pixelsAutoRestartTimer.setSingleShot(false); QObject::connect(&pixelsAutoRestartTimer, &QTimer::timeout, [&](){ @@ -61,17 +67,19 @@ int main(int argc, char *argv[]) return; } - auto jsonPixels = QJsonDocument::fromJson(reply->readAll()) - .object()["pixels"].toArray(); + auto json = QJsonDocument::fromJson(reply->readAll()) + .object(); + auto jsonPixels = json["pixels"].toArray(); + auto encoderPosition = json["encoderPosition"].toInteger(); + auto measurementCounter = json["measurementCounter"].toInteger(); + auto timestampUs = json["timestampUs"].toInteger(); // y_profile.clear(); for (int i = 0; i < jsonPixels.count(); ++i) { - y_profile[i] = jsonPixels[i].toDouble(); + y_profile[i] = jsonPixels.at(i).toDouble(); } - graph->setData(x_profile, y_profile); - QVector<qreal> y_diff(y_profile.count()); qreal max_diff { 0. }; qreal min_diff { 1000000. }; @@ -80,19 +88,19 @@ int main(int argc, char *argv[]) qreal avg_diff { 0. }; for (size_t i = 0; i < y_profile.count(); ++i) { - y_diff[i] = y_profile[i] - prev_y_profile[i]; + y_diff[i] = y_profile.at(i) - prev_y_profile.at(i); - if (y_diff[i] > max_diff) { - max_diff = y_diff[i]; + if (y_diff.at(i) > max_diff) { + max_diff = y_diff.at(i); max_diff_idx = i; } - if (y_diff[i] < min_diff) { - min_diff = y_diff[i]; + if (y_diff.at(i) < min_diff) { + min_diff = y_diff.at(i); min_diff_idx = i; } - avg_diff += fabs(y_diff[i]); + avg_diff += fabs(y_diff.at(i)); } avg_diff /= y_diff.size(); @@ -104,7 +112,24 @@ int main(int argc, char *argv[]) // // const auto max_diff = std::max_element(y_diff.begin(), y_diff.end()); // const auto avg_diff = std::accumulate(y_diff.begin(), y_diff.end(), 0.0) / y_diff.size(); std::sort(y_diff.begin(), y_diff.end()); - const auto median_diff = y_diff[y_diff.size() * 3 / 4]; + const auto median_diff = y_diff.at(y_diff.size() * 3 / 4); + + // if (qFuzzyIsNull(max_diff)) { + // qDebug() << "max_diff is null"; + + // static bool done = [&]() -> bool { + // for (const auto & y : y_profile) { + // qDebug() << y; + // } + // return true; + // }(); + + // manager->get(request); + + // return; + // } + + graph->setData(x_profile, y_profile); engine.rootContext()->setContextProperty("max_diff", max_diff); engine.rootContext()->setContextProperty("max_diff_idx", int(max_diff_idx)); @@ -112,6 +137,9 @@ int main(int argc, char *argv[]) engine.rootContext()->setContextProperty("min_diff_idx", int(min_diff_idx)); engine.rootContext()->setContextProperty("avg_diff", avg_diff); engine.rootContext()->setContextProperty("median_diff", median_diff); + engine.rootContext()->setContextProperty("encoderPosition", encoderPosition); + engine.rootContext()->setContextProperty("measurementCounter", measurementCounter); + engine.rootContext()->setContextProperty("timestampUs", timestampUs); manager->get(request); pixelsAutoRestartTimer.start(); |
