rotate-servo.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/env python3
  2. from sys import exit, argv
  3. from time import sleep
  4. from os import path
  5. args = argv
  6. if len(args) != 3:
  7. print("Args: <servo(x/y)> <offset (10,+10,-10)>")
  8. exit(1)
  9. servo_arg = args[1]
  10. offset = int(args[2])
  11. servo = -1
  12. if servo_arg == "x" or servo_arg == "X":
  13. servo = 1
  14. if servo_arg == "y" or servo_arg == "Y":
  15. servo = 0
  16. if servo == -1:
  17. print("Servo invalido")
  18. exit(2)
  19. filename="/tmp/servo_%s" % servo
  20. old_val = ""
  21. if path.isfile(filename):
  22. valfile = open(filename, "r+")
  23. old_val = valfile.read()
  24. else:
  25. valfile = open(filename, "w")
  26. try:
  27. old_val=int(old_val)
  28. except:
  29. print("Can't convert. Defaulting")
  30. old_val = 1500
  31. print(old_val)
  32. valfile.seek(0)
  33. new_val = old_val+offset
  34. new_val = min( max( new_val, 900 ), 1750 )
  35. print(new_val, file=valfile)
  36. print(new_val)
  37. steps = int(abs(new_val-old_val)/10)
  38. if steps == 0:
  39. exit(0)
  40. delta = int(offset/steps)
  41. if delta > 0:
  42. delta="+%d" % delta
  43. servoblaster = open("/dev/servoblaster","w")
  44. for i in range(0,steps):
  45. #print("%d=%sus" % ( servo, delta ))
  46. print("%d=%sus" % ( servo, delta ), file=servoblaster)
  47. servoblaster.flush()
  48. sleep(0.06)