[英]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.