Das Display ist ein Bausatz von Adafruitund wird über i2c angeschlossen. Meinen aktuellen Code (unkommentiert) findest Du im Anhang. Mein erstes Python Skript von daher vermutlich etwas wirr. Fragen gerne.
Posts by fischkopp
-
-
-
Nachdem ich stundenlang mit Pipes herumexperimentiert habe, habe ich festgestellt, dass das Problem wohl doch woanders lag.
Ich kann noch nicht ganz nachvollziehen woran es lag, jedenfalls geht es jetzt - Wunderheilung...
Danke für Eure Hilfe und frohe Weihnachten!
-
Hier der vereinfachte Code als Beispiel, hoffe das hilft weiter:
Code
Display Moredef checkStatus(): while True: print str(os.popen("xmms2 current -f '${playtime}'").read()) time.sleep(0.9) def readCard(): while True: id = raw_input("warte auf Karte") if id == "0003724027": print "Hallo Welt!" t1 = Thread(target=readCard) t2 = Thread(target=checkStatus) t1.start() t2.start()
CheckStatus fragt einfach regelmäßig die aktuelle Spielzeit ab und gibt diese aus.
readCard wartet darauf, dass der Kartenleser eine ID eingibt und wertet diese aus.
Die Threads müssen untereinander nicht kommunizieren, sondern nur jeder für sich seine Arbeit erledigen, allerdings parallel.
-
Danke, ich versuchs mal mit 'subprocess'. Den Code habe ich gerade nicht zur Hand, reiche ich heute Abend nach.
Ich vermute es hat weniger mit den Threads zu tun, sondern wirklich das rawinput irgendwie verhindert, das Rückmeldungen aus der Console ausgelesen werden können.
Eine Idee die ich noch habe ist, mit > den Output in eine Datei zu leiten und diese dann auszulesen, wobei das nicht sonderlich elegant ist.
-
Hallo,
Ich bin gerade dabei das jukebox4kids projekt für meine Tochter zu Weihnachten zu bauen. Kurz vor der Zielgeraden bin ich noch auf ein Problem gestoßen:
Ich nutze mehrere Threads u.a.
Ein Thread der auf einem Display Tracknummer, Spieldauer etc. Anzeigt. Dazu ruft ein Thread sekündlich ein os.popen Befehl aus, lässt sich von xmms2 die Werte geben und gibt diese ans Display.
Ein weiterer Thread überwacht den rfid Kartenleser auf neue Eingaben. Der Kartenleser agiert wie eine usb Tastatur und wird daher über rawinput eingelesen. Getrennt voneinander laufen beide Funktionen super nur parallel nicht.
Das Python Programm wird automatisch über bashrc gestartet. Die Display Steuerung bekommt keine Werte von xmms2, bzw.wenn ich das Programm mit & im Hintergrund starte geht das Display aber die Eingabe des Kartenlesers wird nicht ausgewertet.
Seltsamerweise funktionieren os.system Befehle über die ich Start/Stop/weiter realisiere.
Irgendwie scheint das os.popen und rawinput sich gegenseitig die Shell zu blocken. Kann ich irgendwie 2 verschiedene Shells nutzen? Andere Ideen?
Vielen Dank und frohe Weihnachten
Simon
-
Hallo zusammen,
Bin auch gerade dabei eine Box zu bauen und schreibe aber meinen eigenen Code in Python zusammen mit xmms2.
Zum parallelisieren benötigst Du Threads, das hat bei mir gut funktioniert. Google mal Python und Threads.
Ich habe über raspiconfig Auto Login eingestellt und starte das Script über .bashrc, da ich sonst den Kartenleser nicht auslesen konnte.
Kann meinen Code später gerne aber ich bin absoluter Python Neuling entsprechend ist er quick & dirty geschrieben.