Add initial project files and implement LED control via UART commands

This commit is contained in:
rxf
2025-07-31 17:00:59 +02:00
commit 670eafefa2
7 changed files with 189 additions and 0 deletions

109
usrttst.py Normal file
View File

@@ -0,0 +1,109 @@
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)