import tkinter as tk
import serial
import threading
import math

# Configuração da porta serial (alterado para 'COM9')
ser = serial.Serial('COM8', 9600, timeout=1)

# Variáveis globais
distance = 0
angle = 0

# Função para atualizar os dados do sensor
def read_sensor():
    global distance
    while True:
        if ser.in_waiting > 0:
            try:
                distance = int(ser.readline().decode('utf-8').strip())
            except:
                pass

# Função para desenhar o radar
def draw_radar():
    global angle
    angle += 5
    if angle > 180:
        angle = 0

    canvas.delete("all")
    
    # Desenha o radar
    canvas.create_arc(10, 10, 390, 390, start=0, extent=180, outline="green", style=tk.ARC, width=2)
    
    # Desenha linhas do radar (setores)
    for i in range(0, 181, 30):
        x = 200 + 190 * math.cos(math.radians(i))
        y = 200 - 190 * math.sin(math.radians(i))
        canvas.create_line(200, 200, x, y, fill="green")

    # Desenha o "raio" do radar em movimento
    x_end = 200 + 190 * math.cos(math.radians(angle))
    y_end = 200 - 190 * math.sin(math.radians(angle))
    canvas.create_line(200, 200, x_end, y_end, fill="red", width=2)

    # Desenha o ponto correspondente à distância
    if distance > 0:
        dist_limited = min(distance, 190)  # Limita o ponto à borda do radar
        x_point = 200 + dist_limited * math.cos(math.radians(angle))
        y_point = 200 - dist_limited * math.sin(math.radians(angle))
        canvas.create_oval(x_point - 5, y_point - 5, x_point + 5, y_point + 5, fill="red")

    # Atualiza o display de distância
    distance_label.config(text=f"Distância: {distance} cm")

    # Chama a função novamente após um intervalo
    root.after(100, draw_radar)

# Configuração da janela Tkinter
root = tk.Tk()
root.title("Radar Ultrassônico")

# Criação do canvas para o radar
canvas = tk.Canvas(root, width=400, height=400, bg="black")
canvas.pack()

# Display para mostrar a distância em cm
distance_label = tk.Label(root, text="Distância: 0 cm", font=("Helvetica", 14))
distance_label.pack(pady=10)

# Rodapé com o texto "Desenvolvido por Tio Rafa"
footer_label = tk.Label(root, text="Desenvolvido por Tio Rafa", font=("Helvetica", 10))
footer_label.pack(side=tk.BOTTOM, pady=5)

# Inicia a leitura do sensor em uma thread separada
sensor_thread = threading.Thread(target=read_sensor)
sensor_thread.daemon = True
sensor_thread.start()

# Inicia a animação do radar
draw_radar()

# Inicia a interface Tkinter
root.mainloop()
