
Ablaufsteuerung
- Bordcomputer Programmierung
- gepostet am 8.August 2019
Im ersten Schritt ging es um das Auslesen der OBD2-Werte und der Ansteuerung des Displays. Später werden noch weitere Quellen hinzukommen, deren Daten permanent abgefragt werden müssen.
Dazu gehören:
- Temperatursensoren
- GPS-Daten
- Echtzeituhr
- Taster
All diese Informationen müssen permanent verarbeitet werden um zum Beispiel den Durchschnittsverbrauch zu ermitteln. Im Anschluss wird das Display aktualisiert.
Wie sieht die Ablaufsteuerung eines solchen Systems aus? Ich habe mich bei der Überlegung dazu an eine Spielerei von vor 14-15 Jahren erinnert. Damals habe ich mich ein paar Wochen mit der 3D-Spieleentwicklung befasst.
Es geht nicht die 3D-Entwicklung, sondern um die Art wie Computerspiele an sich umgesetzt sind.
Dort gibt es eine Game-Loop, das ist eine Endlosschleife die nacheinander alle Daten abfragt, auswertet und die Bildschirmausgabe aktualisiert.
Man kann sich das so vorstellen:
while (gameIsRunning) {
handleUserInput();
calculateGameState();
updateDisplay();
}
Je öfter die Schleife pro Sekunde durchlaufen wird, desto öfter kann der Spielstand aktualisiert werden und desto öfter wird die Bildschirmausgabe aktualisiert. Das entscheidet dann maßgeblich über die FPS und über die Reaktionsfähigkeit des Systems.
Dieses Prinzip nutze ich 1:1 auch (was anhand der Hauptschleife meines Skriptes sichtbar wird):

Bei jedem Schleifendurchlauf werden die gedrückten Tasten, OBD-Werte und sonstige Daten (Temperatur, …) abgefragt.
Die Funktion obd_reader.get_obd_values() macht mehr als der Name verspricht. Denn diese Methode ermittelt alle Werte (Temperatur, Echtzeituhr, …) und führt verschiedene Berechnungen (z.B.: den Durchschnittsverbrauch) durch.