我正在尝试写入Start
函数中的串行端口,以供某些Arduino代码接收。当Calculate
函数还包含serial.write
命令时,就会出现问题。函数正在执行它应该执行的操作,但实际上并没有写入串行端口。
(我对编码非常陌生,仅供参考)
以下是我的python代码:
import tkinter as tk
import serial
import time
serialPortController = serial.Serial('COM7',38400)
time.sleep(3)
controllerStatus = 0
netTankFlow = 0
currentTankHeight = 50.0
#Calculation Function__________________________________________________________________________________
def Calculate():
global currentTankHeight
if currentTankHeight == 0.0:
serialPortController.write(b'10')
elif currentTankHeight <= 20:
serialPortController.write(b'11')
elif currentTankHeight <= 40:
serialPortController.write(b'12')
elif currentTankHeight <= 60:
serialPortController.write(b'13')
elif currentTankHeight <= 80:
serialPortController.write(b'14')
else:
serialPortController.write(b'15')
tankControllerWindow.update()
tankControllerWindow.after(500, Calculate)
#Start & Quit Functions________________________________________________________________________________
def Start():
global controllerStatus
startButton.place_forget()
controllerStatusLabel["text"] = "Controller Status: Active"
controllerStatusLabel["bg"] = 'lawngreen'
controllerStatusLabel["fg"] = 'black'
controllerStatus = 1
Calculate()
serialPortController.write(b'41')
def Exit():
quit()
#GUI Window Parameters & Variables_____________________________________________________________________
tankControllerWindow = tk.Tk()
windowWidth = 405
windowHeight = 255
tankControllerWindow.title('Tank Control Interface')
tankControllerWindow.minsize(windowWidth,windowHeight)
tankControllerWindow.configure(bg='whitesmoke')
guiXposition1 = 15
guiXposition4 = guiXposition1 + 300
guiYposition1 = 15
#Start and Exit Buttons________________________________________________________________________________
startButton = tk.Button(text="Start",command=Start)
startButton.place(x=guiXposition1,y=guiYposition1)
controllerStatusLabel = tk.Label(text="Controller Status: Inactive",
bg='darkred',fg='white',width=20,justify='left')
controllerStatusLabel.place(x=guiXposition1+40,y=guiYposition1+2)
exitButton = tk.Button(text="Exit",command=Exit)
exitButton.place(x=guiXposition4+5,y=guiYposition1)
tankControllerWindow.mainloop()
还有用于测试它的Arduino代码
byte input;
void setup() {
Serial.begin(38400);
pinMode(led, OUTPUT);
digitalWrite(led, HIGH);
}
void loop() {
if (Serial.available() > 0) {
input = Serial.parseInt();
}
if (input == 41) {
Command();
}
}
void Command(){
digitalWrite(led, LOW);
}
将
.write(b'41')
更改为.write(b'\n41')
解决了问题。 归功于贾森哈珀。谢谢相关问题 更多 >
编程相关推荐