【问题标题】:Python pyserialPython pyserial
【发布时间】:2019-05-08 06:58:31
【问题描述】:

我正在从 python 2.7 anaconda spyder 64 位触发一个名为 olfactometer 的设备。该嗅觉计中有八个电磁 TTL 阀。如果我想切换那个阀门的状态,我只需要编写下面提到的代码。

import serial
import time

port = serial.Serial("COM3", 19200, timeout=0.5)
#turn on port 2, sleep 2 seconds, turn off port 2
port.write(b"\nF2\r")  # if opened then close port 2
time.sleep(2.0)
port.write(b"\nF2\r")  # if closed then open port 2


#close the port
port.close()

我想知道,是否可以为端口 2 指定 0 或 1 的特定值?

例如

if 'e' in keypress: 
    # it must open the port 2
if 'i' in keypress:
    # it must close the port 2

我应该怎么做才能以上述方式进行测试? 先感谢您! - 拉维

【问题讨论】:

  • 您的命令port.write(b'\nF2\r') 似乎只是切换了螺线管,所以我建议可能在开始时提示用户状态是什么,并跟踪它被切换了多少次,所以如果用户要求打开它并且它已经打开,然后它不会关闭。

标签: python python-2.7 spyder pyserial


【解决方案1】:

捕获输入的一种方法是使用raw_input 内置函数(Python3 中的input)。例如

port = serial.Serial("COM3", 19200, timeout=0.5)

prompt = 'Press "e" to open, "i" to close, and "q" to quit: '
keypress = raw_input(prompt)
while keypress != 'q':
    if keypress == 'e':
        port.write(b"\nF2\r")  # if closed then open port 2
        print('Opened')
    elif keypress == 'i':
        port.write(b"\nF2\r")  # if opened then close port 2
        print('Closed')
    # prompt again    
    keypress = raw_input(prompt)

port.close()

【讨论】:

  • 注意,有很多高级库可以在 CLI 中处理用户提示。例如,prompt-toolkit
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2018-09-01
  • 1970-01-01
  • 2014-04-29
  • 2012-06-29
  • 2017-12-05
相关资源
最近更新 更多