Files
PowerBank_Python/usrttst.py

109 lines
2.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)