Я новичок в Python, обычно использую Perl.
У меня есть Arduino, подключенный к некоторым сервоприводам, которые я использую для управления веб-камерой, рассматриваемый скрипт отлично работает, сервоприводы получают инструкции и делают то, что должны:
#!/usr/bin/env python
import serial
usbport = '/dev/ttyACM0'
# Set up serial baud rate
ser = serial.Serial(usbport, 9600, timeout=1)
def move(servo, angle):
'''Moves the specified servo to the supplied angle.
Arguments:
servo
the servo number to command, an integer from 1-4
angle
the desired servo angle, an integer from 0 to 180
(e.g.) >>> servo.move(2, 90)
... # "move servo #2 to 90 degrees"'''
if (0 <= angle <= 180):
ser.write(chr(255))
ser.write(chr(servo))
ser.write(chr(angle))
else:
print "Servo angle must be an integer between 0 and 180.\n"
В основном команда для приведенного выше сценария:
python
import servo
servo.move(1, 180)
Я преобразовал сценарий для приема ввода из командной строки, однако программа, похоже, не работает. Может кто-нибудь выяснить, что я делаю не так, вот моя версия:
#!/usr/bin/env python
import serial
import sys
try:
servo = int(sys.argv[1])
angle = int(sys.argv[2])
except IndexError:
print ('a servo and angle are required')
sys.exit(2)
# Set up serial baud rate
usbport = '/dev/ttyACM0'
ser = serial.Serial(usbport, 9600, timeout=1)
def move(servo, angle):
'''Moves the specified servo to the supplied angle.
Arguments:
servo
the servo number to command, an integer from 1-4
angle
the desired servo angle, an integer from 0 to 180
(e.g.) >>> servo.move(2, 90)
... # "move servo #2 to 90 degrees"'''
if (0 <= angle <= 180):
ser.write(chr(255))
ser.write(chr(servo))
ser.write(chr(angle))
else:
print "Servo angle must be an integer between 0 and 180. You typed:"
print servo
print angle
move(servo, angle)
В основном команда для приведенного выше сценария:
servo.py 1 180
Я знаю, что скрипт работает должным образом, как будто я говорю ему сделать 1 181, я получаю ошибку, что угол выходит за пределы диапазона, поэтому я полностью озадачен, почему информация не передается в сериал /arduino.
Большое спасибо за любую помощь и извините за длинную почту.
Gilbert