Die Aufgaben werden in Threads aufgeteilt:
Das Messen übernimmt der HDL-Thread:
Um möglichst genau den maximalen Druck eines Schlags zu ermitteln, muss in sehr kurzen Abständen gemessen werden.
Das Schaubild veranschaulicht vereinfacht den Verlauf des Drucks auf den Sensor und die Messintervalle des ADC. Um den Maximaldruck am besten messen zu können muss die Software die höchsten drei Messwerte des Wandlers auswerten.
Zu beginn den Wert für die Nullstellung. Das geschieht beim Aufuf des Programms.
Wird ein Schlag ausgeführt wird ein Wert, der höher ist als die „Nullstellung“ ist, gemessen und anschließend so lange gemessen bis der dritte Wert unterhalb des zuvor gemessenen liegt. Ist das nicht der Fall wird dieser - höchste - Messert in den zweiten Wert geschrieben.
Um das System stabil arbeiten zu lassen und eine einigermaßen rechtzeitige Messung zu bekommen haben wir uns auf eine Auftrittshäufigkeit von 1ms beschränkt. Schnellere Messungen lässt der ADC leider nicht zu. Ist ein höherer Messwert eingetroffen, so wird der Fill thread benachrichtigt.
Der fill-thread:
übernimmt die Anzeige der Balkenausteuerung. Wird der Thread vom HDL-thread benachrichtigt, so liest er den gemessenen Wert ein, rechnet ihn auf die Anzeige um und steuert den Balken auf der Gui aus.
Gleichzeitig aktualisiert er die Werte für den Highscore.
der input-thread:
lauscht auf STDIN. Sobald er den Buchstaben T bekommt, wird die Tarafunkltion ausgeführt. Er liest einen Wert vom ADC. Dieser stellt ab jetzt die Nullstellung dar. Anschließend informiert er den fill-thread über das Update.
Schlussendlich aktualisiert er die Highscoreliste.
Bekommt er den Buchstaben B beendet er die beiden anderen Threads und dann sich selbst.
Somit wird zur main-Routine zurückgekehrt welche abschließend aufräumt und die Highscores in ein Textfile speichert.