Ich habe einen neuen Anlauf genommen ein Schlepper-Cockpit zu bauen. Nachdem das letzte Projekt irgendwann zum Raumschiffcockpit wurde, wird das hier nun wirklich ein Landmaschinenbedienpult. Das Ding fuer den LS von Saitek ist ja wohl bekannt, auch haben einige von Euch selber was zusammengebaut, was aber bei allen fehlt ist eine Anzeige was gerade passiert. - Anzeige ? .. hab doch nen Monitor !
Ich will aber Displays in meinem Cockpit, einen schoenen Tachometer und zum Beispiel eine Drehzahl/Drehmomentsanzeige, analog und digital. GIANTS laesst den LS bewusst modbar auf uns los und ermoeglicht viele Dinge die bei anderen Spielen nicht moeglich sind. Eingabegeraete lassen sich schoen einbinden, Ausgabegeraete aber ueberhaupt nicht, vermutlich weil es diese halt nicht 'von der Stange' gibt. Leider haben sie in ihrer Engine einige lua-Funktionen geblockt die eine Ausgabe von Daten erleichtern wuerde, ich mache deshalb einen kleinen Umweg.
Jetzt wird es technisch und nerdig : Ich schreibe die Daten die ich brauche in ein ascii-file, lese diese mit einem externen Script aus und schicke sie an die Hardware mit den Anzeigen. Da ich bei meinem letzten Versuch eine SSD geschrottet habe, liegt das Datenfile nun auf einer RAM-Disk, die vielen Schreib/Loeschzyklen haben die Speicherzellen der SSD 'weggefressen'. Wer schonmal sowas gemacht hat wird sicher auch mal das Problem gehabt haben dass ein Script das File offen hatte waehrend das 2te Script auch auf das File zugreifen wollte. Das gibt dann natuerlich einen Fehlerfall, die meisten hoeheren Programmiersprachen kennen um einem Absturz entgegen wirken zu koennen sogenannte Error-Handler.
Mein externes Script habe ich mit Python geschrieben, eine sehr komfortable Interpreter-Sprache, welche natuerlich auch einen Error-Handler anbietet. Auch lua, also die Scriptsprache mit der wir den LS 'beeinflussen' koennen kennt einen Error-Handler. Leider aber hat GIANTS diese Funktion in der LS-Engine ausgeklammert, oder sie ist schlicht nicht verfuegbar weil der lua-Interpreter in der LS-Engine im Sandbox-Mode laeuft. Was bleibt waere den Dateizugriff ueber striktes timing der beiden Scripte abzustimmen, oder irgendwie zu synchronisieren. Mit dem timing habe ich ein wenig experimentiert, ueber laengere Zeit laeuft das aber dank des OS das im Hintergrund der Daddelkiste laeuft, nicht stabil. Also irgendwie synchronisieren ...
Da ja sowieso eine externe Hardware zum Einsatz kommt und man im LS die Moeglichkeit hat eigene 'Bilder' einzublenden, kann der Dateizugriff 'ueber den Monitor' abgestimmt werden. Am einfachsten zu programmieren und vor allem um den Hardware-Aufwand moeglichst einfach zu halten, bietet sich da einfach schwarz/weiss an. Im nachfolgenden Video seht ihr wie das konkret aussieht :
Das funktioniert zu 99.9% , aber ab und zu meckert das Python-Script dass die Datei noch geoeffnet ist obwohl sie schon geschlossen sein sollte, ist vermutlich auch irgendein Overhead vom OS. Hauptsache aber ist dass das Script im LS keinen Error sieht und stabil laeuft. - Das Zusammenspiel HW/SW sieht also so aus : Der LS schreibt etwa 3mal pro Sekunde Daten in das Daten-File. Mit einer Vor- und Nachlaufzeit wird waehrenddessen das Icon auf dem Monitor schwarz, danach weiss. Der am Monitor befestigte Lichtsensor loest dann auf dem Microcontroller, der die Displays ansteuert, eine Routine aus welche ueber eine serielle Schnittstelle Daten vom externen Script abfragt. Das sieht in etwa so aus :
Auf dem Bild zuvor ist auch ein Navi eingezeichnet das ich im Text zuvor noch nicht erwaehnt habe, das wird dann das i-Tuepfelchen der ganzen Geschichte. Ich werde bald mehr Bilder und Videos nachliefern, gut moeglich dass die meisten im Moment nur noch Bahnhof verstehen ... das macht aber nix. Wer selber auch gerne mal sowas bauen und den Loetkolben schwingen will ist natuerlich eingeladen mit zu machen, Schemas und Scripte werde ich im Lauf der Zeit hier noch nachliefern.