Hi,
So nun bin ich schon ein stückchen weiter.
ich habe endlich ein funktionierendes Programm gefunden, dass auf die
serielle Schnittstelle zugreifen kann. Habe auch schon mit einem
Mikrocontroller Daten gesendet und mit dem Beispielprogramm die Daten
empfangen.
Hab nun das Problem, dass ich nicht weiß wie ich die Zeiger zum laufen
bringe, da ich alles in qml geschrieben habe und der Serial Port in c++
geschrieben ist.
Könnt ihr mir vielleicht sagen wie ich das mit einander verknüpfen kann.
Sprich ich möchte die Zeiger mit Signal ans Slots bewegen
Habe auch schon danach gegoogelt aber wurde nicht so richtig fündig bzw.
der Lösungsansatz ist mir nicht so richtig klar.
Ich möchte wenn ich jetzt vom Mikrocontroller auf die Taste draufdrücke
eine byte verschicken sagen wir mal (1111 1111), der Zeiger soll jetzt
bei diesem code anfangen zu laufen und wenn ich wieder loslasse soll es
wieder runterlaufen (0000 0000).
Ich habe im Programm das Beeispiel mit dem PortListener
herausgeschrieben.
Jetzt möchte ich wenn ich ein Signal von 1111 1111 bekomme den Zeiger,
was ich qml geschrieben habe per Signal und Slot bewegen.
Es hört sich vielleicht trivial an aber für mich der nicht so gute
Kenntnisse in c++ Programmieren hat ist es schon etwas aufwändiger,
daher würde ich mich für eure Tipps und Lösungsvorschläge freuen.
Ich habe das BeispielProgramm mit der Serielle Schnittstelle angehängt.
Das andere Programm womit die Zeiger bewegt werden sind ebenfalls auch angehängt
Code: Alles auswählen
#include "PortListener.h"
#include <QtDebug>
PortListener::PortListener(const QString & portName)
{
qDebug() << "hi there";
this->port = new QextSerialPort(portName, QextSerialPort::EventDriven);
port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_2);
if (port->open(QIODevice::ReadWrite) == true) {
connect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
connect(port, SIGNAL(dsrChanged(bool)), this, SLOT(onDsrChanged(bool)));
if (!(port->lineStatus() & LS_DSR))
qDebug() << "warning: device is not turned on";
qDebug() << "listening for data on" << port->portName();
}
else {
qDebug() << "device failed to open:" << port->errorString();
}
}
void PortListener::onReadyRead()
{
QByteArray bytes;
int a = port->bytesAvailable();
bytes.resize(a);
port->read(bytes.data(), bytes.size());
qDebug() << "bytes read:" << bytes.size();
qDebug() << "bytes:" << bytes;
}
void PortListener::onDsrChanged(bool status)
{
if (status)
qDebug() << "device was turned on";
else
qDebug() << "device was turned off";
}
Hier ist der Qml Code vom Zeiger:
Code: Alles auswählen
Image {
id: zeiger
x: 235; y: 12
width: 11
height: 228
smooth: true
source: "GeschwZeiger.png"
transform: Rotation {
id: zeigerRotation
origin.x: 5; origin.y: 225
//! [needle angle]
angle: Math.min(Math.max( root.value * 3 -150 ), root.value +50)
//Math.min(Math.max(-150, root.value*3.5 - 200), 150)
Behavior on angle {
SpringAnimation {
spring: 0.08
damping: .25
}
}
//! [needle angle]
}
}
Ich danke euch schonmal im Voraus
Gruss
Flat