【发布时间】:2020-07-04 19:54:17
【问题描述】:
背景
我想通过 Python Gui (PyQt) 组件“QDial”控制伺服电机。希望伺服电机应与 GUI 中的拨盘“同时”旋转。
下面是相关代码:
阿杜诺
void loop(){
// while(!Serial){} //
if(Serial.available()>0){
posOrder = Serial.readString(); // get Angle-Value from Serial
// write to Serial Monitor
Serial.print("Set Servo Position to: ");
Serial.println(posOrder);
int angle = posOrder.toInt();
myservo.write(angle);
Serial.flush();
delay(30);
}
}
QDial
## ....some code...
self.dial.valueChanged.connect(self.writeToSerial)
## ...
def writeToSerial(self):
# create serial connection
self.ser = serial.Serial(self.portPath, timeout=None, baudrate=self.baudRate)
self.posAngle = self.dial.value() # get value
self.ser.write(str(self.posAngle).encode()) # write to Serial
问题
当我点击表盘的勾号时,它工作得很好。点击后dial.valueChanged.connect(self.writeToSerial)函数会调用writeToSerial()函数,它有足够的时间将拨号值写入Serial。串口监视器显示:
Set Servo Position to: 65
Set Servo Position to: 30
Set Servo Position to: 170
但是当我按住鼠标左键旋转表盘时,函数dial.valueChanged.connect(self.writeToSerial)会在每一个小步骤中被调用。也就是说writeToSerial()函数会被疯狂频繁调用,serial.write()函数不能及时写入数据。串行监视器显示如下:
Set Servo Position to: 65666770717273747677
Set Servo Position to: 99100104108109114116119122126128130131133
Set Servo Position to: 1411421431441451461481501521541561
问题
是否只有松开鼠标左键才能触发函数dial.valueChanged.connect(self.writeToSerial)?或者有什么其他想法可以解决这个问题?
【问题讨论】:
标签: python arduino pyqt pyqt5 pyserial