Python-Script erwartet manuelle Eingabe, soll aber Script mitgegeben werden

FatManStanding

Lieutenant
Registriert
Aug. 2021
Beiträge
670
Hallo,

ich versuche an meinem Raspberry Pi einen Servo-Motor (SG90) zum Laufen zu bringen, was mit diesem Script aus grds. geht:

Code:
import RPi.GPIO as GPIO
import time
# Set up the GPIO pin for PWM
SERVO_PIN = 17  # Use GPIO18 (Pin 12)
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)
# Start PWM with 50Hz frequency
pwm = GPIO.PWM(SERVO_PIN, 50)
pwm.start(0)
def set_angle(angle):
    duty_cycle = (angle / 18) + 2.5  # Convert angle to duty cycle
    GPIO.output(SERVO_PIN, True)
    pwm.ChangeDutyCycle(duty_cycle)
    time.sleep(0.5)  # Wait for servo to move
    GPIO.output(SERVO_PIN, False)
    pwm.ChangeDutyCycle(0)
try:
    while True:
        angle = int(input("Enter angle (0-180): "))
        if 0 <= angle <= 180:
            set_angle(angle)
        else:
            print("Invalid angle! Enter a value between 0 and 180.")
except KeyboardInterrupt:
    print("Exiting...")
    pwm.stop()
    GPIO.cleanup()

Das Script erwartet nach dem Start eine manuelle Eingabe eines Winkels um den der Servo dann gedreht wird. Es wäre besser, wenn ich den Winkel bereits mitgeben könnte am das ganze in einem Shell-Scritp ausführen zu können.

Ich kann kein Python, meine Kenntnisse beschränekn sich auf einfache Shell-Scripte. Es sollen auch keine komplizierten Sachen ausgeführt werden. Weiß jemand wie man das ganze so umbaut, dass man den Winkel direkt bei Start des Script mit angeben kann, z. B.

Code:
python3 script.py 180

Grüße
FMS
 
Das ist eine gute Aufgabe für eine KI:
Hallo! Ja, das lässt sich sehr einfach umsetzen, indem man das Python-Script so ändert, dass es den Winkel als Kommandozeilenargument entgegennimmt. Das geht mit dem sys-Modul.


Hier ist dein angepasstes Script:
Code:
import RPi.GPIO as GPIO
import time
import sys

# Set up the GPIO pin for PWM
SERVO_PIN = 17  # GPIO17 (Pin 11)
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)

# Start PWM with 50Hz frequency
pwm = GPIO.PWM(SERVO_PIN, 50)
pwm.start(0)

def set_angle(angle):
    duty_cycle = (angle / 18) + 2.5  # Convert angle to duty cycle
    GPIO.output(SERVO_PIN, True)
    pwm.ChangeDutyCycle(duty_cycle)
    time.sleep(0.5)  # Wait for servo to move
    GPIO.output(SERVO_PIN, False)
    pwm.ChangeDutyCycle(0)

try:
    if len(sys.argv) != 2:
        print("Usage: python3 servo.py <angle>")
        sys.exit(1)

    angle = int(sys.argv[1])
    if 0 <= angle <= 180:
        set_angle(angle)
    else:
        print("Invalid angle! Enter a value between 0 and 180.")

except KeyboardInterrupt:
    print("Exiting...")
finally:
    pwm.stop()
    GPIO.cleanup()
 
  • Gefällt mir
Reaktionen: Tanzmusikus
Danke, geht. Das hatte ich bei Chatgpt versucht, hat aber immer irgendwelche Fehler ausgegegen, die ich nicht beheben konnte.
 
Zurück
Oben