I'm making an interface in Tkinter where you have several options and a send button. When you click the send button it sends a value over serial connection to an Arduino Mega who puts a pin low/high and connects through optocouplers to an external device. When I send my commands via the serial monitor to my Arduino everything is working flawless. When I try to send the commands via my Python app I see the led blinking that my Arduino receives something but nothing happens. I've installed an LCD, when I send stuff from the serial line I see it on the screen. When it comes from Python I only see "Wachten op data". I think the problem will have to do with some kind of carriage return character but I've tried everything I could. Thanks! PS: the lcd is not important, it's just to debug at the moment. Arduino Code #include <Arduino.h> #include <LiquidCrystal.h> const int ledPin = 12; // LCD-instellingen: (RS, E, D4, D5, D6, D7) LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); lcd.begin(16, 2); // 16 kolommen, 2 rijen lcd.print("Wachten op data..."); } void loop() { if (Serial.available() > 0) { delay(100); // Wacht kort om data volledig binnen te krijgen String command = Serial.readString(); command.trim(); // Verwijder spaties en nieuwe regels if (command.length() > 0) { // Laat ontvangen bericht zien op het LCD lcd.clear(); lcd.setCursor(0, 0); lcd.print("Ontvangen:"); lcd.setCursor(0, 1); lcd.print(command); // Debug output naar seriële monitor Serial.print("Ontvangen: ["); Serial.print(command); Serial.println("]"); // Controleer op "1" of "2" voor LED aan/uit if (command == "1") { digitalWrite(ledPin, HIGH); Serial.print("LED Aan"); } else if (command == "2") { digitalWrite(ledPin, LOW); Serial.print("LED Uit"); } // Controleer op "Aanwezig" en "Uitgeschakeld" if (command.indexOf("Aanwezig") != -1) { digitalWrite(ledPin, HIGH); Serial.println("LED Aanwezig AAN"); } else if (command.indexOf("Uitgeschakeld") != -1) { digitalWrite(ledPin, LOW); Serial.println("LED Uitgeschakeld UIT"); } } } } Code Python import tkinter as tk import serial import serial.tools.list_ports from tkinter import messagebox class ParameterRow(tk.Frame): def __init__(self, master, label_text, options, default_value, send_function): super().__init__(master) self.label = tk.Label(self, text=label_text, anchor="w") self.label.grid(row=0, column=0, sticky="w") self.var = tk.StringVar(value=default_value) self.radio_buttons = [] for i, option in enumerate(options): rb = tk.Radiobutton(self, text=option, variable=self.var, value=option) rb.grid(row=0, column=i + 1, sticky="w") self.send_button = tk.Button(self, text="Verzenden", command=send_function) self.send_button.grid(row=0, column=len(options) + 1, sticky="w") class ArduinoInterface: def __init__(self, master): self.master = master master.title("Arduino Parameters") # COM-poort selectie self.com_label = tk.Label(master, text="COM-poort:") self.com_label.grid(row=0, column=0, sticky="w") self.com_var = tk.StringVar() available_ports = self.get_available_ports() if available_ports: self.com_var.set(available_ports[0]) self.com_dropdown = tk.OptionMenu(master, self.com_var, *available_ports) self.com_dropdown.grid(row=0, column=1, sticky="w") else: messagebox.showerror("Fout", "Geen COM-poorten beschikbaar.") return # Bakje toevoerwater self.toevoerwater_row = ParameterRow(master, "Bakje toevoerwater:", ["2", "1"], "2", self.send_toevoerwater) self.toevoerwater_row.grid(row=1, column=0, sticky="w") # Bakje condenswater self.condenswater_row = ParameterRow(master, "Bakje condenswater:", ["aanwezig", "afwezig"], "aanwezig", self.send_condenswater) self.condenswater_row.grid(row=2, column=0, sticky="w") # Niveau toevoerwater self.niveau_row = ParameterRow(master, "Niveau toevoerwater:", ["hoog", "laag"], "hoog", self.send_niveau) self.niveau_row.grid(row=3, column=0, sticky="w") # Deur self.deur_row = ParameterRow(master, "Deur:", ["open", "dicht"], "dicht", self.send_deur) self.deur_row.grid(row=4, column=0, sticky="w") # Extra Aan/Uit optie self.extra_aan_uit_row = ParameterRow(master, "Extra Aan/Uit:", ["Aan", "Uit"], "Uit", self.send_extra_aan_uit) self.extra_aan_uit_row.grid(row=5, column=0, sticky="w") self.ser = None def get_available_ports(self): ports = [p.device for p in serial.tools.list_ports.comports()] return ports def send_toevoerwater(self): value = self.toevoerwater_row.var.get() self.send_data(value) def send_condenswater(self): self.send_data(f"condenswater,{self.condenswater_row.var.get()}") def send_niveau(self): self.send_data(f"niveau,{self.niveau_row.var.get()}") def send_deur(self): self.send_data(f"deur,{self.deur_row.var.get()}") def send_extra_aan_uit(self): value = self.extra_aan_uit_row.var.get() self.send_data(value) # Verzend alleen Aan of Uit. def send_data(self, data): com_port = self.com_var.get() try: self.ser = serial.Serial(com_port, 9600) self.ser.write((data + "\n").encode()) print(f"Sent data to {com_port}: {data}") self.ser.close() except serial.SerialException as e: messagebox.showerror("Fout", f"Kan COM-poort {com_port} niet openen.") root = tk.Tk() my_gui = ArduinoInterface(root) if my_gui.com_var.get() != "": root.mainloop() Continue reading...