Jump to content

Der deutsche DCS-BIOS-Thread: Für Simpit-Bastler und solche, die es werden wollen


FSFIan

Recommended Posts

Was ist DCS-BIOS?

 

DCS-BIOS besteht aus einer Export.lua-Datei für DCS: World und einer Arduino-Library. Damit kann man für unterstützte Flugzeugmodule (im Moment A-10C, UH-1H und Mig-21bis) ganz einfach Panels auf Basis der einsteigerfreundlichen und kostengünstigen Arduino-Mikrocontrollerplatform bauen.

 

Für Taster, Kippschalter, Drehschalter, Inkrementalgeber oder einzelne LEDs braucht man keine weiteren Kenntnisse (ok, ihr solltet aus der Schulphysik noch in Erinnerung haben, was ein Stromkreis ist, was ein Kurzschluss ist und wie man ihn vermeidet). Wer ein bisschen programmieren lernt, der kann auch LEDs, Displays, Hobby-Servos, Schrittmotoren oder eine ganze LED-Matrix (z.B. Caution Lights Panel) ansteuern.

 

 

Einführungsvideo

 

Dieses Video, welches ich jetzt auch mit deutschen und englischen Untertiteln versehen habe, zeigt wie einfach das geht:

 

8vI_W0j_3uY

 

 

Mehr Informationen (Englisch)

 

Auf der DCS-BIOS-Webseite unter http://dcs-bios.a10c.de findet Ihr Download-Links zur jeweils aktuellen Version und eine Online-Version des Benutzerhandbuchs.

 

Weitere Links (z.B. auf den DCS-BIOS YouTube-Channel) gibt's im DCS-BIOS Overview-Thread im Home Cockpits-Forum.

 

 

Warum jetzt dieser Thread?

 

Anfang des Jahres hab ich zusammen mit WarHog die erste Version veröffentlicht. Ich hab das bisher im deutschen Forum nicht erwähnt, weil ich davon ausging, dass jeder potentiell Interessierte sowieso regelmäßig ins englische Home Cockpits-Forum schaut.

 

Dieser Thread soll eine Anlaufstelle sein, um Support auf Deutsch zu erhalten. Ein Ziel von DCS-BIOS ist es, Leute zum Basteln zu ermutigen, die sonst vielleicht nie damit angefangen hätten. Hiermit sind jetzt "ich kann kein Englisch" und "ich hatte ja keine Ahnung, dass das so einfach sein kann!" hoffentlich keine gültigen Ausreden mehr. :)

Link to comment
Share on other sites

Tolle Sache, da hab ich schon eine gewisse Grunderfahrung mit dem Raspberry PI. Sobald der Black Shark unterstützt wird, wirds spannend für mich

Hardware: Windows 11 64Bit, AMD Ryzen 7 5800X3D, ASUS TUF Gaming X570-Pro Wifi II, 32 GB Ram 3600 MHz DDR4, TUF RTX 4080 OC, M.2 SSD ADATA SX8200 2TB, Meta Quest 2, ASUS TUF VG279QM Monitor, TM HOTAS Warthog , VIRPIL VPC WarBRD Base mit TM Hornet Stick und Saitek Pro Flight Rudder Pedalen.

 

Deutscher Guide zu: Mirage 2000C, MiG-21bis, F5 Tiger II, Mi-8MTV2, F-14B Tomcat, AJS-37 Viggen und Fulgabwehrsysteme

Link to comment
Share on other sites

Endlich wieder was sinnvolles

 

Ein hallo an euch!

Also das DCS-Bios Projekt habe ich auch schon gesehen und ausprobiert, zwei Videos gibt es darüber von mir. Und ich muss schon sagen diese ist eines der besten Projekte nach Helios das es für Cockpitbauer gibt finde ich. Für eine Umsetzung mit selbst hergestellten Cockpitpanels würde ich heute so vorgehen. Die vorgehenswiese ist auf für Elektronikleihen sowie Programmierleihen sehr einfach, wenn noch mehr Infos in Deutsch kommen wäre super. Mein Dank an die, die sich die Arbeit machen so etwas auf die Beine zu stellen und dann noch kostenlos zu Verfügung stellen! :thumbup:

www.a10-homecockpit.de

Ein Gruß an euchCockpitbauer

 


Edited by Dieter474
Link to comment
Share on other sites

Sobald der Black Shark unterstützt wird, wirds spannend für mich

 

Ich weiß, dass airtom damit angefangen hat, Ka-50-Support in DCS-BIOS einzubauen (ich habe dazu ein paar Fragen per PM beantwortet), und zwei weitere Leute hatten mich per PM kontaktiert und Interesse an der Mitarbeit bei der Ka-50-Unterstützung angeboten. Ich habe denen gesagt, sie sollen sich untereinander mal absprechen, damit da jetzt nicht die gleiche Arbeit mehrfach gemacht wird, habe aber bisher nichts weiteres gehört.

 

Von daher: Es kann gut sein, dass wir Ka-50-Unterstützung bekommen, ich kann es nur weder garantieren noch irgendeinen Zeitrahmen angeben.

 

 

wenn noch mehr Infos in Deutsch kommen wäre super.

Der Aufwand, alles auf Deutsch zu übersetzen und dann auch zukünftig aktuell zu halten lohnt sich glaube ich nicht. Es ist einfacher, jeweils im Einzelfall Fragen zu beantworten, die dann auch relativ allgemein ausfallen dürfen, z.B. "Wie baue ich mir mit DCS-BIOS ein AHCP?" oder sowas. Das skaliert zwar nicht auf viele User hoch, aber erst einmal gehe ich davon aus dass man die potentiellen DCS-BIOS-Benutzer, die nicht genug Englisch können um die vorhandene Dokumentation zu verstehen, an einer Hand abzählen kann.

 

Es gibt relativ wenige Menschen, die das PC-Flugsimulator-Hobby teilen. Davon spielt nur ein Teil DCS. Von denen baut nur ein sehr kleiner Teil eigene Panels. Und wiederum nur ein Teil davon sind DCS-BIOS-Benutzer. Diese Benutzergruppe ist einfach zu klein, um zwei (oder mehr) Unterabteilungen für verschiedene Sprachen am Leben zu erhalten.

 

Von daher würde ich folgende Vorgehensweise vorschlagen:

Wenn möglich, benutzt das englische Forum zum Nachfragen und für den allgemeinen Informationsaustausch. Das hat den Vorteil, dass möglichst viele andere Benutzer auch was davon haben.

Wenn ihr eure Frage mit den englischen Resourcen nicht beantworten könnt (was ja gerade bei einem Thema, in das man sich gerade erst reinliest und was einen stellenweise noch verwirrt auch deshalb vorkommen kann, weil man gar nicht genau weiß, wie man die Frage -- dann auch noch auf Englisch -- überhaupt formulieren soll), dann fragt gerne hier nach.

 

Sollten es dann doch so viele sich wiederholende Fragen werden, dass es sich lohnt, die Dokumentation (zumindest teilweise) auch in einer deutschen Version zu pflegen, lasst ich mich gerne eines besseren belehren.

Link to comment
Share on other sites

  • 3 months later...

Hallo, Ihr.

 

Ihr habt noch einen Verrückten gefunden :)

Danke für diese deutschsprachige Abteilung, mein englisch reicht wahrscheinlich nicht, mein Problem hinreichend zu erklären.

 

Zur Einleitung, daß Ihr seht, wie tief ich schon drin stecke:

 

Bei mir entpuppt sich DCS World so allmählich zum Millionengrab (Geld und Zeit :). Habe das A10C-Modul vor einem knappen Jahr günstig bekommen (unter 20 Euro). Dann DCS-World dazu geladen.

Dann ein CDU gebaut (mit Arduino Leonardo mit Centipede als Keyboard),

dann angefangen, zwei MFDs zu entwerfen (bestelle in den nächsten Tagen die PCBs), die werden von einem Leonardo als Joystick betrieben werden,

dann durch Zufall ein Keyboard einer Registrierkasse bekommen. Dieses ist nun mein UFC (eigentlich mehr ein LeftSide- statt UpFront-Controller). Wird durch einen Leonardo als Joystick angetrieben (den hatte ich eigentlich für die MFDs gekauft)

Einen 18" TFT geschenkt bekommen, der nun einen Haufen Instrumente anzeigt. Export per Helios.

Eine Schnellkupplung gebaut, um den 18er einfach entfernen zu können, damit ich am Rechner noch arbeiten kann.

Einen nagelneuen X55 gekauft.

Seit zwei Wochen entwerfe ich "Magnetic Held Switches". Die gibt es von Honeywell für 1000 Dollar das Stück. Das war mir aber etwas zu teuer :/

Das Material ist fast komplett geliefert. Stay tuned.

 

Nun versuche ich mich an DCS-BIOS. Das brauche ich u.a. für die Schalter.

 

Hierzu benötige ich einen kleinen (ich hoffe, kleinen) Anschub, denn ich stecke fest. :/

 

Zum Einstieg und Kennenlernen möchte ich das UFC-Beispiel anwenden.

Die Step-by-Step Anleitungen habe ich akurat befolgt (mit so vielen Bildschirmen kein Problem). Und die Anleitungen (vom Programm ganz zu schweigen) sind einfach TOP!

 

Mehrmals neu heruntergeladen und kopiert, 100mal die Scripte gecheckt, in der Firewall herumgepfuscht... immer die gleichen Probleme:

 

Erstens: Mein Button bedient den Master_Caution_Reset Button einwandfrei, es kommt aber nichts(!) von DCS zurück. Also die LED brennt nicht.

Im Fenster des connect-serial-port.com sehe ich die Reaktion auf meine Button-Presses, aber sonst passiert da nichts. In den Beispielen (YouTube) flattern die Meldungen nur so über den Schirm, bei mir Totenstille.

Zweitens: DCS hängt sich beim Beenden der Mission (SinglePlayer) gnadenlos auf. Sinngemäß "Das Programm reagiert nicht, beenden...". Der Prozess DCS.exe lässt sich nicht killen, nur ein kompletter Neustart des Rechners schafft Abhilfe.

 

Habe ich irgend etwas Wichtiges übersehen?

Für den entscheidenden Tipp wäre ich sowas von dankbar.

Bitte bitte. Helft mir.

 

Fehlende Infos werde ich mehr oder weniger sofort (habe hier noch Frau und Kind am Start - die erstere mit eingeschränktem Verständnis für die Sache, die zweite (7) brennt schon etwas :) nachreichen.


Edited by Tekkx

Manual for my version of RS485-Hardware, contact: tekkx@dresi.de

Please do not PM me with DCS-BIOS-related questions. If the answer might also be useful to someone else, it belongs in a public thread where it can be discovered by everyone using the search function. Thank You.

Link to comment
Share on other sites

Erstens: Mein Button bedient den Master_Caution_Reset Button einwandfrei, es kommt aber nichts(!) von DCS zurück.

 

Da scheint irgendwas mit dem Export-Datenstrom schiefzugehen. Wenn es keine Fehlermeldung irgendwo gibt, ist es schwierig herauszufinden, warum das nicht geht, aber du kannst es mit folgender Batch-Datei mal über TCP statt Multicast-UDP versuchen (in dem Fall musst du erst DCS starten, dann das Skript):

 

REM Specify the number of the COM port your Arduino is connected to:

set COMPORT=5



set /A TTYNUM=%COMPORT%-1
mode COM%COMPORT% BAUD=500000 PARITY=N DATA=8 STOP=1 TO=off DTR=on
socat\socat -v TCP4:127.0.0.1:7778 /dev/ttyS%TTYNUM%

pause

 

Zweitens: DCS hängt sich beim Beenden der Mission (SinglePlayer) gnadenlos auf. Sinngemäß "Das Programm reagiert nicht, beenden...". Der Prozess DCS.exe lässt sich nicht killen, nur ein kompletter Neustart des Rechners schafft Abhilfe.

Der Inhalt der "dcs.log"-Datei wäre da mal interessant, die findest du in %USERPROFILE%\Saved Games\DCS\Logs.

 

Hast du außer DCS-BIOS noch irgendwas anderes laufen, das eine Export.lua mitbringt (Heliios, TacView, etc.)?

 

die zweite (7) brennt schon etwas :)

Immer schön Öl aufs Feuer gießen! Was wäre das cool gewesen, damals, als man noch so viel Zeit hatte, Zugriff auf vernünftige Informationsquellen zu haben. Internet hatten wir nicht, die Stadtbücherei hatte nichts brauchbares in Sachen Programmierung, also habe ich die ersten Jahre meines Programmiererlebens mit Batch-Dateien und danach Visual Basic verschwendet (wir hatten ein Buch namens "DOS Power Tools" im Regal und in der PC-WELT 11/97 war eine Einführung in Office-Makros drin) :smartass:

Link to comment
Share on other sites

Hey Ian. Vielen Dank für die schnelle Reaktion.

Mein MS-DOS-Handbuch steht hier zur Mahnung auch noch im Regal...

 

So. Ursprünglich habe ich auch HELIOS laufen. Aber als die Fehlerflut begann, habe ich die Export.lua zeitweise deaktiviert (*.bak) und durch eine reinrassige export.lua für DCS-BIOS ersetzt um etwaige Interferenzen auszuschließen. Fehlanzeige.

 

Hier mal der Schwanz meiner dcs.log (die komplette Datei als Anhang und mein "Klarname" ist hiermit auch raus :) )

00077.387 ERROR   Lua::Config: Call error LuaExportAfterNextFrame:<LUA_TTABLE>
stack traceback:
[C]: ?
[C]: in function 'try'
[string "C:\Users\DRESI\Saved Games\DCS\Scripts\DCS-BIOS\lib\ProtocolIO.lua"]:98: in function 'send'
[string "C:\Users\DRESI\Saved Games\DCS\Scripts\DCS-BIOS\lib\ProtocolIO.lua"]:170: in function 'flush'
[string "C:\Users\DRESI\Saved Games\DCS\Scripts\DCS-BIOS\BIOS.lua"]:75: in function <[string "C:\Users\DRESI\Saved Games\DCS\Scripts\DCS-BIOS\BIOS.lua"]:72>.
00078.610 WARNING LOG: 17 duplicate message(s) skipped.
00078.610 ERROR   Lua::Config: Call error LuaExportAfterNextFrame:<LUA_TTABLE>
stack traceback:
[C]: ?
[C]: in function 'try'
[string "C:\Users\DRESI\Saved Games\DCS\Scripts\DCS-BIOS\lib\ProtocolIO.lua"]:98: in function 'send'
[string "C:\Users\DRESI\Saved Games\DCS\Scripts\DCS-BIOS\lib\ProtocolIO.lua"]:162: in function 'flush'
[string "C:\Users\DRESI\Saved Games\DCS\Scripts\DCS-BIOS\BIOS.lua"]:75: in function <[string "C:\Users\DRESI\Saved Games\DCS\Scripts\DCS-BIOS\BIOS.lua"]:72>.

 

Die alternative Batchdatei habe ich - glaube ich - schon probiert. Die war sogar aus einem Deiner Posts (ist ja nicht so, daß ich hier Panik mache, bevor ich nicht hundert Seiten Forum gelesen hätte ;)

Ich probiers aber trotzdem nochmal. Aber erst will ich diesen Post abschicken. Du weißt: Reboot droht.

 

Ach wäre das schön, wenn ich das irgendwie hin bekäme.

Bin jetzt schon seit drei Wochen nicht mehr aus dem Hangar rausgekommen. Ich glaube, mein Vogel braucht dann erstmal neue Reifen. Die aktuellen sind unten schon ganz platt gestanden.

-------------------------------------

Edit: Deine Batch funktioniert erstmal soweit. Glaube ich. Jedenfalls läuft jede Menge irrer Code das Fenster rauf.

Bloß funzt jetzt mein Button nicht mehr. Die LED sowieso nicht. Aber lass mich sehen, ob ich meanwhile was anderes kaputt gemacht habe....

 

Edit 2: ES FUNKTIONIERT!!!!

Ich hatte inzwischen, weil ich meinem UNO nicht mehr vertraut habe, schnell einen MEGA zurecht geflasht (der lag hier noch so rum). Nachdem ich den UNO wieder angeschlossen habe, funktioniert es wie verrückt.

 

Das heißt wohl, ich habe nur ein UDP-Problem...

dcs.log.txt


Edited by Tekkx

Manual for my version of RS485-Hardware, contact: tekkx@dresi.de

Please do not PM me with DCS-BIOS-related questions. If the answer might also be useful to someone else, it belongs in a public thread where it can be discovered by everyone using the search function. Thank You.

Link to comment
Share on other sites

Versuch mal, das Senden von Multicast-UDP-Paketen ganz abzuschalten, indem du in der BIOSConfig.lua die zweite Zeile auskommentierst, so dass die so aussieht:

 

BIOS.protocol_io.connections = {
-- BIOS.protocol_io.DefaultMulticastSender:create(),
BIOS.protocol_io.TCPServer:create(),
-- BIOS.protocol_io.UDPSender:create({ port = 7777, host = "192.168.1.177" }),
BIOS.protocol_io.UDPListener:create({ port = 7778 })
}

 

Vielleicht stürzt DCS dann ja auch nicht mehr ab, wenn die Mission vorbei ist.

 

PS: Welches Betriebssystem und welche Firewall/Antivirus-Software benutzt du?


Edited by [FSF]Ian
Link to comment
Share on other sites

Hey. Wieder zurück.

Habe - wie empfohlen - Multicast mal abgeschaltet.

 

DCS empfängt meinen Button wie erwartet.

DCS-BIOS bekommt aber nichts zurück.

 

Wie bekomme ich heraus, ob keine UDP-Pakete gesendet werden, oder ob die irgendwo hängen bleiben?

 

Aber - wie von Dir vermutet - hängt sich DCS nicht mehr auf.

 

Ich habe hier Win7/64 ultimate laufen.

Die Firewall ist die von Windows himself. Da habe ich zwei ExtraRegeln eingerichtet, die alle UDP-Ports (ein- UND ausgehend) öffnen.

Virenscanner ist Avira Free. Das hat m.E. keine eigene Firewall.

 

Was ich nicht verstehe (und da habe ich wohl enormen Nachholebedarf): Verlassen die UDP-Pakete überhaupt meinen Rechner?

Dachte immer, das läuft - trotz Netzwerk - nur intern.

Wenn nicht, sollte ich mir mal meine Router-Config genauer ansehen.

 

Jetzt erstmal Mädels wecken und ab zur Arbeit :)

Manual for my version of RS485-Hardware, contact: tekkx@dresi.de

Please do not PM me with DCS-BIOS-related questions. If the answer might also be useful to someone else, it belongs in a public thread where it can be discovered by everyone using the search function. Thank You.

Link to comment
Share on other sites

Richtig, die Pakete verlassen deinen Rechner nicht (außer ein anderes Gerät in deinem Netzwerk baut eine TCP-Verbindung auf oder du weist DCS-BIOS explizit an, die Daten per UDP an eine bestimmte externe IP-Adresse zu schicken, z.B. weil du einen Arduino mit Ethernet-Shield verwenden willst). Mit deinem Router hat es auf jeden Fall nichts zu tun.

 

DCS-BIOS benutzt Multicast-UDP, weil das der einzige Weg war, den ich gefunden habe, um unter Windows mehreren Programmen das gleichzeitige empfangen des Export-Datenstroms zu ermöglichen. (Die TCP-Unterstützung kam erst später.)

Ich hab DCS-BIOS unter Win7 Professional mit aktivierter Windows-Firewall entwickelt. Keine Ahnung, warum das bei dir nicht funktioniert.

 

Du kannst es mal mit "normalem" (Unicast-)UDP versuchen, das hat gegenüber TCP den Vorteil, dass die Reihenfolge, in der du das Skript und DCS startest, egal ist.

 

In der BIOSConfig.lua:

BIOS.protocol_io.connections = {
-- BIOS.protocol_io.DefaultMulticastSender:create(),
BIOS.protocol_io.TCPServer:create(),
BIOS.protocol_io.UDPSender:create({ port = 5010, host = "127.0.0.1" }),
BIOS.protocol_io.UDPListener:create({ port = 7778 })
}

(Kommentarzeichen vor Zeile 4 entfernt, IP-Adresse auf localhost gesetzt)

 

Batchdatei:

REM Specify the number of the COM port your Arduino is connected to:

set COMPORT=5



set /A TTYNUM=%COMPORT%-1
mode COM%COMPORT% BAUD=500000 PARITY=N DATA=8 STOP=1 TO=off DTR=on
socat\socat -v UDP4-RECV:5010!!udp-sendto:localhost:7778 /dev/ttyS%TTYNUM%

pause


Edited by [FSF]Ian
  • Like 1
Link to comment
Share on other sites

Was kann ich für Dich tun???? (ernst gemeint!)

Konnte es kaum erwarten, von der Arbeit nach Hause zu kommen und Deine Vorschläge anzuwenden:

ES FUNKTIONIERT. Großartig.

Vielen herzlichen Dank.

 

Nachtrag: Der Arduino MEGA 2560 funktioniert auch einwandfrei.


Edited by Tekkx

Manual for my version of RS485-Hardware, contact: tekkx@dresi.de

Please do not PM me with DCS-BIOS-related questions. If the answer might also be useful to someone else, it belongs in a public thread where it can be discovered by everyone using the search function. Thank You.

Link to comment
Share on other sites

Hey ;)

 

Vielen Dank erstmal für die viele Mühe die in diesem Projekt steckt! Hier bekommt man für sehr geringe kosten die Möglichkeit ein Cockpit aufzubauen.

 

 

Ich wollte dies heute mal -just for fun- austesten an einem 2560 Mega der hier ungenutzt zustaubt. Also nach Anleitung alle Punkte abgegangen.

 

Die connect-serial-port.cmd gibt mir eine Fehlermeldung aus:

 

"Der Befehl "mode" ist entweder falsch geschrieben oder konnte nicht gefunden werden."

 

Davon abgesehen passiert hier (in der connect-serial-port.cmd) ingame schon einiges- ähnlich wie im Video- sprich die Export.lua muss funktionieren. Auch die Rx-LED auf dem Arduino flackert stark. Die Tx-LED ist jedoch dunkel- genau wie mein Ausgang 13 "Master Caution Light" aus dem Beispiel-Sketch.

Und auch der Taster 10 "Master Caution Button" möchte in DCS nicht so wie Ich will...

 

Ich habe auch mal blind die hier angesprochenen Files abgeändert, jedoch ohne Erfolg...

 

Hast du, Ian, eine Idee woran das liegen könnte? Hat es was mit der Fehlermeldung in der .cmd zu tun?

 

Danke schonmal für dieses Projekt- sollte auch Ich es irgendwann zum laufen bekommen sehe Ich mich schon dabei wie Ich mir doch ein paar Panels bastle... :D

 

Gruß Arctic!


Edited by Arctic
Link to comment
Share on other sites

"Der Befehl "mode" ist entweder falsch geschrieben oder konnte nicht gefunden werden."

 

Der Befehl soll dafür sorgen, dass die verwendete serielle Schnittstelle auf die richtige Geschwindigkeit eingestellt ist. Benutzt du vielleicht Windows 10 oder so und Microsoft hat den entfernt?

 

Die Rx-LED blinkt, weil Daten ankommen. Die werden aber mit der falschen Geschwindigkeit gesendet, so dass der Arduino nur Müll daraus interpretiert. Die Tx-LED sollte blinken, wenn du die Taste am Arduino drückst, aber auch hier gilt: der PC wird die gesendeten Daten nicht richtig interpretieren.

 

Versuch mal, vor dem Start der Batchdatei die Geschwindigkeitseinstellung selbst vorzunehmen. Wenn ich bei mir (Windows 7) im Gerätemanager auf einen seriellen Anschluss rechtsklicke und die Eigenschaften aufrufe, gibt es einen Tab "Anschlusseinstellungen". Bits pro Sekunde muss dann auf 500000. Die anderen Einstellungen sind wahrscheinlich schon richtig eingestellt (Datenbits: 8, Parität: Keine, Stoppbits: 1, Flusssteuerung: Keine).

 

Achtung: Wenn du mit der Arduino-IDE neuen Code auf das Board lädst, werden diese Einstellungen wahrscheinlich wieder verstellt.

 

Alternativ kannst du auch den "com-handler" von ArturDCS benutzen. ArturDCS hat eine C#-Anwendung geschrieben, die dir alle seriellen Ports anzeigt; einfach auf den Button klicken und der Port wird mit DCS-BIOS verbunden.

GitHub-Seite

"Download ZIP" anklicken, entpacken, bin/DcsBiosCOMHandler.exe starten. Du brauchst dafür ein aktuelles .NET Framework (ich glaube 4.5).

Link to comment
Share on other sites

Ich verwende Windows 7.

 

Dann sollte es eine Datei C:\Windows\system32\mode.com geben, und die sollte er finden, da system32 im Suchpfad (Umgebungsvariable PATH) ist.

 

Ich verwende Windows 7 Professional (MS Dreamspark-Lizenz über die Uni). Entweder es gibt Windows-Versionen, bei denen mode.com warum auch immer nicht dabei ist, oder irgendwas ist seltsam an deinem System.

 

Wenn bei dir C:\Windows\system32\mode.com existiert, guck mal, ob die PATH-Variable richtig ist:

  • Rechtsklick auf "Computer", "Eigenschaften"
  • "Erweiterte Systemeinstellungen" (linke Seitenleiste)
  • Unter "Systemvariablen" gibt es eine die "PATH" heißt
  • PATH auswählen, "Bearbeiten", den Inhalt bei "Wert der Variablen" in die Zwischenablage kopieren, "Abbrechen"
  • In ein neues Dokument in Notepad++ einfügen
  • Strg+H ("Suchen und ersetzen"-Funktion), "Find what": ";", "Replace with:" ";\n", "Search mode": "Extended", OK. Das ersetzt das Semikolon durch Semikolon+Zeilenumbruch, um das Ganze besser lesen zu können.

Jetzt sollte ein Wert pro Zeile stehen. Einer davon sollte "C:\Windows\system32;" lauten.

Wenn nicht: wieder die Variable PATH in den Systemeinstellungen bearbeiten, "C:\windows\system32" am Ende anfügen (ggf. noch ein Semikolon davor -- das Semikolon trennt verschiedene Pfade voneinander ab).

Link to comment
Share on other sites

Hi Ian!

 

Ich kann nur Tekkx zitieren... "Konnte es kaum erwarten, von der Arbeit nach Hause zu kommen und Deine Vorschläge anzuwenden:

ES FUNKTIONIERT. Großartig."

Es lag nun tatsächlich an der fehlenden Variable (die mode.com existiert auch bei mir). Nach dem einfügen selbiger lief es dann auf anhieb ohne sonstige modifikationen!

Nun wird auch beim starten im cmd-Fenster der Status vom Arduino angezeigt inkl. Baudraten etc.

 

Ich verwende übrigens Windows 7 Home Premium 64Bit. Verändert wurde am System nichts- könnte also durchaus sein dass noch mehr Personen dieses Problem haben...

 

Vielen Dank für deine klasse Arbeit! Jetzt werde Ich erstmal ein wenig rumbasteln müssen... ;)

 

 

Gruß Arctic ! ;)


Edited by Arctic
Link to comment
Share on other sites

LCD Informationen Pressure,Altimeter,Heading

 

Hallo Gemeinde,

 

ich hoffe das ich hier richtig bin. Ich möchte mit dem Arduino ein LCD ansteuern, was soweit auch sehr gut funktioniert. Nur habe ich keinerlei Durchblick wie ich Werte richtig formatiert auf meinem LCD ausgeben kann.

 

Wie ich die Werte auf das LCD bekomme weiß ich. Nur werden da natürlich nicht die richtig formatierten angezeigt. Mir ist auch klar das ich z.B. die einzelnen Pressure Werte (Barometric Pressure Digit 0,

Barometric Pressure Digit 1...) vorher noch mappen muss. Ich hoffe ich bin da nicht auf dem Holzweg. Aber ich bekomme es einfach nicht hin.

 

Da ich diesbezüglich ein absoluter Anfänger bin, wollte ich Euch um Hilfe bitten. Also angezeigt werden soll der aktuelle Druck, die aktuelle Höhe und eventuell noch der Steuerkurs.

 

Danke schon mal im Voraus.

Link to comment
Share on other sites

Guck dir mal diesen Beitrag an.

 

Wenn da deine Frage nicht beantwortet wird, dann brauchen wir ein paar mehr Informationen (diese drei Fragen sollte jeder Bugreport beantworten):

 

  • Was hast du gemacht? (z.B. der Code deines Arduino-Sketches, je nach Problem weitere relevante Infos wie Versionsnummern der verwendeten Software)
  • Was ist passiert? (Du sagst, die Werte werden "nicht richtig formatiert angezeigt" -- aber wie werden sie denn jetzt angezeigt? Gar nicht? In römischen Zahlen? ...)
  • Was sollte statt dessen passieren? (Ist doch klar, "die Werte sollen richtig formatiert angezeigt werden". Aber wir wissen nicht, was für dich "richtig formatiert" bedeutet!)

Link to comment
Share on other sites

Genau nach diesem Beitrag habe ich mich gerichtet, und den Code auf meine Wünsche angepasst.

 

void onDcsBiosWrite(unsigned int address, unsigned int value) {

if (address == 0x1086) {
   unsigned int altPressure0Value = (value & 0xffff) >> 0;
   unsigned int altPressure0ValueMap = map(altPressure0Value,0,65535,0,9);
   lcd.setCursor(0,0);
   lcd.print(altPressure0ValueMap);
}

if (address == 0x1088) {
   unsigned int altPressure1Value = (value & 0xffff) >> 0;
   unsigned int altPressure1ValueMap = map(altPressure1Value,0,65535,0,9);
   lcd.setCursor(1,0);
   lcd.print(altPressure1ValueMap);
}

if (address == 0x108a) {
   unsigned int altPressure2Value = (value & 0xffff) >> 0;
   unsigned int altPressure2ValueMap = map(altPressure2Value,0,65535,0,9);
   lcd.setCursor(2,0);
   lcd.print(altPressure2ValueMap);
}

if (address == 0x108c) {
   unsigned int altPressure3Value = (value & 0xffff) >> 0;
   unsigned int altPressure3ValueMap = map(altPressure3Value,0,65535,0,9);
   lcd.setCursor(3,0);
   lcd.print(altPressure3ValueMap);
}

Angezeigt werden zwar Ziffern, aber die haben nichts mit der Anzeige im Cockpit zu tun. Im Moment sehe ich den Wald vor lauter Bäumen nicht und übersehe hier mit Sicherheit was ganz wichtiges. Mein Ziel ist es den Druck (4stellig) auf dem LCD anzuzeigen (aktualisiert natürlich). Und das gleiche mit der Höhe. Ich von meiner Seite her vermute das ich das Mapping falsch verstehe.

Link to comment
Share on other sites

Du mappst auf das Intervall [0, 9], nimmst also an, dass 0 = (0/9)*65535 = 0, 1 = (1/9)*65535 = 7281, ..., 9 = (9/9)*65535 = 65535.

 

Wenn du dir mal die Chrome-Extension installierst und den Wert beobachtest, wirst du feststellen, dass 0 = 0, 1 = 10%, 2 = 20%, ..., 9 = 90% ist, d.h. wenn im Display "9" steht ist der Wert nicht bei 65535 sondern erst bei 58981. Warum? Weil noch "Luft nach oben" sein muss, wenn du jetzt weiterdrehst und das Ding wieder von 9 auf 0 überläuft.

 

Versuch mal folgendes:

 

if (address == 0x1086) {
   unsigned int altPressure0Value = (value & 0xffff) >> 0;
   altPressure0Value += 3276; // 0.5 offset, damit schon bei "1,5" und nicht erst bei "2,0" auf "2" gewechselt wird (der nächste Schritt rundet wegen der Ganzzahl-Division(Integer-Datentyp) immer ab!)
   unsigned int altPressure0ValueMap = altPressure0Value / 6553;
   lcd.setCursor(0,0);
   lcd.print(altPressure0ValueMap);
}


Edited by [FSF]Ian
Link to comment
Share on other sites

Und schon wieder etwas neues aus meinem Kopf. Ich nutze für das Einstellen des Drucks einen RotaryEncoder. Dieser verfügt über einen Druckschalter. Beim Einstellen des Luftdrucks, dauert es schon ziemlich lange bis ich den gewünschten Druck erreiche. Nun möchte ich gern per druck auf den RotaryEncoder in eine 2. Ebene wechseln, in der die Werte um das zweifache schneller eingestellt werden können. Da ich ein absoluter Neuanfänger bin, in Sachen Programmierung, würde ich schon wieder Eure Hilfe brauchen. Reißt mir bitte nicht den Kopf ab...Danke

 

*edit:

 

Wer lesen kann ist klar im Vorteil....hat sich geklärt...

DcsBios::RotaryEncoder altSetPressure("ALT_SET_PRESSURE", "-3200", "+3200", PIN_A, PIN_B); Diese zwei Werte bestimmen das doch...


Edited by Rocco1980
Link to comment
Share on other sites

Hey Ian ;)

 

 

Mittlerweile habe Ich 3 Display (20x04) in Betrieb an 3 Arduinos verbunden jeweils über USB... (Nein, offenbar ist es mittlerweile kein "Just for Fun" mehr...)

 

Stoße jedoch wieder auf ein paar Probleme... ^^.

 

-Meine Displays besitzen Hardwaremäßig leider keine Möglichkeit die I2C Adresse zu ändern (sprich keine Lötbrücken). Weisst du, ob es hier möglich ist eventuell direkt a den Chip-Pins der I2C Serial Platinen die Adresse zu ändern? Dann hätte Ich die Möglichkeit, alle Displays an einem Arduino zu betreiben- Also ein Sketch, ein Com-File, ein verwendeter USB-Steckplatz,...?

 

Edit/: Geschafft... Alle Adress-Pins lagen über die Platine auf +5V. Legt man diese einmalig auf GND ändert sich die Adresse bis Ub wegfällt. Also ein wenig getrickst, um diese dauerhaft auf GND zu legen. Die Display's haben nun die Adressen 0x24,0x25 und 0x26. 0x27 Habe Ich mir damit mal freibehalten, um später einfach noch ein weiteres Display anzubinden. Morgen werde Ich das ganze mit DCS Bios testen.

 

-Ausserdem ist mir aufgefallen, dass in der Documentation sowohl beim VHF AM als auch VHF FM der zweite sowie der dritte Funkfrequenzwert (String) fehlt- oder übersehe Ich dies in der Doku...? 0.o (Siehe auch angehängtes Bild- 12 4 .0 00 - die rot markierten Werte fehlen...)

 

-Dann habe Ich ein Video gesehen, in dem gezeigt wird, dass auch Werte die nicht als String vorliegen angezeigt werden können- im Video z.b. der FuelFlow eines Triebwerks im Klartext. (

)

 

-Dann noch eine Zusatzfrage: Wie lautet der Befehl, um einen Text anzeigen zu lassen- wie bspw TCN vor die Tacan-Frequenz oder ILS vor die ILS Frequenz?

 

 

Ansonsten kann Ich nur sagen- es läuft Perfekt !!!:thumbup::thumbup::thumbup:

 

 

Gruß Denny

IMG_8259.thumb.JPG.291846cd79f50eb1e3680822f6f95ef6.JPG


Edited by Arctic
Link to comment
Share on other sites

-Ausserdem ist mir aufgefallen, dass in der Documentation sowohl beim VHF AM als auch VHF FM der zweite sowie der dritte Funkfrequenzwert (String) fehlt- oder übersehe Ich dies in der Doku...? 0.o (Siehe auch angehängtes Bild- 12 4 .0 00 - die rot markierten Werte fehlen...)

 

Bei Werten, die bei 0 anfangen, gibt es keinen extra String-Export, weil du genauso gut den Integer-Wert an dein Display durchreichen kannst.

Ausnahme: der Wert wird zweistellig (weil Arduino-Libraries i.d.R. kein printf() haben, mit dem man Zahlen direkt rechtsbündig ausgeben kann, stattdessen muss man einen temporären Buffer und sprintf() benutzen, aber trotzdem ist hier der extra String-Export eigentlich die falsche Design-Entscheidung).

 

Ein Integer-Wert von 0 bis 9 braucht nur 4 Bits im Export-Datenstrom, ein String-Export braucht 8 Bit pro Zeichen. Jedes Byte, das ich nicht übertragen muss, muss der Arduino auch nicht verarbeiten.

 

Die nächste Version der Arduino-Library wird Integer- und String-Exports ein bisschen konsistenter behandeln (es wird einen IntegerBuffer analog zum StringBuffer geben und onDcsBiosWrite() wird entfallen). Kann aber noch ein paar Monate dauern.

 

-Dann habe Ich ein Video gesehen, in dem gezeigt wird, dass auch Werte die nicht als String vorliegen angezeigt werden können- im Video z.b. der FuelFlow eines Triebwerks im Klartext. (

)

 

-Dann noch eine Zusatzfrage: Wie lautet der Befehl, um einen Text anzeigen zu lassen- wie bspw TCN vor die Tacan-Frequenz oder ILS vor die ILS Frequenz?

 

lcd.print("Mein Text:")

Das kannst du im "Hello, World"-Beispiel nachlesen, das mit der Arduino-IDE geliefert wird.


Edited by [FSF]Ian
Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...