@Blendi: Anmerkungen zum Quelltext:
Eingerückt wird per Konvention vier Leerzeichen pro Ebene, nicht zwei.
``as`` beim importieren ist zum umbenennen gedacht, `GPIO` wird aber gar nicht umbenannt.
Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Also `SERVO_PIN` statt `servoPIN`.
Verwende in Namen keine kryptischen Abkürzungen. Einbuchstabige Namen sind selten ausreichend um dem Leser die Bedeutung des Wertes dahinter zu vermitteln.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
`GPIO.cleanup()` sollte nicht nur aufgerufen werden wenn das Programm durch Strg-C abgebrochen wird, sondern grundsätzlich am Ende des Programmablaufs. Das gilt hier auch für das anhalten des Servomotors.
Das in dem Kommentar noch mal die Pin-Nummer steht ist keine gute Idee. Dafür hat man ja die Konstante definiert. Wenn man die mal ändert, sollte man nicht daran denken müssen an anderer Stelle im Programm Kommentare anpassen zu müssen.
Zwischenstand (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python3
import time
from RPi import GPIO
SERVO_PIN = 18
def main():
try:
GPIO.setmode(GPIO.BCM)
GPIO.setup(SERVO_PIN, GPIO.OUT)
servo = GPIO.PWM(SERVO_PIN, 50)
servo.start(2.5)
while True:
servo.ChangeDutyCycle(7.0)
time.sleep(0.5)
servo.ChangeDutyCycle(0)
servo.stop()
except KeyboardInterrupt:
pass
finally:
servo.stop()
GPIO.cleanup()
if __name__ == "__main__":
main()
Was ist das für ein Sensor? Wie fragt man den ab? Wo genau liegt das Problem dabei?
Ich würde übrigens empfehlen von `RPi.GPIO` auf `gpiozero` umzusteigen. Das ist die modernere und bessere API.