Jump to content

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


FSFIan

Recommended Posts

ich kümmere mich darum das die Module zeitnah aktuell bzw verfügbar sind.

 

Hilfe bei programmieren direkt nehme ich ungern an da: Viele Köche.......

 

anregungen, kritik und verbesserungen sind natürlich jederzeit willkommen.

 

ABER es wird nur für die version 0.7.XX die neuen module geben, da ich diese nicht in die 0.10 integrieren kann. Und IAN zZ nicht programmiert.

Auch gibt es keine updates für die 0.10 Module, da ich nicht für alle Module auf github die rechte habe.

 

zb ist die F-18 nicht update bar für mich in 0.10, somit ist die in 0.7 weiter bzw stand letze beta.

 

Kiowa wird kommen sobald sie verfügbar ist. (habe einige anfragen erhalten).

 

Kleiner Tip: Wenn man die luas und json aus der 0.7 version nimmt und manuel die der 0.10 überscheibt hat man auch die neusten. ;) nur sollte man dann die autoupdate funktion nicht mehr nutzen.

 

gerne verweise ich auch auf unseren discord (siehe sig)


Edited by BlackLibrary
Link to comment
Share on other sites

  • 1 month later...

Hallo Jungs,

 

 

ich bin gerade dabei, mein verstaubtes Tischcockpit mittels DCS BIOS zum laufen zu bekommen. Nach mehrjähriger Pause habe ich alles noch einmal neu verkabelt und bin nun dabei meine Arduino Sketche neu zu bauen.

 

 

Jetzt die Frage an Euch. Ich habe ein LCD auf dem ich die aktuelle Position der A-10 anzeigen lasse. Dafür nutze ich die CommonData "Position" mit Latitude und Longitude Angaben.

 

 

Auf der Karte im Kaukasus funktioniert das alles sehr gut. Nur auf den Karten die einen westlichen Bezug haben, wird ein Longitude Degrees von 0° zurückgegeben. Muss ich diesen durch eine Berechnung ermitteln? Wenn ja, wie? Oder stimmt hier etwas nicht ????

 

 

Hier noch die zugehörige Funktion:

 

 

Longitude Degrees

 

 

void onLonDegChange(unsigned int newValue) {

/* your code here */

}

DcsBios::IntegerBuffer lonDegBuffer(0x0428, 0x003f, 0, onLonDegChange);

 

 

Nachvollziehen kann es jeder, wenn er sein DCS BIOS Web Interface startet, und unter Control Reference auf Common Data geht. Dort auf Position und dann seine A-10 mal auf Nevada stellt.

 

 

Vielen Dank schon mal im Voraus...

Link to comment
Share on other sites

Ja das ist auch so. Aber ich vermute das eventuell im DCS BIOS in der Implementierung etwas angepasst werden muss. Ich deute mal auf "unsigned int". Der Wert wird aus DCS ausgelesen und wird mit Sicherheit negativ sein. Wie dann die weitere Verarbeitung innerhalb DCS BIOS von statten geht, entzieht sich meiner Kenntnis. Meine Vermutung liegt darin, da der Wert mathematisch negativ sein müsste, dass dieser als Integer unter den Tisch fällt, und somit 0 übergeben wird....

Link to comment
Share on other sites

Nun hätte ich doch noch einmal eine Frage. Habe nun einige Beiträge gelesen und auch Mister Google dazu befragt, aber mein Scenario kam da nie so richtig vor.

 

 

Ich konzentriere mich hier komplett auf die A-10C und habe dafür unter anderem einen Rotary-Knob mit dem ich den Altimeter Pressure einstelle. Soweit funktioniert das sehr gut. Nun hat dieser Rotary-Knob noch eine Druckfunktion, die ich gern dafür nutzen möchte, um den Standard Druck "2992" einzustellen. Es soll also ein Kommando an DCS übermittelt werden, mit dem Value "2992", der natürlich vorher noch umgerechnet werden muss.

 

 

Mir fehlt irgendwie der Ansatz, wie ich, ala Action Button, mittels einer Funktion einen Wert an DCS übergeben kann.

 

 

Vielleicht hat der Eine oder Andere dafür einen helfenden Hinweis.

 

 

Vielen Dank schon mal...

Link to comment
Share on other sites

  • 2 weeks later...

Da heir alles etwas durcheinander ist.. wie ist das denn in DCS im Aktuellen Stand

- Welches FOV (unabhängig von den Bildschirmen) ist denn Möglich? 180°? 270°

- Kann ich alle Anzeigen, Leuchten, Displays etc. mit einem Programm auslesen und auch extern ansteuern?

- Kann ich HUD, und andere Anzeigen auf andere Bildschirme übertragen?

- Kann eventuell sogar Daten via Netzwerk an andere Rechner schicken?

 

Sprich, gibt es in DCS auch sowas wie ne ShardedMemory wo all das relativ gut dokumentiert drin steht? Oder ist DCS nach wie vor nen riesen Gebastel für Pitbauer bzw. eher ne unmögliche Baustelle? Weil in den Optionen oder so hab ich gar nix gefunden...

DCS F-16C Blk. 40/42 :helpsmilie:

Candidate - 480th VFS - Cupra | 06

Link to comment
Share on other sites

  • 1 year later...

Hallo Leute,

ich weiß nicht, wie ich mein Problem verständlich schildern soll, aber ich versuchs mal.

 

Ich versuche das ManualTrim-Panel der F-16 mit Alps-Motorpotentiometer (https://www.ebay.de/itm/264035904145) zu realisieren.

Mein Problem ist, dass das Motorpoti immer in der Position 512 gehalten wird, auch wenn sich der Pitch-Wert in DCS-BIOS ändert.

Ich muss dazu sagen, dass ich absoluter Arduino-Neuling bin und erst vor kurzem angefangen habe, mich mit der Programmierung zu befassen.

 

Irgendwie wird der Pitch-Wert, der von DCS-BIOS kommt nicht in den pitch-Wert des Sketches übertragen.

 

Was mache ich falsch? Wäre schön, wenn mir jemand weiterhelfen könnte.

 

 

//#define DCSBIOS_RS485_SLAVE 28
//#define TXENABLE_PIN 2
#define DCSBIOS_DEFAULT_SERIAL
#include "DcsBios.h"

const int input1 = 3; // Input1 L293D
const int input2 = 5; // Input2 L293D
const int motPitchPot = A0; // Poti Alps Motorpotentiometer

unsigned int pitch = 512;

void onPitchTrimChange(unsigned int newValue) {
  unsigned int pitch = newValue;
  map(pitch, 0, 65535, 0, 1023);
}
DcsBios::IntegerBuffer pitchTrimBuffer(0x4404, 0xffff, 0, onPitchTrimChange);

void setup() {
    DcsBios::setup();
    pinMode(input1, OUTPUT);
    pinMode(input2, OUTPUT);
    pinMode(motPitchPot, INPUT);
}

void loop() {
  if(analogRead(motPitchPot) > pitch)
{
  digitalWrite(input1, HIGH);
  digitalWrite(input2, LOW);
}

if(analogRead(motPitchPot) < pitch)
{
  digitalWrite(input1, LOW);
  digitalWrite(input2, HIGH);
}
  DcsBios::loop();
}

Link to comment
Share on other sites

  • 4 weeks later...
  • 1 month later...

Hallo Zusammen

 

Ich brauche eine kleine Hilfestellung bei meinen Problem.

 

Ich baue grad mein Huey Cockpit um und hatte die Idee die Instrumente der Huey mittels Servo anzuzeigen.

 

Bevor ich diesen Schritt überhaupt wage wollte ich einmal ein beliebiges Instrument mit ein Servo Ansteuern um zu gucken ob es Überhaaupt Funktioniert.

 

Vorab: Ich habe vor Monaten alle Radio Panels mit 7 Segment Anzeigen Angesteuert. Funktioniert alles.

Selbst die ADF Signalanzeige mit ein Servo Funktioniert.

 

Nun zu meinen Problem.

 

Ich bekomme kein Servo Angesteuert um die Instrumente im Instrumentenbrett zu Simulieren. 

 

Vielleicht hat ja jemand eine Idee oder Tipp wie ich das ganze lösen kann.

 

Ich verwende ein Adurino Mega.

 

Folgenen Code habe ich ausprobiert für den 

RMI Course Pointer 1.

 

#include <Servo.h>

#define DCSBIOS_IRQ_SERIAL
#include "DcsBios.h"

//
DcsBios::ServoOutput rmiCrs1(0x1436, 9, 544, 2400, [](unsigned int newValue) -> unsigned int {

 
   return map(newValue, 0, 65535, 544, 2400);
 });


void setup() {
 DcsBios::setup();
}

void loop() {
 DcsBios::loop();
}

 

Mache ich vielleicht einen Denkfehler?

Vorher hatte ich einen anderen Code ausprobiert, wo der Servo Reagiert hat, aber endlos lief.

MfG

 

Link to comment
Share on other sites

  • 1 month later...

Hallo in die Runde,

 

über die Suchfunktion hab ich jetzt hier nichts entsprechendes gefunden, daher versuche ich mal mein Glück.

Ich bin derzeit dabei mir ein UFC für die AV8B zu bauen. Alle meine Buttonboxes etc. (bin aus dem Simracing Bereich) laufen über MMjoy2 und die Displays über Simhub.

Letzteres unterstützt leider kein DCS, ersteres hat den großen Vorteil, dass die Geräte als Eingabegerät erkannt werden und daher universell einsetzbar sind, kann aber keine Displays.

Da ich auch noch ein paar 7-Segment Displays hier liegen habe würde es sich natürlich anbieten, hier auf DCS-Bios zu wechseln um dann auch das Scratchpad mit zu integrieren. Durch die Anzahl der Buttons komme ich aber nicht um eine Matrixverkabelung herum (25 Buttons + Achsen etc.). Hat das schon jemand in dem Code von DCS Bios gelöst?
Ich hab leider keine Ahnung von Arduino Programmierung und bin gerade mal in der Lage copy&paste zu machen. Da hab ich also keine Ahnung wie und ob ich die Joystick Library in den Code integrieren kann, mit dem in anderen Codes die Buttonmatrix gelöst wird.

 

Freue mich über jeden Tipp 🙂


Edited by EmoJack
Link to comment
Share on other sites

  • 2 months later...

Moin,

ich hoffe dieser Thread ist noch nicht tot 😉

Ich nutz DCS-BIOS für meine Button Boxes aufgrund der Fähigkeit durch DCS LEDs zu schalten und Encoder einzubinden.

Ich habe nun bei meinem Ka-50 Datalink Panel das Phänomen, dass die LEDs z.T. zufällig aufleuchten. Die LED bleiben dann an und flackern nicht. Wenn dies im Ka-50 passiert erlöschen die Lichter wenn ich eine Taste drücke die in DCS mit einem Tastendruck verknüpft ist.
Das Aufleuchten ist unabhängig davon, ob ich den Ka-50 fliege oder nicht. z.T. geschieht dies (wiederholbar) beim Vorspulen im Singleplayer.
Jedoch auch während der normalen Benutzung im Multiplayer / Singleplayer.

Der Code anbei. Ich nutze einen Arduino MEGA.

Den Delay im Loop habe ich hinzugefügt, weil ich ohne Mehrfachbetätigungen der Tasten habe.
 

#define DCSBIOS_DEFAULT_SERIAL

#include "DcsBios.h"

// LED
DcsBios::LED dlnkTargetVehicleLed(0x180e, 0x0080, 5);
DcsBios::LED dlnkTargetSamLed(0x180e, 0x0200,     3);
DcsBios::LED dlnkTargetOtherLed(0x180e, 0x0800,   2);
DcsBios::LED dlnkTargetPointLed(0x180e, 0x2000,   4); // Haus bzw. Initialpunkt

DcsBios::LED dlnkWingmanAllLed(0x180c, 0x2000,    6);
DcsBios::LED dlnkWingman4Led(0x180e, 0x0020,      7);
DcsBios::LED dlnkWingman3Led(0x180e, 0x0008,      9);
DcsBios::LED dlnkWingman2Led(0x180e, 0x0002,      8);
DcsBios::LED dlnkWingman1Led(0x180c, 0x8000,      11);

DcsBios::LED dlnkSendLed(0x180c, 0x0020,    10);
DcsBios::LED dlnkEscapeLed(0x180c, 0x0080,  12); // DL ingreass
DcsBios::LED dlnkEraseLed(0x180c, 0x0200,   14);
DcsBios::LED dlnkCleanLed(0x180c, 0x0800,   16);

// Buttons
DcsBios::Switch2Pos dlnkTargetVehicleBtn("DLNK_TARGET_VEHICLE_BTN", 41);
DcsBios::Switch2Pos dlnkTargetSamBtn("DLNK_TARGET_SAM_BTN",         42);  
DcsBios::Switch2Pos dlnkTargetOtherBtn("DLNK_TARGET_OTHER_BTN",     40);
DcsBios::Switch2Pos dlnkTargetPointBtn("DLNK_TARGET_POINT_BTN",     39); // Haus bzw. Initialpunkt

DcsBios::Switch2Pos dlnkWingman1Btn("DLNK_WINGMAN_1_BTN", A14); //
DcsBios::Switch2Pos dlnkWingman2Btn("DLNK_WINGMAN_2_BTN", 32); //
DcsBios::Switch2Pos dlnkWingman3Btn("DLNK_WINGMAN_3_BTN", 34); //
DcsBios::Switch2Pos dlnkWingman4Btn("DLNK_WINGMAN_4_BTN", 36); //
DcsBios::Switch2Pos dlnkWingmanAllBtn("DLNK_WINGMAN_ALL_BTN", 38); //

DcsBios::Switch2Pos dlnkCleanBtn("DLNK_CLEAN_BTN",    46);
DcsBios::Switch2Pos dlnkEraseBtn("DLNK_ERASE_BTN",    44); // Clear
DcsBios::Switch2Pos dlnkEscapeBtn("DLNK_ESCAPE_BTN",  47); // DL ingress
DcsBios::Switch2Pos dlnkSendBtn("DLNK_SEND_BTN",      45);

void setup() {
  DcsBios::setup();
}

void loop() {
  DcsBios::loop();
  delay(50);
}

 


Edited by Hajime
Mikrocontroller veressen
Link to comment
Share on other sites

  • 1 month later...

Nicht viel los hier bei DCS-BIOS 😞
Hat jemand zufällig herausgefunden, warum DCS-BIOS den PC-Speicher bis zum Platzen auffüllt? Zuvor fallen alle COM Ports weg. Im Taskmanager steht dann beim Bios ein rotes "98% Speicher belegt" und das bei 32Gbyte RAM. Irgendwie wird da ein Speicherüberlauf erzeugt. Wer hat das programmiert?

 

Link to comment
Share on other sites

  • 2 weeks later...

Aber das Hauptproblem ist das ständige disconnecten der belegten Com Ports 😞  NA der Stromversorgung liegts nicht. Erst wenn DSC-BIOS (V10...) startet wird wackelig. Ist das ein bekanntes Problem? Hat das jemand von euch wegbekommen?

Link to comment
Share on other sites

  • 1 month later...

DCS BIOS: F/A-18 UFC Displays

Hallo zusammen

Ich bin neu hier im Forum und mache meine ersten Schritte in der DCS-Bios Programmierung.

Ich bin gerade am letzten Schliff von meinem Desktop-Cockpit der F/A-18 und habe ein DCS-Bios Problem, bei dem ich nicht weiter komme und hoffe, dass ihr mir helfen könnt.

Für das UFC habe ich sechs OLED Display Blau I2c 128x32 0.91’’ die ich über einen 8-Kanal I2C-Multiplexer TCA9548A ansteuere.
Mit Google, Youtube und Co bin ich soweit gekommen, dass die Displays grundsätzlich funktionieren und die richtigen Werte anzeigen.
Nun stehe ich jedoch an dem Punkt an, dass die Display Inhalte aus mehreren Strings bestehen.

Beispiel Optiondisplay 1: onUfcOptionCueing1Change + onUfcOptionDisplay1Change
Der Inhalt von meinem Void-Teil (heisst glaube ich Methode?) sieht folgendermassen aus:

  TCA9548A(3);
  display.clearDisplay();
  display.setCursor(20, 10);
  display.print(newValue);
  display.display();

Wenn ein Wert ändert, wird das Display gelöscht damit Platz für den neuen Wert vorhanden ist.
Mit clear.Display() wird das gesamte Display gelöscht und somit auch der zweite Teil vom Displayinhalt.
Solange sich dort nichts ändert, wird der zweite Teil nicht neu geschrieben und bleibt somit leer.

Nun meine Frage: Kann ich die mehrteiligen Strings irgendwie zu einem String kombinieren so dass ich für jedes Display nur einen Void-Teil (Methode?) brauche?
Oder gibt es eine andere einfache Lösung wie dieses Problem lösen kann?

Der gesamte Code findet ihr hier: https://paste.ofcode.org/7vsqDhNditS8HjLFduhN3u

Mehr über mein Projekt:
-230 funktionierende Schalter und Tasten
-3 funktioniernede Displays
-5 Leo Bodnar Boards mit 64 Anschlüssen
-ca. 2 Jahre und unzählige Stunden Entwicklungs- & Bauzeit
www.facebook.com/HornetDesktopPit

Gruss aus der Schweiz

IMG_20220423_170758.jpg

Link to comment
Share on other sites

hi,

das einfachste ist wohl das display nicht zu löschen sondern einfach den passenden bereich mit einem schwarzen rechteck zu überschreiben.
also

display.fillRect(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint16_t color);

anstatt

display.clearDisplay()

benutzen.

 

Link to comment
Share on other sites

Hey triscan

Vielen Dank für deine schnelle Antwort!
Simpel und clever! Hab das gleich ausprobiert und das funktioniert so! 🙂

Nun kommt jedoch gleich das nächste Problem:

Solange ich nur ein Display anspreche, funktioniert alles wie es soll. Sobald aber mehr als ein Display beteiligt ist, kommen Werte und Displays durcheinander.
Ich bin mir ziemlich sicher, dass sich der Multiplexer da irgendwie verzählt.

Muss ich dem noch irgendwie sagen, dass ich nur die "Ausgänge" 2-7 brauche?

Das müsste dieser Codeteil sein:

void TCA9548A(uint8_t bus)
{
  Wire.beginTransmission(0x70);
  Wire.write(1 << bus);
  Wire.endTransmission();
}

 

 

Link to comment
Share on other sites

hi,

ich habe noch nichts mit einem I2C Multiplexer gemacht, bezweifel aber das der sich verzählt.

Speicher mal die newValue in eigene Variablen.

z.b.

char* Cue[5];

void onUfcOptionCueing1Change(char* newValue) {
  Cue[1] = newValue;
  TCA9548A(3);
  display.clearDisplay();
  display.setCursor(0, 10);
  display.print(Cue[1]);
  display.display();
}
DcsBios::StringBuffer<1> ufcOptionCueing1Buffer(0x7428, onUfcOptionCueing1Change);

usw.

 

dann kannst du auch alle Variablen speichern und die Display's dann im loop nacheinander ausgeben.

oder die display's wie ursprünglich gewollt zusammenfassen.

TCA9548A(3);
display.clearDisplay();
display.setCursor(0, 10);
display.print(Cue[1]);
display.setCursor(20, 10);
display.print(Dis[1]);
display.display();

oder, oder, oder 🙂

 

hoffe das hilft, bzw funktioniert.

 

Link to comment
Share on other sites

hey

vielen dank für deine unterstützung!
ich habe die newValues mal in eigene variablen geschrieben und so nach einigem trial and error das ufc mehr oder weniger zum laufen gebracht!

ich hab jetzt aber noch einen effekt, den ich mir nicht erklären kann:
das aktualisieren der displays dauer relativ lange und auch wenn ich nichts drücke, werden da immer wieder werte mit komischen inhalten angezeigt.
das angehängte video zeigt das am besten.
Ich habe darin folgende tasten gedrückt:
AP → IFF → TCN → AP

es sieht so aus, als ob da parallel noch etwas anderes mitläuft...?
evtl. überschneiden sich DcsBios::loop(); und der rest vom loop?
oder was könnte das sein?

meinen aktuellen code hab ich hier hochgeladen:
https://paste.ofcode.org/bU23iwat6VquM7wMsDSebm

Video:

https://1drv.ms/v/s!AvSY78E0mAP8golQzyzZJVdamnSCRg?e=6tqrLQ

 


Edited by ghostrider432
Link to comment
Share on other sites

  • Recently Browsing   0 members

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