2016-03-08 44 views
1

我在pySerial中挣扎。简言之......当在Python Shell中执行下面的代码的伟大工程......pySerial非常奇怪的行为...代码在shell中执行但在脚本中不执行

>>> import serial 
>>> s=serial.Serial("COM5", 9600) 
>>> while(1): 
     s.write("#") 
     s.readline() 

制造低于输出在shell:

1L 
'56.73\r\n' 
1L 
'56.73\r\n' 

当同样的代码写在脚本会说“readSerial.py”脚本将不会传输触发串行设备传输数据的hashtag,或者不会收到回复的数据。

我正在使用pySerial 3,但注意到与2.7相同的行为。在Win10上使用Python 2.7.10 64位。但是在/ dev/ttyACM0上也注意到了Raspberry Pi上的这种行为。我真的很想解决这个问题。我不是那种在Python中经验丰富的人,所以这可能是一个疏忽。

检查硬件并进行双重检查。

感谢,

KK


谢谢,但我确实知道如何从蟒纹数据。这个问题真的与pySerial有关。这里是完整的代码,请不要在注释掉的代码中加入错误。这些无关紧要。

#from numpy import array 
#import matplotlib.animation as animation 
import time 
import serial as s 

#data = array([]) 

Arduino = s.Serial("COM5", 9600) 
i = 0 

while (1): 
    try: 
     Arduino.write("#") 
     time.sleep(.1) 
     inString = Arduino.readline() 
     data = float(inString) 

     print i, ":", data 
     i += 1 

     time.sleep(1) 

    except KeyboardInterrupt: 
     break 

Arduino.close() 

但是像这样说这是行不通的。据我可以告诉readline()函数不会返回。而且,通过设置tx超时来让它返回是没有任何意义的。添加到神秘的;当代码被调试时(即阶梯式低谷)它确实有效。

由于提前,

KK

+2

我看不出该代码如何生成_any_ shell输出。它没有打印语句。 –

+0

@John我认为他正在谈论Pi上的输出,这可能与COM5相连(我知道至少它是如何与Arduino一起工作的)。 @K你到目前为止尝试过什么?快速谷歌搜索显示了类似问题的很多结果,例如http://stackoverflow.com/questions/2301127/pyserial-app-runs-in-shell-by-not-py-script – whrrgarbl

+0

即便如此,唯一的输出是's.write(“#”)',我不明白这是如何转化为预期的产出。 –

回答

0

FAQ

实例工作在serial.tools.miniterm但不是在脚本。

RTS和DTR线在端口打开时切换。这可能是 在连接的设备上导致一些处理或重置。在这样一个 情况下,紧接着的write()调用可能不会被 设备接收到。

A 延迟打开端口之后,在第一次写入()之前,推荐在这种情况下使用 。例如。一个time.sleep(1)

+0

我读了常见问题解答。不,不是,情况并非如此......但要进一步缩小问题的范围。我尝试在Arduino的FTDI USB到串行转换器上桥接Tx和Rx线 - >该脚本的工作原理类似于魅力,但它在COM4处编入索引。当我使用相同的软件和Mega2560(在COM4上索引)时,剧本就像一个魅力! –

+0

哇这是我遇到过的最难的论坛软件,无法编辑我以前的帖子。为了实现这一点:实际上再次读取您的答案并在创建序列对象之后摆弄睡眠时间,问题就解决了。我有一些意大利Arduino原创的东西,所有的作品都很有魅力,甚至很短的延迟。不幸的是,我还有一些廉价的中国淘汰赛(即Infiduino Uno R3),这些需要延迟2秒。 –

+0

您可以编辑*评论* 5分钟。之后,您可以随时修改复制/删除/粘贴。您可以编辑*问题*和*答案*没有时间限制。 –