При использовании Python для управления Arduino, как вы структурируете свой код, чтобы постоянно проверять и выполнять кPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 При использовании Python для управления Arduino, как вы структурируете свой код, чтобы постоянно проверять и выполнять к

Сообщение Anonymous »

Я пытаюсь подключиться к Arduino через Python, чтобы использовать его в качестве аппаратного интерфейса для датчиков и оборудования. Мне трудно понять, как структурировать код, чтобы он постоянно проходил цикл, считывал каждый датчик и проверял, была ли нажата кнопка для отправки команды... если это вообще лучший способ сделать это. Я новичок в Python, и мне действительно нужно самое простое решение (логическое/понятное, не обязательно самое чистое).
Приведенный ниже код позволяет перемещать шаговый двигатель в ту или иную сторону через последовательную связь. на основе стрелки влево или вправо на клавиатуре или соответствующих кнопок в tkinter. Сейчас я пытаюсь прочитать аналоговый вывод от Arduino через последовательное соединение, что и делает приведенный ниже код... один раз. Мне нужно, чтобы он постоянно выводил показания, сохраняя при этом очень высокую частоту обновления «проверки» другого существующего кода, чтобы увидеть, была ли нажата кнопка между показаниями датчика.
Желаемое Результатом является цикл: была ли нажата кнопка A?, была ли нажата кнопка B?, сообщить об аналоговом контакте....повторить. Но со скоростью, которая практически не мешает возможности относительно быстрого управления шаговыми двигателями или заваливать пользователя потоком обновлений датчиков. В идеале код должен проверять все постоянно и без задержек, но, исходя из программирования Arduino, где все должно быть в последовательных циклах void(), я не уверен, что это вообще возможно с Python. Я думал, что помещение всего кода в цикл while True: может сработать, но он просто сообщает аналог только один раз в начале кода.
Спасибо!

Код: Выделить всё

import serial
import time
import tkinter
import customtkinter
from PIL import ImageTk, Image
from tkinter import ttk
from pynput import keyboard
import tk_tools

step = 0
#ser = serial.Serial('COM10', 9600)

while True:

def quit_button():
global tkTop
ser.write(bytes('K', 'UTF-8'))
tkTop.destroy()

def on_button():
varLabel.set("LED ON ")
ser.write(bytes('H', 'UTF-8'))

def off_button():
varLabel.set("LED OFF")
ser.write(bytes('K', 'UTF-8'))

def l_button():
varLabel.set("Rotate Left")
ser.write(bytes('L', 'UTF-8'))
global step
step = step + 1
progressbar.step(step)
p.set_value(step)
print("Step",step)
#varLabel.set("LED OFF")
ser.write(bytes('K', 'UTF-8'))

def r_button():
varLabel.set("Rotate Right")
ser.write(bytes('R', 'UTF-8'))
global step
step =  step - 1
progressbar.step(step)
p.set_value(step)
print("Step",step)
#varLabel.set("LED OFF")
ser.write(bytes('K', 'UTF-8'))

def on_press(key):
if key == keyboard.Key.right:
r_button()
if key == keyboard.Key.left:
l_button()

listener = keyboard.Listener(
on_press=on_press)
listener.start()

#change the COM port below
ser = serial.Serial('COM10', 9600)
print("Reset Arduino")
time.sleep(2)
ser.write(bytes('K', 'UTF-8'))

tkTop = tkinter.Tk()
tkTop.geometry('400x400') #500 x 500 window
tkTop.title("LED control") #name in title bar
# Create a parent frame
parent_frame = tkinter.Frame(tkTop)
parent_frame.pack()

#define button images
upimage = ImageTk.PhotoImage(Image.open('voltup.png').resize((60,60)))
downimage = ImageTk.PhotoImage(Image.open('voltdown.png').resize((60,60)))

#label to display the status
varLabel = tkinter.IntVar()
tkLabel = tkinter.Label(textvariable=varLabel, )
varLabel.set("LED STATUS")
tkLabel.pack()

#label for HV controls
HVlabel = tkinter.Label(text= "HV Control")
HVlabel.place(x=300, y=40),

#button1 - ON
button1 = tkinter.IntVar()
button1state = tkinter.Button(tkTop,
text="ON",
command=on_button,
height = 4,
width = 8,
bg = 'green'

)
button1state.pack(side='top', ipadx=10, padx=10, pady=15)

#button2 - OFF
button2 = tkinter.IntVar()
button2state = tkinter.Button(tkTop,
text="OFF",
command=off_button,
height = 4,
width = 8,
)
button2state.pack(side='top', ipadx=10, padx=10, pady=15)

#button3 - Rotate Right
button3 = tkinter.IntVar()
button3state = tkinter.Button(tkTop,
text="Rotate Right",
command=r_button,
height = 60,
width = 60,
image = upimage
)
button3state.place(x=300, y=60)

#button4 - Rotate Left
button4 = tkinter.IntVar()
button4state = tkinter.Button(tkTop,
text="Rotate Left",
command=l_button,
height = 60,
width = 60,
image = downimage
)
button4state.place(x=300, y=180)

#Quit button
tkButtonQuit = tkinter.Button(
tkTop,
text="Quit",
command=quit_button,
height = 4,
width = 8,
)

p = tk_tools.RotaryScale(tkTop, max_value = 60, unit = "step")
p.place(x=300, y =300)
#print("step",step)
tkTop.title("Progress Bar in Tk")
progressbar = ttk.Progressbar(maximum=1500)
progressbar.place(x=400, y=60, width=160)

value = ser.readline()
print(value)
time.sleep(1)

tkButtonQuit.pack(side='top', ipadx=10, padx=10, pady=15)
tkinter.mainloop()
повторно

Подробнее здесь: https://stackoverflow.com/questions/791 ... e-to-conti
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»