doggy hat geschrieben:
Das ist das Funktionierende Programm. Da ist nur noch ein kleiner Fehler drin, welchen ich aber noch ausbügeln werde.
Oha
Also damit kannst Du alles bezüglich GUI vergessen
Dir fehlen einfach noch zu viele Grundlagen... angefangen bei Dingen wie Datenstrukturen und Funktionen. Dazu kommt dann - als Anfänger natürlich - noch die Schwierigkeit, Programme sinnvoll zu strukturieren.
Wenn ich das nur einfach überfliege, hätte man das vermutlich in einem Drittel der Code Länge sauber implementiert. Zudem scheinen es ja eigentlich recht simple Abläufe zu sein, die man nur sauber trennen muss. Aktuell sind das ja zwei Monster-Schleifen, Copy-and-Paste if...elif...else-Kaskaden und durchnummerierte Variablen auf einem Haufen.
Mein Tipp: "Wegwerfen" und neu anfangen!
Dabei trennst Du das dann am besten sauber auf, indem Du den "Raspberry Pi"-Teil von den logischen Abläufen separierst. Schreibe einfach lauter *kleine* Funktionen, die Datentypen wie Listen oder Dictionaries (oder verschachtelten Komponenten) als Argumente entgegen nehmen oder zurückgeben. Eine Funktion, die Logik über den Ablauf enthält, darf nie direkt auf etwas zugreifen, was den "Raspi" steuert oder abfragt. Wenn Du das einhalten kannst, dann kann man später vermutlich einfach eine GUI darauf aufsetzen!
Fange am besten mit einem Modul an, welches nur die Datenstrukturen definiert und Funktionen besitzt, die den logischen Ablauf steuern oder dazu beitragen. Du hast doch offenbar so etwas wie "Kabinen". Diese wiederum können "Inhalt" besitzen oder auch leer sein. Wenn die Art des Inhalts keine Rolle spielt, reicht als Modell dafür einfach eine boolesche Variable aus. Zudem kann man solche Kabinen wohl öffnen - schließen auch? Da kann man sich überlegen, ob einem der Zustand ("offen" und "geschlossen") ausreicht. Das wäre nämlich auch nur boolesch, also ``True`` oder ``False``.
Als Identifikation für die Kabinen, können wir uns einen künstlichen Index überlegen, der von 0 bis x geht. Damit könnte man einfach eine Liste für die Sammlung von Kabinen nutzen.
Ob Du die GPIO-Id auch noch in die Datenstruktur aufnimmst, oder diese später über ein Mapping dazu fügst, kann man sich immer noch überlegen. Genauso, ob eine vorhandene PIN nicht einfach Auskunft über "besetzt" und "frei" gibt...