Hallo,
hier mal eine Idee zur Programmierung mit Pybricks.
Ich beziehe mich auf
https://github.com/falk12.../MotorControl%202.4.py
Die (gute?) Idee ist folgende:
das Programm zerfällt in mehrere Teile:
- Parameter setzen
- Funktionen (im Beispiel zwei)
- general program routines and classes (ab 147)
- main loop
Alles was nix mit der eigenlichen Anwendung zu tun hat steht im unteren Teil (ab 147), kann also dem der die Anwendung programmiert egal sein, das könnte fertig sein.
In einem richtigen Programm würde man das komplett in irgendwelchen Bibliotheken verstecken.
Die Anwendung ist oben, also was bei welchen Tastendrücken passieren soll. Das "connect", das Erkennen der Motoren, das Betreiben der Motoren etc ist unten.
Natürlich hängt das voneinander ab, hier gibt es nur eine Routine "drive()" die beide Motoren bewegt.
Ob das bei komplexeren Anwendungen überhaupt sinnvoll möglich ist - keine Ahnung.
Letztlich sollte es dazu dienen den Anwendungsteil vom Drumherum zu trennen, um jemanden, der python kennt, das Programmieren zu erleichtern. Man braucht doch nicht immer das Connect/Reconnect neu zu coden, oder?
Ob das jetzt schlau ist oder nicht, genau das ist die Frage.
Grüße
Werner
Thomas52xxx , womo gefällt das
Code bezogene Fragen/Anmerkungen:
- Die Variablen der Tasten "UP", "DOWN",... sind bei Dir strings, obwohl Du in CheckButton() x mit dem enum-member aus 'Button' überschreibst. Hat das einen bestimmten Grund?
- Python kann eigentlich auch "elif" [also 'else if']. Das wird dann bei schon erfüllter Abfrage übersprungen.
Prinzipiell finde ich das gut, habe ich glaube ich ja schon mehrfach gesagt ;)
Ich habe mich aber schon wieder selber dabei ertappt, damit alles möglich konfigurieren und erschlagen zu wollen und ich glaube dann hätte man ein Komplexitätsproblem.
Vordefinierte, wählbare Funktionen? Gute Idee!
Mit Lichtanzeige auf der Fernbedienung? Brilliant
Jede Funktion mit eigenen Parametern im Code konfigurierbar machen? No way! :X
Du initialisierst hier ja den CityHub. Wenn man jetzt auch noch den TechnicHub ansprechen möchte, muss die Initializierung in den MainLoop und dann muss man sich überlegen, was wie passieren soll. Je nach Funktion hätte man dann noch mögliche Variablen, manche Funktionen gehen vielleicht nur mit einem bestimmten Hub,... das kann schnell echt unübersichtlich werden. Und dann ist auch essig mit "man kann hier die Variablen anpassen" da blickt niemand mehr durch.
Beispiel TechnicHub:
- Lenken
- On/off
- Welche Taste
- On/Off auf die selbe Taste?
Und das mal vier, weil 4 Ports, und das Abhandeln der ganzen Settings in eine Funktion? Inklusive Kalibrierung?
Es wäre vielleicht dann doch eher besser, einfache Fälle zur Verfügung zu stellen:
SimpleCar: Port A lenkt, Port B fährt
Car: Port A lenkt, Port B und C fahren (da gehts dann mit dem Invertieren los)...
Zudem müsste man dann z.B. die Konfiguration auslagern und ganz klar voneinander trennen, die Funktionen deutlich benamen und im Zweifel lieber dem "weniger ist mehr" Prinzip folgen.
Die Frage wäre also für mich auch: Was kann man bedenkenlos in eine Funktion packen und was nicht?
Gimmick hat geschrieben:
Technicmaster0 hat geschrieben:
Moin,
Gimmick hat geschrieben:
Dieser Beitrag wurde gelöscht.
Lok24 hat geschrieben:
Technicmaster0
01.09.2021, 22:11
Als Antwort auf den Beitrag von Gimmick
Editiert von
Navigation
02.09.2021, 07:57
Gimmick hat geschrieben:
Gimmick hat geschrieben:
Lok24 hat geschrieben:
Hallo,
sorry für die späte Antwort.
Gimmick hat geschrieben:
Lok24 hat geschrieben: