Problem: pySerial Status abfragen und an GUI weitergeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MattiBo
User
Beiträge: 7
Registriert: Mittwoch 27. März 2013, 15:44

Hallo Leute,

ich möchte gerne mein Python Programm mit dem Arduino über pySerial koppeln. Dies klappt alles wunderbar. Über einen separaten Thread wird über eine while-Schleife der COM-Port abgefragt. Dies klappt schon alles hervorragend. Nun möchte ich allerdings die Verbindung überprüfen und eine optische Rückmeldung an das GUI geben. Ich möchte also feststellen, ob der Arduino noch am PC angeschlossen ist, bzw. ob überhaupt noch Daten empfangen werden können. Ich habe dies über die "isOpen()" Funktion der pySerial API probiert, allerdings gibt diese ständig die Rückgabe True, obwohl ich den Arduino abgezogen habe. Gibt es eine andere Möglichkeit dieses festzustellen?

Desweiteren möchte ich diesen Wert gerne an das GUI weitergeben. Ich übergebe diesen Wert mit Hilfe eines Events (siehe: http://www.valuedlessons.com/2008/04/ev ... ython.html). Das GUI ändert sich entsprechend, allerdings wirft Eclipse den folgenden Fehler:

Code: Alles auswählen

QObject::connect: Cannot queue arguments of type 'QModelIndex'
(Make sure 'QModelIndex' is registered using qRegisterMetaType().)
QObject::connect: Cannot queue arguments of type 'QModelIndex'
(Make sure 'QModelIndex' is registered using qRegisterMetaType().)
Wie kann man diesen Fehler beheben? Liegt es eventuell daran, dass sich der Rückgabewert in dem Arduino Thread befindet und ich das GUI nur im Main Thread ändern kann?

Ich hoffe, ihr könnt mir diesbezüglich helfen.
Gruß Matti
BlackJack

@MattiBo: Der Event-Mechanismus von Qt sind Signale und Slots. Da musst Du nicht noch selber eine `Event`-Klasse erfinden. Das ist wahrscheinlich auch der Grund warum es in Python so etwas nicht wirklich „solo” gibt: Dort wo man ereignisbasierte Programmierung braucht, bringt das entsprechende Rahmenwerk schon alles dafür mit. Signale/Slots sollten auch threadsafe sein.
Antworten