2015-08-19 71 views
1

所以我在Windows上运行Python 3.4脚本,当我运行一个特定的脚本时,我有一个无限循环(而真正的:)我正在使用,但是当我尝试用Ctrl-C退出脚本,它不会退出脚本。它打印键盘中断,仿佛它已经退出,但后来只留下闪烁的光标,不会让我的类型,所以我与红色的X可以退出Windows PowerShell不退出脚本与Ctrl-C

import serial 
import time 
import pyfirmata 
#from pyfirmata import Arduino, util, PWM 

board = pyfirmata.Arduino('COM4', baudrate = 9600, timeout = 5) 
time.sleep(2)  #sleep in units of sec 

it = pyfirmata.util.Iterator(board) 
it.start() 


digital1 = board.get_pin('d:5:p') 
digital2 = board.get_pin('d:6:p') 
digital3 = board.get_pin('d:10:p') 
digital4 = board.get_pin('d:11:p') 
digital = (digital1, digital2, digital3, digital4) 

distObject = 1.5   #start warning at 4 inches away from objects (arbitrary) 
forceGraspL = 0 
forceGraspR = 0 
maxForceL = 60  
maxForceR = 60 
motorMaxForceL = maxForceL/2 
motorMaxForceR = maxForceR/2 

while True: 
    left = 0 
    right = 0  
    leftMid = 0 
    rightMid = 0  
    distPerc = 0 
    MOTORS = (left, right, leftMid, rightMid) 


    if (distObject != 0 and distObject < 4 and forceGraspL == 0 and forceGraspR == 0): 
     left = 0.9 
     distPerc = round(distObject/4.0 * 100) 


    elif (forceGraspL != 0 or forceGraspR !=0): 
     if (forceGraspL < motorMaxForceL and forceGraspR < motorMaxForceR): 
      left = forceGraspL/motorMaxForceL 
      right = forceGraspR/motorMaxForceR  

     elif (forceGraspL < maxForceL and forceGraspR < motorMaxForceR): 
      left = 1 
      leftMid = (forceGraspL - motorMaxForceL)/ motorMaxForceL 
      right = forceGraspR/motorMaxForceR 
     elif (forceGraspL < motorMaxForceL and forceGraspR < maxForceR): 
      left = forceGraspL/motorMaxForceL 
      right = 1 
      rightMid = (forceGraspR - motorMaxForceR)/ motorMaxForceR 
     elif (forceGraspL < maxForceL and forceGraspR < maxForceR): 
      left = 1 
      leftMid = (forceGraspL - motorMaxForceL)/ motorMaxForceL 
      right = 1 
      rightMid = (forceGraspR - motorMaxForceR)/ motorMaxForceR 
     else: 
      left = 1 
      leftMid = 1 
      rightMid = 1 
      right = 1 

     if (distPerc < 100 and distPerc > 0): 
      for pin in range(1, length(digital)): 
       digital[pin].write(MOTORS(pin)) 
      time.sleep(.5) 
      for pin in range(1, length(digital)): 
       digital[pin].write(0) 
      time.sleep(.5) 

     else: 
      for pin in range(1, length(digital)): 
       digital[pin].write(MOTORS(pin)) 

任何建议什么我的脚本可能会造成这个问题,非常感谢。我可以告诉问题出在这个脚本中,因为我尝试了无限循环的其他脚本,并且Ctrl-C适用于这些脚本。

+2

你如何在PowerShell中运行Python脚本? – briantist

+0

我将目录更改为脚本所在的位置以及我可以访问python的位置,然后使用命令> python filename.py运行脚本。我对python相当陌生,并且仅遵循如何学习Python Hard Work网站所述的协议。运行Python脚本的标准方式是什么? – rtmurad

+0

我已经从问题中删除了powershell标记。如果这个问题只发生在你从powershell提示符(我认为不太可能)启动python的时候,那么你可以添加它,但是请编辑你的问题来澄清是否是这种情况。 – briantist

回答

0

我发现贴在源网页的问题的答案:

https://github.com/tino/pyFirmata

这是位于原代码,从该代码序列(我离开了上面的代码中的错误原来,道歉!):

it = pyfirmata.util.Iterator(board) 
it.start() 

但是,你不能摆脱这个代码,否则串行缓冲区将过载。