我在Windows 10上運行pyserial(3.1.1)與Python 2.7有Arduino的納米
更新打開COM端口時,使用睡眠與pyserial - 得到了同樣的問題上是Xubuntu 16運行,以及Windows 。
我通過串行接口通過串口寫入arduino nano。
我正在寫一個簡單的字符串(例如'2+')並讀取arduino中的輸出。如果我保持第一次睡眠。在打開com端口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 = "";
}
}
}
您是否試過在'ser.write('2 +')'之後在您的python代碼中放置'ser.flush()'? – ChatterOne
感謝您的幫助。我嘗試了ser.flush(),它不會改變任何東西 - 我仍然需要睡眠出於某種原因。 – onemorecupofcoffee