我需要一个python脚本的帮助,我正试图适应一个特定的需要
我是Python的新手,我通常使用Perl 我有一个Arduino与一些伺服装置连接,我使用这些伺服装置来控制一个网络摄像头,所讨论的脚本工作得非常完美,伺服装置接收指令并执行它们应该执行的操作:我需要一个python脚本的帮助,我正试图适应一个特定的需要,python,Python,我是Python的新手,我通常使用Perl 我有一个Arduino与一些伺服装置连接,我使用这些伺服装置来控制一个网络摄像头,所讨论的脚本工作得非常完美,伺服装置接收指令并执行它们应该执行的操作: #!/usr/bin/env python import serial usbport = '/dev/ttyACM0' # Set up serial baud rate ser = serial.Serial(usbport, 9600, timeout
#!/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"
我已经将脚本转换为接受命令行输入,但是程序似乎无法工作。谁能找出我做错了什么,这是我的说法:
#!/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)
我知道脚本工作正常,就好像我告诉它做一个181,我得到的错误是角度超出了范围,所以我完全不明白为什么信息没有传递给串行/arduino
非常感谢您的帮助,并为冗长的邮件感到抱歉
吉尔伯特为什么要改编原剧本?只要用这个:
import servo
servo.move(int(argv[1]), int(argv[2]))
我不确定在将代码粘贴到stackoverflow中时是否发生了这种情况,但缩进在多个地方都有缺陷。也请检查此项:)函数定义后的缩进看起来是错误的。应该是:
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
def移动(伺服、角度):
''将指定的伺服移动到提供的角度。
论据:
伺服
要命令的伺服编号,1-4之间的整数
角
所需的伺服角度,0到180之间的整数
(例如)>>>>伺服移动(2,90)
... # “将伺服2移动到90度”
如果(0旁边,在该部分:
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
您也应该indend sys.exit(2)。因此,程序在获取参数后立即退出。您的缩进基本上是错误的 请参阅此代码段:
try:
servo = int(sys.argv[1])
angle = int(sys.argv[2])
except IndexError:
print ('a servo and angle are required')
sys.exit(2)
sys.exit(2)
调用总是被执行!所以程序什么也不做。Hi,缩进是错误的,因为我在原始文件中输入代码的方式是正确的。那么,请您发布正确的代码,以便我们可以查找错误吗?我已经将代码放在一个文件中:http:www.sharpnet.co.uk/tmp/servo.py谢谢。(附言:我没有收到回复是正常的吗?)抱歉上面的帖子,愚蠢的网站将回复视为“添加评论”(?!)我已经将代码放在一个文件中:http:www.sharpnet.co.uk/tmp/servo.txt谢谢。(附言:我没有收到回复是正常的吗?)我不知道这个网站是怎么工作的,我从来没有收到过通知,似乎人们都太忙了,没有时间去关心这个问题?嗨,缩进是错误的,因为我输入代码的方式,在原始文件上,它是正确的。嗨,缩进是错误的,因为我输入代码的方式,在原始文件上,它是正确的,然后请修复缩进f问题中的代码。在Python缩进问题上,如果我们没有正确的代码,我们将无法帮助您。我已经将代码放在了一个文件中:http:www.sharpnet.co.uk/tmp/servo.txt谢谢。(PS.这正常吗?我没有收到回复通知?)您好,谢谢您的帮助,是的,这很有意义。尽管您如何在不进入python界面的情况下从CLI调用它。另外,您应该如何在伺服之后键入伺服和角度。move(int(argv[1]),int(argv[2])??
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
try:
servo = int(sys.argv[1])
angle = int(sys.argv[2])
except IndexError:
print ('a servo and angle are required')
sys.exit(2)