Da du ja zum inzwischen 5ten oder so mal konsequent nicht mitteilst, welche Werte du vom Server enthaelst, kann man da auch nur mit den Achseln zucken.
Das du zweimal die gleiche Bedingung hast (data == winkel) fuehrt natuerlich dazu, dass du jeweils ServoUp und ServoDown aufrufen wuerdest. Wenn du sie denn aufrufen wuerdest. Was du nicht tust. Du uebergibst ihnen auch kein Argument. Und wenn der Winkel 45 waere , wuerden auch beide Funktionen etwas machen, und zu jeweils unterschiedlichen Ergebnissen kommen.
Wenn ich da jeweils 45 Grad als gewuenschten Winkel angebe, dann kommen da einmal 5% DC raus (stimmt), und einmal 0% (stimmt offensichtlich nicht). Es ist auch ueberfluessig, zwei Funktionen zu haben. Das ist wie schon gesagt eine einfache Geradengleichung aus der 9ten Klasse.
Wenn der Winkel von -45 bis +45 grad EINGABE geht (ob das so ist - keine Ahnung. Du lieferst ja nicht wirklich belastbare Aussagen zu solchen Dingen), und man von einem Servo-Winkel von 180 Grad ausgeht, von dem du dann nur 90 Grad nutzen willst, dann ist die Formel fuer den Duty-Cyle in ms ein simples:
1.5ms + (winkel / 180 * 2ms)
Denn der Mittelpunkt liegt bei 1.5 ms, und die vollen 180 Grad spannen 2ms. Kann man also nachrechnen:
Code: Alles auswählen
>>> winkel = -45
>>> 1.5 + (winkel / 180.0 * 2)
1.0
>>> winkel = 45
>>> 1.5 + (winkel / 180.0 * 2)
2.0
>>> winkel = 0
>>> 1.5 + (winkel / 180.0 * 2)
1.5
Weil das aber in ms und nicht in Prozent ist, wie die API des sehr schlechten RPI.GPIO PWM das verlangt, muss man das Ergebnis noch mal 5 nehmen.
So. Aber fuer mich ist hier EOD. Jedes einezelne Fitzelchen Information hier aus der Nase pulen zu muessen ist mir zu muehsam. Und da du recht offensichtlich wirklich so gut wie gar kein Python beherrschst, musst du dir das entweder erstmal raufschaffen, oder jemanden finden, der das fuer dich macht. Vor Ort. Mit Zugriff auf all die Informationen und die Hardware etc.