"List out of range oder so" ist keine gute Fehlerbeschreibung. Bitte in Zukunft den gesamten Fehler posten.
Im konkreten Fall ist es allerdings nicht schwer zu erraten, was da falsch laeuft: das Programm erwartet *ZWEI* Argumente, mot und dir. Diese muessen bei Aufruf uebergeben werden. Also sowas wie
Code: Alles auswählen
python schlechtes-aus-buch-abgetipptes-skript.py mot-argument richtungs-argument
Und der Name den ich dem Skript gegeben habe, kommt nicht von ungefaehr. Wenn das stellvertretend fuer die Qualitaet des Codes im allgemeinen ist, der da im Buch steht, dann gute Nacht. Unbenutze Importe, Code-Dopplungen, nutzlose Pin-Definitionen.
Eine leicht aufgeraeumte Version:
Code: Alles auswählen
import sys
import pigpio
def read_pos(filename):
with open(filename) as inf:
return int(inf.read())
def write_pos(filename, pos):
with open(filename, "w") as outf:
outf.write("{}".format(pos))
def main():
mot = int(sys.argv[1])
dir = int(dir) if sys.argv[2] != "home" else None
filename = "mot{}.txt".format(mot)
pi = pigpio.pi()
if dir is None:
pi.set_servo_pulsewidth(int(mot), 1500)
write_pos(filename, 1500)
else:
current_pos = read_pos(filename)
new_pos = current_pos + dir
if 1000 <= new_pos <= 2000:
pi.set_servo_pulsewidth(mot, new_pos)
write_pos(filename, new_pos)
else:
print("Endlage erreicht!")
print(new_pos)
sys.exit()
if __name__ == '__main__':
main()
Geil ist das Prinzip natuerlich immer noch nicht, aber schonmal etwas besser. Laut Dokumentation braucht man das definieren von mot1 und mot2 nicht, sollte man das doch benoetigen, dann sollte man stattdessen das uebergebene mot als output definieren, statt irgendwelche Pins mit denen man dann eh nix macht.