Funktionen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallöchen,

    ich hab hier mal eine kleine Verständnisfrage:conf:. Ich versuche aktuell mein ersten Pythoncode zu strukturieren und brauch da mal ein wenig Unterstützung. Ich habe unten mal einen Teil meines Codes aufgeführt. Dort zu sehen ist ein Servo. Dieser wird am Anfang des Codes erstmal konfiguriert und auf Pin 23 gelegt. Später im Programm wird dem Servo dann gesagt was er überhaupt machen soll ( von 0° einmal auf 90° und zurück zu 0°). Insgesamt habe ich drei Servos in meinem Programm implementiert, welche alle vom Ablauf her das Gleiche machen aber auf unterschiedlichen Pins liegen. Ich würde nun gerne die drei Servos (den Servoablauf) in eine einzelne Funktion umwandeln, und diese dann im Hauptprogramm aufrufen. So spare ich mir die 11 Zeilen pro Servo im Hauptprogramm. Der Codeschnipsel unten müsste dazu so umgeschrieben werden, dass ich im Hauptprogramm dann anschließend noch die Pinbelegung des Servos vornehmen kann. Kann mir da mal jemand auf die Sprünge helfen und mir sagen wie das funktioniert?

    lieben Gruß:*

  • Ungefaehr so:

    Code
    def sweep(servo_pin):
        servo_pin.ChangeDutyCycle(2.5)
        time.sleep(2)
        servo_pin.ChangeDutyCycle(7.5)                          # 7.5 =90° /2.5 =0° /12,5 =180°
        time.sleep(2)
        servo_pin.ChangeDutyCycle(2.5)
        servo_pin.ChangeDutyCycle(0)
    
    sweep(servo_1) # und so weiter

    Servo 1 ist ein schlechter Name, das wird doch eine konkrete Funktion haben - so sollte das auch heissen. Und wenn du *gleichzeitig* was machen willst mit den Servos, dann musst du eh sehr anders vorgehen.

  • Du kannst sogar mehr als eine Funktion einsetzen oder möchtest du jedes Mal die Winkel selbst ausrechnen?

    Code is nicht getestet.

  • Ungefaehr so:

    Code
    def sweep(servo_pin):
        servo_pin.ChangeDutyCycle(2.5)
        time.sleep(2)
        servo_pin.ChangeDutyCycle(7.5)                          # 7.5 =90° /2.5 =0° /12,5 =180°
        time.sleep(2)
        servo_pin.ChangeDutyCycle(2.5)
        servo_pin.ChangeDutyCycle(0)
    
    sweep(servo_1) # und so weiter

    Servo 1 ist ein schlechter Name, das wird doch eine konkrete Funktion haben - so sollte das auch heissen. Und wenn du *gleichzeitig* was machen willst mit den Servos, dann musst du eh sehr anders vorgehen.

    Hey _deets_,

    du hast natürlich Recht "servo_1" ist in der Tat unglücklich gewählt und sollte eher mit der Funktion benannt werden. Könnte man die "Vorkonfiguration" des Servos (siehe unten) auch schon in eine Funktion packen oder schreibt man das später ins Hauptprogramm?

    Code
    servo_pin = 23
    GPIO.setup(servo_pin, GPIO.OUT)
    servo_pin = GPIO.PWM(servo_pin, 50) # GPIO 23 als PWM mit 50Hz
    servo_pin.start(2.5) # Initialisierung
    servo_pin.ChangeDutyCycle(0)
  • Du kannst sogar mehr als eine Funktion einsetzen oder möchtest du jedes Mal die Winkel selbst ausrechnen?

    Code is nicht getestet.

    hey DeaD_EyE,

    dankeschön das ist auch nochmal ein cooler Denkanstoß:/. Mein Problem bei den ganzen Antworten ist immer das ich immer noch eine Menge Zeit brauche um zum Beispiel deine Antwort nachzuvollziehen :) da ich noch komplett am Anfang meiner Karriere stehe.

  • Jeder Code, der mehrere Zeilen enthaelt, die sich nur durch einen Parameter (oder sogar mehrere) unterscheidet, kann in eine Funktion gewandelt werden.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!