我有2个测试串行通信的程序,一个简单的arduino程序,它回显串行端口上的任何内容,以及一个写入串口并打印回复的python程序。
我有一个问题,每当我上传arduino程序并尝试在我上传后第一次运行python时,它会被卡在print ser.readline()
上,我假设有某些原因python没有写入串口。我将不得不退出python程序并再次运行它以获得arduino的回复。该程序将继续工作,直到我重新上传arduino然后再次python将不会在第一次运行。此外,如果我在运行python程序之前打开和关闭串行监视器,它将在第一次运行时工作。有谁知道这是什么问题?这是在Ubuntu上。
Arduino的
String str;
void setup() {
// Turn the Serial Protocol ON
Serial.begin(115200);
}
void loop() {
if (Serial.available()) {
str = Serial.readStringUntil('\n'); // Read the serial input
Serial.println(str); // sends ascii code
}
}
的Python
import serial
ser = serial.Serial('/dev/ttyACM1', 115200)
for i in range(0,4):
str = "test string\n"
ser.write(str)
print ser.readline()
答案 0 :(得分:0)
默认情况下,python Serial可能会在默认情况下阻止尝试删除超时:
int? totalClientURL = 0;
int? totalHgURL = 0;
foreach (var d in results5)
{
int col = 6;
worksheet.Cells[row, col++].Value = d.employees_range;
worksheet.Cells[row, col].StyleName = styleData;
worksheet.Cells[row, col++].Value = d.client_url_count;
totalClientURL += d.client_url_count;
worksheet.Cells[row, col].StyleName = styleData;
worksheet.Cells[row, col++].Value = d.url_count;
totalHgURL += d.url_count;
row++;
ExportCount++;
if (ExportCount % 100 == 0)
Worker.ReportProgress(20, ExportCount + " rows exported of " + TotalRows);
}
int TotalCol = 6;
worksheet.Cells[row, TotalCol++].Value = "Total";
worksheet.Cells[row, TotalCol].StyleName = styleData;
worksheet.Cells[row, TotalCol++].Value = totalClientURL;
worksheet.Cells[row, TotalCol].StyleName = styleData;
worksheet.Cells[row, TotalCol++].Value = totalHgURL;
答案 1 :(得分:0)
我添加了
time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)
打开串口后问题得到解决。