Ich verwende QT und QCustomPlot
, um ein Echtzeit-Plot-Tool zu erstellen, und die Daten des Diagramms werden von der Arduino UNO-Karte gelesen. Meine Anwendung hat es geschafft, zu zeichnen, während die Daten total durcheinander sind. Hier ist mein Code unten ist (einige Code ist aus QCustomPlot Website):Abnormale Ausgabe beim Lesen von der seriellen Schnittstelle in QT
void Dialog::realtimeDataSlot()
{
bool currentPortNameChanged = false;
QString currentPortName;
if (currentPortName != portName) {
currentPortName = portName;
currentPortNameChanged = true;
}
QString currentRequest = request;
QSerialPort serial;
if (currentPortNameChanged) {
serial.close();
serial.setPortName(currentPortName);
if (!serial.open(QIODevice::ReadOnly)) {
return;
}
}
static QTime time(QTime::currentTime());
// calculate two new data points:
double key = time.elapsed()/1000.0;
static double lastPointKey = 0;
if (key-lastPointKey > 0.002) // at most add point every 2 ms
{
// add data to lines:
if(serial.waitForReadyRead(-1)){
data = serial.readAll();
QTextStream(stdout) << "HERE:" << data.toDouble() << endl;
customPlot->graph(0)->addData(key, data.toDouble());
customPlot->graph(0)->rescaleValueAxis(); //rescale value (vertical) axis to fit the current data:
lastPointKey = key;
customPlot->xAxis->setRange(key, 8, Qt::AlignRight);
customPlot->replot();
static double lastFpsKey;
static int frameCount;
++frameCount;
if (key-lastFpsKey > 2) // average fps over 2 seconds
{
lastFpsKey = key;
frameCount = 0;
}
}
}
// calculate frames per second:
if (currentPortName != portName) {
currentPortName = portName;
currentPortNameChanged = true;
} else {
currentPortNameChanged = false;
}
}
Als ich versuchte, die Daten auszudrucken ich von der seriellen Schnittstelle zu lesen, fand ich folgendes:
HERE:1
HERE:15
HERE:150
HERE:149
HERE:149
HERE:149
HERE:150
HERE:150
HERE:15
HERE:150
HERE:149
HERE:49
HERE:150
HERE:150
HERE:1
HERE:150
Die Werte ungefähr 150 sind normal, während die Werte, die 0, 1 für andere sind, nicht sind. Es wird auch nicht mit einer stabilen Geschwindigkeit ausgedruckt. Ich weiß nicht, was damit passiert ist, und danke an alle, die helfen können, und ich würde es begrüßen, wenn es bessere Möglichkeiten gäbe, dies umzusetzen.
Wir haben keine Ahnung, wie Sie diese Frage beantworten es sei denn, Sie sagen uns, von welchem Gerät Sie gerade lesen. Warum sagst du, dass 150 normal ist, aber 0/1 nicht? – Falmarri