import machine import time uart = machine.UART(1) led = machine.Pin(25, machine.Pin.OUT) running = True last_cmd_time = time.ticks_ms() # Beispiel-Parameterwerte breite_wert = 0 strom_wert = 0.0 # Funktionstabelle (Name → Funktionsobjekt) def handle_led_on(args): led.value(1) uart.write("LED ist jetzt AN\r\n") def handle_led_off(args): led.value(0) uart.write("LED ist jetzt AUS\r\n") def handle_status(args): status = "AN" if led.value() else "AUS" uart.write(f"LED-Status: {status}\r\n") uart.write(f"Breite: {breite_wert}, Strom: {strom_wert}\r\n") def handle_go(args): global running uart.write(">> Kommando 'go' empfangen – starte Hauptprogramm.\r\n") running = False def handle_pause(args): try: sek = float(args[0]) uart.write(f"Pausiere {sek} Sekunden...\r\n") time.sleep(sek) except (IndexError, ValueError): uart.write("Fehler: 'pause' erwartet eine Zahl\r\n") def handle_breite(args): global breite_wert try: breite_wert = int(args[0]) uart.write(f"Breite gesetzt auf {breite_wert}\r\n") except (IndexError, ValueError): uart.write("Fehler: 'breite' erwartet eine Ganzzahl\r\n") def handle_strom(args): global strom_wert try: strom_wert = float(args[0]) uart.write(f"Strom gesetzt auf {strom_wert} A\r\n") except (IndexError, ValueError): uart.write("Fehler: 'strom' erwartet eine Zahl\r\n") # Funktionstabelle (Befehl → Handlerfunktion) command_table = { "led_on": handle_led_on, "led_off": handle_led_off, "status": handle_status, "go": handle_go, "pause": handle_pause, "breite": handle_breite, "strom": handle_strom } # Allgemeine Eingabe-Verarbeitung buffer = "" def process_input(): global buffer, last_cmd_time while uart.any(): char = uart.read(1) if char: c = char.decode('utf-8') if c in ('\n', '\r'): cmdline = buffer.strip() if cmdline: last_cmd_time = time.ticks_ms() parts = cmdline.split() cmd = parts[0] args = parts[1:] handler = command_table.get(cmd) if handler: handler(args) else: uart.write(f"Unbekanntes Kommando: {cmd}\r\n") buffer = "" else: buffer += c # Eingabeschleife mit Timeout uart.write("Bereit für Kommandos (led_on, pause 1.5, go, ...)\r\n") while running: process_input() if time.ticks_diff(time.ticks_ms(), last_cmd_time) > 10000: uart.write(">> Timeout – starte Hauptprogramm.\r\n") break time.sleep(0.05) # Hauptprogramm uart.write(">> Hauptprogramm gestartet\r\n") while True: led.toggle() time.sleep(0.5)