Я пытаюсь создать графический интерфейс Python, который заставляет Arduino начать передачу при нажатии 1 и остановить передачу при нажатии чего-либо еще (скажем, 0).Код, который я написал (ниже), отлично работает для первого запуска и остановки, но не работает в следующий раз, когда я нажимаю кнопку start.Мой код Python:
import tkinter as tk
from time import time
import serial
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
print (p)
if "Serial Device" in str(p):
print("Connect here!")
wor=str(p)
w=wor[:4]
print(w)
ser = serial.Serial(w, 9600)
ser.write('0'.encode())
def start1():
ser.write('1'.encode())
global count_flag1
count_flag1 = True
count = str(ser.readline())
while True:
if count_flag1 == False:
break
s=count.split(",")
p=s[0].split("'")
s[0]=p[1]
# put the count value into the label
label1['text'] = "A0:"+s[0]+" A1:"+s[1]+" A2:"+s[2]
# wait for 0.1 seconds
#time.sleep(1)
# needed with time.sleep()
root.update()
# increase count
count = str(ser.readline())
def stop1():
global count_flag1
count_flag1 = False
ser.write('0'.encode())
# create a Tkinter window
root = tk.Tk()
# this will be a global flag
count_flag1 = True
# create needed widgets
label1 = tk.Label(root, text='l1')
btn_start1 = tk.Button(root, text='start all', command=start1)
btn_stop1 = tk.Button(root, text='stop all', command=stop1)
# use a grid to place the widgets
label1.grid(row=0, column=0, columnspan=2)
btn_start1.grid(row=1, column=0, padx=5, pady=5)
btn_stop1.grid(row=1, column=1, padx=5)
Мой код Arduino:
int oldv;
int newv;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0){
newv=(Serial.read());
if(newv=='1'){
//newv=1;
Serial.print(analogRead(A0));
Serial.print(",");
Serial.print(analogRead(A1));
Serial.print(",");
Serial.print(analogRead(A2));
Serial.println(",");
oldv=1;}
else{
oldv=0;
}
delay(500);
}
else{
newv=oldv;
if(newv==1){
Serial.print(analogRead(A0));
Serial.print(",");
Serial.print(analogRead(A1));
Serial.print(",");
Serial.print(analogRead(A2));
Serial.println(",");
oldv=1;}
else{
oldv=0;
}
delay(500);
}
}