Add initial project files and implement LED control via UART commands
This commit is contained in:
109
usrttst.py
Normal file
109
usrttst.py
Normal 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)
|
||||
Reference in New Issue
Block a user