• 1000 Переменная angl содержит целое число от 0 до 180, представляющее состояние вращения.
Пока все хорошо, но я не могу полностью понять, как представить это на холсте с помощью Tkinter. Я пробовал разные вещи, но я немного очистил код для этого потока.
Цель состоит в том, чтобы иметь точку (1000, 1000) на холсте в качестве центра и перемещать зеленый кружок с координатами (x, y) масштабируется соответствующим образом.
Вот пример показаний с терминала
УГОЛ: 174
РАССТОЯНИЕ: 208,11
X: -72.99856014995218
Y: -194,88710146142
УГОЛ: 175
РАССТОЯНИЕ: 161,67
X: 96,75694368800949
Y: -129,51943000243384
УГОЛ: 176
РАССТОЯНИЕ: 100,88
X: 100,627116 * * Y: 7,13748557578522
УГОЛ: 177
РАССТОЯНИЕ: 43,61
X: 20,907170903220738
Y: 38,27169064496002
import serial
import re
import math
import tkinter
import time
w_width = 2000
w_height = 1000
def create_animation_window():
window = tkinter.Tk()
window.title("WALL-E SONAR")
window.geometry(f'{w_width}x{w_height}')
return window
def create_animation_canvas(window):
canvas = tkinter.Canvas(window)
canvas.configure(bg="black")
canvas.pack(fill="both", expand=True)
return canvas
ser = serial.Serial('/dev/ttyACM0', 9600)
strPort = '/dev/ttyACM0'
def animate_sonar(window, canvas):
intercept = canvas.create_oval(0,0,20,20, fill="green")
while True:
rawData = ser.readline() # rawData input example: b'D:140.98A:57\r\n
decodedData = rawData.decode("utf-8")
line = re.search(r'D:(.*)A:(.*)\r\n', decodedData)
if line:
dist = float(line.group(1))
angl = int(line.group(2))
print(f"ANGLE: {angl}")
print(f"DISTANCE: {dist}")
x = dist * math.cos(angl)
y = dist * math.sin(angl)
print(f"X: {x}")
print(f"Y: {y}")
canvas.moveto(intercept, x,y)
window.update()
animation_window = create_animation_window()
animation_canvas = create_animation_canvas(animation_window)
animate_sonar(animation_window, animation_canvas)