Anzeige von verschiedenen Objekten

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Kiwi_gamer01
User
Beiträge: 17
Registriert: Freitag 2. November 2018, 21:55

Ich habe hier ein while schleife die mir elaubt meinen Servo pertastatur zusteuern

Code: Alles auswählen

while 1:
    key = (inkey())
    if key in ['1']:
        print ('1 auf 0°')
        pwm.set_pwm(0, 0, servo_min)
    if key in ['4']:
        print ('1 auf 90°')
        pwm.set_pwm(0, 0, servo_mid)
    if key in ['7']:
        print ('1 auf 180°')
        pwm.set_pwm(0, 0, servo_max)
    if key in ['2']:
        print ('2 auf 0°')
        pwm.set_pwm(1, 0, servo_min)
    if key in ['5']:
        print ('2 auf 90°')
        pwm.set_pwm(1, 0, servo_mid)
    if key in ['8']:
        print ('2 auf 180°')
        pwm.set_pwm(1, 0, servo_max)


In der Bash siet das so aus

Code: Alles auswählen

1 auf 0°
1 auf 90°
1 auf 0°
1 auf 90°
1 auf 180°
2 auf 0°
2 auf 90°
2 auf 180°
2 auf 0°
2 auf 90°
2 auf 180°
2 auf 0°
1 auf 0°
2 auf 0°
1 auf 0°
1 auf 180°
2 auf 180°
Ich würde es aber gerne so aussehen lassen

Code: Alles auswählen

(1 auf 0°  / 2 auf 0°  )
(1 auf 0°  / 2 auf 180°)
(1 auf 90° / 2 auf 180°)
und sobal ich eine Taste drücke soll sich dies aktualisiren und den momentanigen stand anzeigen

Danke im Vorraus[/b]
Benutzeravatar
__blackjack__
User
Beiträge: 14325
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Kiwi_gamer01: Das heisst Du musst Dir den momentanen Zustand merken.

Statt ``while 1:`` solltest Du ``while True:`` schreiben, das ist deutlicher. Und was soll der umständliche ``in``-Test mit lauter L isten die jeweils nur *ein* Element enthalten? Da wäre ein ``==`` mit dem einen Element der normale Weg.

Da die Bedingungen einander ausschliessen wären ``elif``\s angebrachter.

Oder man lässt das ganze Konstrukt weg und verwendet ein Wörterbuch das Tastenwerte auf die Werte abbildet durch die sich der ansonsten immer gleiche Code in den ``if``-Zweigen unterscheidet.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Sirius3
User
Beiträge: 18370
Registriert: Sonntag 21. Oktober 2012, 17:20

`while 1` sollte `while True` sein. Wenn man mit `in` eine einelementige Liste testen, kann man gleich == benutzen. Wenn Du den Zustand ausgeben willst, mußt Du den Zustand speichern. Also ein Tastendruck ändert nur den Zustand (z.B. state[1] = 90), dann kannst Du den Zustand bei Änderung komplett anzeigen,
Antworten