Du hast ja schon eine gewisse Vorstellung davon wie dein
Programm arbeiten soll. Das ist schon mal gut.
Mein Tip:
Wenn du zur Implementierung schreitest überleg dir einen
Stufenplan so dass du immer etwas hast, was du testen kannst.
In deinem Fall würde es sich anbieten mit der UART anzufangen.
Einfach nur ein Zeichen ausgeben. Mehr nicht.
Wenn das klappt, dann beziehst du einen (!) Taster mit ein.
Wird der Taster gedrückt, soll über die UART ein (fixes) Zeichen
gesendet werden. Da die UART Routinen bereits laufen, ist es
auch kein Problem zu verifizieren ob deine Tastenauswertung
funktioniert.
Du wirst schnell merken, dass da manchmal bei einem Tastendruck
auch mehrere Zeichen gesendet werden -> Tastenprellen.
Also musst du dir etwas gegen das Prellen einfallen lassen.
Da du aber Gott sei Dank die UART Routine bereits am laufen
hast, hast du eine einfache Testmöglichkeit um zu sehen, ob
deine Entprell-Idee auch funktioniert.
Hast du das Prellproblem gelöst, kommt das nächste:
Du willst ja eigentlich nicht beim Drücken einer Taste etwas
verschicken, sondern beim Loslassen. Also baust du dein Programm
mal so um, dass beim Loslassen der Taste das senden beginnt.
Klappt es bei einer Taste, dann veränderst du das Programm so,
dass mehrere Tasten unterstützt werden (sagen wir mal: 2)
....
Du siehst: In kleinen Schritten arbeiten. Die Schritte so anlegen,
dass du immer was zum Testen hast. Oft ist es gut, als erstes die
Ausgabe zu machen, weil man die Ausgabe dann gleich bei der Ent-
wicklung der restlichen Komponenten einsetzen kann um in
Erfahrung zu bringen, was im Programm passiert.
Das Dümmste was du machen kannst, ist dein Programm in einem
Rutsch von vorne bis hinten herunterzuschreiben und darauf
zu hoffen, dass du keine Fehler machen wirst. Du wirst Fehler
machen und dann stehst du mit einem grossen Haufen Code da und
hast keine Ahnung wo du mit der Fehlersuche anfangen sollst.
Arbeitest du dich aber in kleinen Schritten vor, dann ist meist
ziemlich klar, wo der Fehler liegt bzw. welche Programmkomponenten
als Fehlerkandidaten ausscheiden, da sie bereits getestet sind.