【发布时间】:2016-08-15 07:00:03
【问题描述】:
我正在使用 python 2.7 在 Windows 10 上运行 pyserial (3.1.1)
更新 - 在 Xubuntu 16 和 Windows 上运行相同的问题。
我正在通过 USB/串行接口通过串行向 arduino nano 写入数据。
我正在编写一个简单的字符串(例如“2+”)并读取 arduino 中的输出。如果我在打开 com 端口后将 first time.sleep 保持在 2 秒,它就可以工作。如果我将其更改为 1 或将其删除,arduino 似乎会收到不同的字符/编码并且它不起作用。
理想情况下,我不想要任何睡眠,以便更快地工作。我做错了什么还是有更好的方法来做到这一点,以便我可以消除睡眠或至少减少睡眠?
Python 代码:
import sys, getopt
import time
import serial
ser = serial.Serial(
port='COM3',
baudrate=9600,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.SEVENBITS
)
time.sleep(1) #change this to 2 and it works
ser.write('2+')
out = ''
time.sleep(1)
while ser.inWaiting() > 0:
out += ser.read(1)
if out != '':
print ">>" + out
else:
print ">> nothing!"
time.sleep(1)
ser.close()
Arduino 代码(我对 ASCII 字符数也有一些小问题 - 我认为这是字节的签名,但这是我目前最少的问题)
String inString = "";
int pinNumber = 0;
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
void loop() {
// expected input: 1+ //to change the digital pin to on
// expected input: 2- //to change the digital pin to off
while (Serial.available() > 0) {
//char inChar = char(int(Serial.read()));
char inChar = Serial.read();
Serial.println(inChar);
if (isDigit(inChar)) {
inString += inChar;
Serial.println(inString);
}
else {
pinNumber = inString.toInt();
Serial.println(pinNumber);
pinMode(pinNumber, OUTPUT);
if (inChar == -85) {
Serial.println("set high");
digitalWrite(pinNumber, HIGH);
} else if (inChar == -83) {
Serial.println("set low");
digitalWrite(pinNumber, LOW);
} else {
Serial.println("NO MATCH!!!");
}
inString = "";
}
}
}
【问题讨论】:
-
你有没有试过在你的 python 代码中紧跟
ser.write('2+')之后添加一个ser.flush()? -
感谢您的帮助。我尝试了 ser.flush() 并没有改变任何东西 - 由于某种原因我仍然需要睡眠。