# Morse Decoder – Einführung und Nutzung ## Einführung: Morsecode Der Morsecode ist ein Verfahren zur Übertragung von Text durch kurze und lange Signale: - Punkt (.) → kurzes Signal - Strich (-) → langes Signal Jeder Buchstabe wird durch eine Kombination dieser Signale dargestellt. Beispiele: - A → .- - B → -... - SOS → ... --- ... Die Bedeutung entsteht nicht nur durch die Signale selbst, sondern auch durch Pausen: - kurze Pause → Trennung innerhalb eines Buchstabens - mittlere Pause → neuer Buchstabe - lange Pause → neues Wort *** ## Funktionsweise des Codes Dieses Projekt implementiert einen **Morse-Decoder**, der zeitbasierte Signale interpretiert. Er funktioniert auf Basis dieses Zustandsautomaten: ![morsedecode state machine (stm)](morsecode_stm.png) ### MORSE-Dictionary Das Dictionary `MORSE` übersetzt Morsezeichen in Buchstaben: ```python '.-' → 'A' '-...' → 'B' ``` Wenn ein unbekannter Code vorkommt, wird ein `?` ausgegeben. *** ### Zeitbasierte Erkennung Der Decoder arbeitet mit einer **Zeiteinheit (`unit`)**, z. B.: ```python unit = 0.1 Sekunden ``` Damit gelten: - Punkt: < 2 × unit - Strich: ≥ 2 × unit - Buchstabenpause: ≥ 3 × unit - Wortpause: ≥ 7 × unit *** ### Klasse `MorseDecoder` #### Konstruktor ```python MorseDecoder(unit=0.1) ``` Speichert: - aktuelle Morse-Sequenz (`self.code`) - Startzeit eines Signals - Startzeit einer Pause *** #### `signal_on()` Wird aufgerufen, wenn ein Signal beginnt (Taste gedrückt): - Misst die vorherige Pause - Entscheidet: - neue Buchstaben? - neues Wort? - Gibt ggf. fertige Buchstaben zurück *** #### `signal_off()` Wird aufgerufen, wenn das Signal endet (Taste losgelassen): - Misst die Dauer des Signals - Entscheidet: - Punkt (.) - Strich (-) - Hängt das Ergebnis an `self.code` an *** #### `flush()` - Wandelt den aktuellen Morsecode in einen Buchstaben um - Nutzt das Dictionary - Gibt den Buchstaben direkt aus - Setzt den Code zurück *** ## Beispielablauf 1. Taste drücken → `signal_on()` 2. Taste loslassen → `signal_off()` 3. Pause → entscheidet über Buchstaben-/Wortgrenzen 4. Ausgabe erfolgt automatisch *** ## Arbeiten mit GitLab ### Git auschecken und konfigurieren Git clone: ```bash git clone https://git-stu.ba-glauchau.de/marvinferber/morsecode.git ``` Git Bentzer lokal konfigurieren für Identifikation im Gitlab: ```bash git config --local user.name "Max Muster" git config --local user.email "s1234567@edu.dhsn.de" ``` ### Neuen Branch erstellen ```bash git checkout -b mein-feature ``` Oder moderner: ```bash git switch -c mein-feature ``` *** ### Änderungen hinzufügen ```bash git add . git commit -m "Beschreibung der Änderung" ``` *** ### Branch zu GitLab pushen ```bash git push -u origin mein-feature ``` Danach kann im GitLab-Webinterface ein **Merge Request** erstellt werden (optional). *** ## Hinweise - Es ist darauf zu achten, dass die Zeiteinheit (`unit`) zur Eingabegeschwindigkeit passt - Für Hardware-Projekte (z. B. Raspberry Pi) kann `signal_on/off()` an GPIO-Events gebunden werden - Erweiterbar für Zahlen und Sonderzeichen *** Viel Spaß beim Experimentieren mit Morsecode