Guude!

Zwei Punkte:

1.) Der Sourcecode ist wie ein Fingerabdruck oftmals eine recht individuelle Marke eines jeden Entwicklers. Jeder geht eine Aufgabenstellung etwas anders an, strukturiert seinen Code anders und hat besondere Vorlieben für Sprachkonstrukte. Allen guten Programmierern gemein ist, dass der Code eine gewisse "Schönheit" aufweißt. Und zwar sowohl in messbarer Form (Anzahl Zeile/Methoden, Benennung Variablen, ...), als auch rein subjektiv. Ein guter Programmierer möchte, dass man beim Blick auf seinen Code "Wow" sagt, und das Programm und die Lösungsansätze schnell versteht. Besonders wenn auch noch andere Leute am Code mitarbeiten, ist das nicht nur wünschenswert, sondern absolut notwendig. Niemand möchte "schlechten" oder "hässlichen" Code lesen müssen und dann auch noch versuchen müssen herauszufinden, was der Code eigentlich tut.

Dein Code sagt über dich aus, dass du absoluter Anfänger bist, und Python als Programmiersprache, bzw. allgemeine Sprachkonstrukte von Programmiersprachen noch nicht richtig verstanden hast. Das ist nicht schlimm, jeder hat mal so angefangen, von daher nimm das bloß nicht als Angriff auf. Meine Bitte an dich wäre nur, ein Gefühl dafür zu entwickeln wann dein Programm "fertig" ist und wann es einen Stand hat, in dem man es veröffentlichen kann. Dein Programm sollte nicht fertig sein wenn es tut was es soll, sondern erst dann, wenn es dabei auch noch "schön" aussieht und möglichst nicht weiter verbessert werden kann. Dann macht es viel mehr Spaß sich mit dir über die eigentliche Funktionalität zu unterhalten und du umgehst dumme Kommentare über deinen Programmierstil. Nicht jeder im Internet ist in der Lage, Kritik nur sachlich zu äußern. Das kann echt demotivieren.

In deinem Fall schau dir konkret mal deine Variablen "strCodewort01" bis "strCodewort16" an. Da kann man z.B. ein Array daraus machen und vieles der Logik in Schleifen packen. Auch viele If/Else sprechen dafür, dass du an diesen Stellen noch zu "statisch" denkst. Viele Berechnungen oder Entscheidungen lassen sich durch Funktionen oder Lookup-Tabellen vereinfachen. Überleg einfach mal, was jeweils einzelne Gruppen von If/Else gemeinsam haben und versuch das zu verallgemeiner/ zu abstrahieren.


2.) Wie du im Artikel von Quietschphone lesen konntest, ist die Ansteuerung über die GPIO des Raspberry nicht sinnvoll. Problem ist, dass dein time.sleep(xyz) nicht immer exakt xyz Zeiteinheiten schläft, sondern das mal mehr oder weniger sein kann. Ursache dafür ist das Betriebssystem, welches neben deinem Programm ja auch noch dutzende weitere "gleichzeitig" ausführen muss und dafür ein so genannter "Scheduler" den Prozessor der Raspberry immer unter all den Programmen "verteilen" muss. Das ist ein ganz allgemeines Problem bei "Echtzeit"-Anwendungen, wie das Generieren von genauen Bitraten, in Zusammenhang mit "normalen" Betriebssystemen. Es gibt diverse (und meist ziemlich komplexe) Möglichkeiten das zu lösen. Eine der einfacheren wird in dem Artikel genutzt.

Gruß Joachim