def open_port(self): if not self.port_combo.get(): messagebox.showerror("Error", "Select a serial port first.") return try: baud = int(self.baud_combo.get()) self.serial_port = serial.Serial(self.port_combo.get(), baud, timeout=0.1) self.running = True self.receive_thread = threading.Thread(target=self.receive_data, daemon=True) self.receive_thread.start() self.open_btn.config(text="Close Port", bg="lightcoral") self.status_label.config(text=f"Status: Opened {self.port_combo.get()} @ {baud} baud") except Exception as e: messagebox.showerror("Error", f"Cannot open port:\n{e}")
def toggle_port(self): if self.serial_port and self.serial_port.is_open: self.close_port() else: self.open_port()
self.send_btn = tk.Button(btn_frame, text="Send (Text)", command=self.send_text_data, bg="lightblue") self.send_btn.pack(side="left", padx=5) sscom english version
self.clear_btn = tk.Button(settings_frame, text="Clear Receive", command=self.clear_receive) self.clear_btn.grid(row=0, column=5, padx=5)
self.open_btn = tk.Button(settings_frame, text="Open Port", command=self.toggle_port, bg="lightgreen") self.open_btn.grid(row=0, column=4, padx=10) def open_port(self): if not self
self.recv_text = scrolledtext.ScrolledText(recv_frame, wrap=tk.WORD, height=15) self.recv_text.pack(fill="both", expand=True)
self.timestamp_var = tk.BooleanVar() tk.Checkbutton(settings_frame, text="Show Timestamp", variable=self.timestamp_var).grid(row=0, column=6, padx=10) padx=5) self.clear_btn = tk.Button(settings_frame
def receive_data(self): while self.running and self.serial_port and self.serial_port.is_open: try: if self.serial_port.in_waiting: data = self.serial_port.read(self.serial_port.in_waiting) if data: self.display_received(data) except Exception as e: print(f"Receive error: {e}") break time.sleep(0.01)