# DA e-learning
import tkinter as tk
from tkinter import messagebox
import serial
#import serial.tools.list_ports

# Configura qui la porta e il baudrate
SERIAL_PORT = '/dev/ttyACM0'      # Cambia in base al tuo sistema
BAUDRATE = 115200
TIMEOUT = 1               # Timeout per la ricezione in secondi

def send_and_receive():
    char = entry.get()
    
    # Cancella il messaggio precedente
    output_label.config(text="")
    root.update_idletasks()  # <-- forza il refresh immediato della GUI

    if len(char) != 1:
        messagebox.showerror("Errore", "Inserisci un solo carattere ASCII.")
        return

    try:
        ser.reset_input_buffer()
        ser.write(char.encode('ascii'))

        received = ser.read(1)
        if received:
            output_label.config(text=f"Ricevuto: '{received.decode('ascii')}'")
        else:
            output_label.config(text="Errore ricezione")
    except Exception as e:
        messagebox.showerror("Errore", f"Errore durante l'invio/ricezione: {e}")

# Inizializza la porta seriale
try:
    ser = serial.Serial(SERIAL_PORT, BAUDRATE, timeout=TIMEOUT)
except serial.SerialException as e:
    ser = None
    print(f"Errore apertura porta seriale: {e}")

# Crea la GUI
root = tk.Tk()
root.title("USART ASCII Tool")

tk.Label(root, text="Inserisci un carattere ASCII:").pack(pady=10)

entry = tk.Entry(root, width=5, font=("Arial", 18), justify='center')
entry.pack(pady=5)

send_button = tk.Button(root, text="Invia", command=send_and_receive)
send_button.pack(pady=10)

output_label = tk.Label(root, text="", font=("Arial", 14), fg="blue", width=25, anchor="center")
output_label.pack(pady=10)

root.mainloop()

# Chiudi la seriale alla fine
if ser and ser.is_open:
    ser.close()
 
