## Morsecode Feature

Zur Implementierung des Morsecode-Features wurde
zur Inspiration der Umsetzung ein offizielles Beispiel
einer Implementierung eines Morsecode Led Projekts
von Arduino verwendet, welches Online zu finden ist [@MorseCodeProject].
In der Geschäftsschicht wurde ein MorseService implementiert,
welcher in der Logik dem Beispiel von Arduino folgt und das Morsealphabet
in Form von Buchstaben und Zahlen in Morsecode übersetzt. Ein "`A`" wird beispielsweise
in "`.-`" übersetzt. In der _printMessage_ Methode wird die Nachricht von einem
String in eine Liste von Strings mit den passenden Morsezeichen übersetzt und
danach wird diese Liste in einer Schleife durchlaufen und die einzelnen Zeichen
werden mit Pausen nacheinander auf die LED geschrieben. Zum ansprechen des LED
Pins wurde die _flutter_gpio_ Bibliothek verwendet, welche es ermöglicht, die
GPIO Pins des Raspberry Pi anzusprechen. In der Präsentationsschicht wurde ein
_LedScreen_ implementiert, welcher die Benutzeroberfläche für das Morsecode-Feature
darstellt. In dieser Oberfläche kann der Benutzer eine Nachricht eingeben und
diese dann in Morsecode auf die LED ausgeben lassen. Die Oberfläche besteht aus
einem Textfeld, in welchem die Nachricht eingegeben wird und einem Button, welcher
die Nachricht in Morsecode auf die LED ausgibt (siehe Abbildung \ref{morse}).

\begin{multicols}{2}

\begin{figure}[H]
\caption{Das Morsecode Feature}
\label{morse}
\centering
{\shadowimage[width=7cm]{./assets/screenshots/morse.png}}
\end{figure}

\begin{figure}[H]
\caption{Tastatureingabe beim Morsecode Feature}
\label{morseInput}
\centering
{\shadowimage[width=7cm]{./assets/screenshots/morseInput.png}}
\end{figure}

\end{multicols}

Zur Eingabe am Textfeld musste eine eigene Tastatur implementiert werden, da im
Flutter-Framework normalerweise bei der Touch-Eingabe die Tastatur des Betriebssystems
verwendet wird, welche in diesem Kontext nicht verfügbar ist. Zur Implementierung
der Tastatur wurde ein Fork des Pakets _virtual_keyboard_multi_language_ erstellt,
worin die Tastatur leicht angepasst wurde, um bei der Eingabe es zu erlauben, dass
der Nutzer auch die Position des Cursors im Textfeld ändern kann und diese Änderung
dann von der Eingabe der Tastatur berücksichtigt wird. Zusätzlich wurde die optionale
Methode _onReturnKey_ hinzugefügt, welche es ermöglicht, eine angepasste Methode
beim Klick auf die Enter-Taste auszuführen. Die Tastatur ist in Abbildung \ref{morseInput}
zu sehen. In dem Test wurde nur die englische Sprache verwendet, bei der Tastatur
können aber auch andere Sprachen hinzugefügt werden.

<!-- \begin{figure}[ht]
\caption{Example caption}
\centering
\begin{minipage}{7cm}
\dirtree{%
.1 morse\char`\_led/.
    .2 business/.
    .3 service/.
    .4 morse\char`\_service.dart.
.2 presentation/.
.3 led\char`\_screen.dart.
}
\end{minipage}
\end{figure} -->

<!-- \lstinputlisting[language=Java, caption=Implementierung des Morse Service, captionpos=t]
{code/flutter_elinux/lib/features/morse_led/business/service/morse_service.dart} -->
