[英]Python Serial.write doesn't work when in a function
我正在尝试写入Start
function 中的串行端口,以便由某些 Arduino 代码接收。 当Calculate
function 也包含serial.write
命令时,就会出现问题。 function 正在做它应该做的事情,但实际上并没有写入串行端口。 (我在编码方面很新,以供参考)
这是我的 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')
解决了这个问题。 归功于杰森哈珀。 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.