schon wieder ein mp3 Player

  • Hallo allerseits,


    zwar habe ich das folgende mit einem Cubietruck und nicht mit einem Raspberry Pi gemacht, aber weil hier mehr Leute reinschauen und ich eigentlich vor keinem hardwarespezifisches Problem stehe, erlaube ich mir einfach hier ein Thema aufzumachen.

    Ich habe an die GPIO Pins ein paar Taster und LEDs angeschlossen und ein Skript mit einer Endlosschleife geschrieben, das über das sysfs die Taster abfragt und die LEDs steuert, damit ich einen mpd zumindest rudimentär am Gerät selbst bedienen kann, was zwar nicht sehr elegant ist und dank sysfs sehr viel Rechenleistung verbraucht, aber zumindest zuverlässig funktioniert.
    Jetzt will ich aber etwas mehr und steuere zusätzlich über I²C ein Display an und werte außerdem 2 Drehimpulsgeber aus.

    Dank eines Ports von WiringPi auf den Cubietruck kann ich mit einem von den Hardwarechecks befreiten py-gaugette Drehimpulsgeber auslesen. Also habe ich mir basierend darauf meine eigenen Workerthreads gebastelt, die nur die ganze Zeit Taster und Drehimpulsgeber abfrage und mit Callbackfunktionen etwas im Hauptprogramm auslösen sollen und genau dabei stoße ich immer wieder auf Probleme.
    In das python-Forum, in dem auch schon einen Thread eröffnet habe, traue ich mich vorläufig noch nicht wieder, weil ich das Gefühl habe zu weit daneben zu stehen um dort sinnvolle Fragen stellen zu können.

    Also poste ich einmal mein Testprogramm, das schon nicht richtig funktioniert.

    Ich hoffe es ist einigermaßen klar, was das passieren soll:

    • der erste Drehimpulsgeber encoder_a soll nur die Meldungen "rotate-" und "rotate+" ausgeben, wenn daran gedreht wird und das funktioniert auch soweit.
    • der zweite Drehimpulsgeber encoder_b soll zum nächsten oder vorigen Stück springen, was er aber nur tut, wenn man nicht zu schnell daran dreht. Hier ist mir schon so viel unklar, dass weh tut...
      Blockieren die Callbackfunktion den Workerthread oder laufen schon mehrere Callbackfunktionen paralell, wenn ich einigermaßen schnell drehe?
    • der Taster switch_a soll die Playlist leeren und funktioniert für sich gnommen einigermaßen problemlos nur in Verbindung mit
    • dem anderen Taster switch_b kommt es zu merkwürdigen Problemen. Der sollte zwischen Play/Pause umschalten und wenn die Playlist leer ist, ein zufälliges Album auswählen und zur Wiedergabeliste hinzufügen.
      Die Anweisungen stammen übrigens aus meinem ersten uneleganten Skript mit der Endlosschleife, das aber wie gesagt problemlos funktioniert hat.


    Außerdem ist beim Testen dieser für mich endgültig unerklärliche Fehler aufgetreten


    Kann das vielleicht (auch) daran liegen, dass ich parallel zu meinem Skript mpdlcd laufen lasse, um das Display über lcdproc anzusteuern?

    Die Workerthreads habe ich der Übersichtlichkeit wegen nicht gepostet, sie scheinen aber zu funktionieren. Wenn es für die Fehlersuche wichtig ist oder sie jemand aus anderen Gründen gerne sehen würde, poste ich sie selbstverständlich gerne - ich habe sie mir aber hautpsächlich mithilfe des verlinkten py-gaugette zusammengebastelt.

    Es wäre toll, wenn sich das jemand ansehen und mir weiterhelfen könnte... aber ich muss euch vorwarnen, in dem Fall kommen noch einige weitere Fragen auf euch (und eventuell das python-Forum) zu.


    viele Grüße,
    smutbert

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!