Jump to content

DCS-BIOS Discussion Thread


FSFIan

Recommended Posts

Goodnight, in your code I see the following

 

#define DCSBIOS_IRQ_SERIAL

#define BACKLIGHT_PIN 3

#include <LiquidCrystal_I2C.h>

#include <Wire.h>

#include <Servo.h>

#include <DcsBios.h>

LiquidCrystal_I2C lcd1(0x21, 3, POSITIVE);

LiquidCrystal_I2C lcd2(0x27, 3, POSITIVE);

 

I think #include <DcsBios.h> should be #include "DcsBios.h"

Also not sure why #include <Servo.h> is there.

If you look at the template from dcs-bios-arduino-library-0.2.5 , you can see the latest format there. I maybe wrong though. I'm not a software programmer but sometimes I can use the rules from sesame street where you compare this vs that to see what doesn't match.

  • Like 1
Link to comment
Share on other sites

... I can use the rules from sesame street where you compare this vs that to see what doesn't match.

LOL

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

I need the help of someone who knows how to write code. For my TACAN I'm using an adafruit alphanumeric display. When the Mode dial is turned to OFF position, I'm trying to blank the display so that it appears off. So I need to call the onTacanChannelChange routine not only when the Tacan frequency changes, but also when the Mode dial changes from the off position.

 

The problem is I store the latest string from onTacanChannelChange to the variable name TACAN, however when I try to update the display by calling the onTacanChannelChange routine from the onTacanModeChange routine, it will NOT let me pass the variable name TACAN to onTacanChannelChange.

 

The error message is choking on the char* expression from the code

void onTacanChannelChange(char* newValue) {}.

 

So what code should I write to pass a stored string to that routine? I listed my code below.

The work around I used is that I hard coded a character value to pass to the routine but it has a side effect of displaying garbage when I first move from the off position and it stays displaying garbage unitl I rotate the freq knob to get the display to update.

 

#define DCSBIOS_DEFAULT_SERIAL

#include "DcsBios.h"

#include <Wire.h> // this library is needed to drive i2C

#include "Adafruit_LEDBackpack.h" // vendor custom library

#include "Adafruit_GFX.h" // vendor custom library

 

Adafruit_AlphaNum4 alpha4 = Adafruit_AlphaNum4();

 

String TACAN = ""; // Declare global new string variable

char Digit0 = ""; // Declare global new character variable

char Digit1 = "";

char Digit2 = "";

char Digit3 = "";

int TACAN_power = 0;

 

// TACAN Mode Dial

const byte tacanModePins[5] = {7, 8, 9, 10, 11};

DcsBios::SwitchMultiPos tacanMode("TACAN_MODE", tacanModePins, 5);

 

void onTacanModeChange(unsigned int newModeValue) {

TACAN_power = newModeValue; // If Mode knob is set to Off, this value will be 0.

 

if (TACAN_power == 0 || TACAN_power == 1) // Is mode knob off, or next position over

{

onTacanChannelChange (TACAN); // Call routine to write blanks to the display if power goes from off to on, or on to off. Otherwise, no need to refresh display

}

}

DcsBios::IntegerBuffer tacanModeBuffer(0x1168, 0x000e, 1, onTacanModeChange);

 

// TACAN Channel

void onTacanChannelChange(char* newValue) {

TACAN = newValue; // Store incoming char string to a new string variable name

Digit0 = TACAN.charAt(0); // grab individual char value at that specific index in the string

Digit1 = TACAN.charAt(1);

Digit2 = TACAN.charAt(2);

Digit3 = TACAN.charAt(3);

 

if (TACAN_power == 0)

{

alpha4.writeDigitAscii(0, ' '); // Blank Display if Mode knob is set to Off.

alpha4.writeDigitAscii(1, ' '); // 0 is left most display, 3 is right most display

alpha4.writeDigitAscii(2, ' ');

alpha4.writeDigitAscii(3, ' ');

}

else

{

alpha4.writeDigitAscii(0, Digit0); // Send only that character at that specific location to the specific digit

alpha4.writeDigitAscii(1, Digit1); // 0 is left most display, 3 is right most display

alpha4.writeDigitAscii(2, Digit2);

alpha4.writeDigitAscii(3, Digit3);

}

 

alpha4.writeDisplay(); // Write command to display characters stored in the chip buffer

}

DcsBios::StringBuffer<4> tacanChannelBuffer(0x1162, onTacanChannelChange);

Link to comment
Share on other sites

@ GSS Rain. thanks spot on I thought it was summat simple. now on to the other 6 panels.

AMD A8-5600K @ 4GHz, Radeon 7970 6Gig, 16 Gig Ram, Win 10 , 250 gig SSD, 40" Screen + 22 inch below, Track Ir, TMWH, Saitek combat pedals & a loose nut behind the stick :thumbup:

Link to comment
Share on other sites

When the Mode dial is turned to OFF position, I'm trying to blank the display so that it appears off.

 

This requires a slightly different approach to get it right for all of the edge cases. Note that the contents of your display now depend on two pieces of cockpit state info: the selected TACAN channel and the state of the TACAN mode dial. Your sketch needs to monitor both of these values and update the display whenever one of the two changes.

 

The code examples from the control reference pass a callback function to the StringBuffer or IntegerBuffer class that gets called whenever the monitored value changes. However, you can also choose not to pass a callback function at all and manually check for changes in your loop() function. That is the most elegant way to monitor two different values at once.

 

Here's an example that should get you started. My usual disclaimer applies -- I didn't bother to grab all the libraries and see if it compiles.

 

#define DCSBIOS_IRQ_SERIAL

#include "DcsBios.h"

#include <Wire.h> // this library is needed to drive i2C
#include "Adafruit_LEDBackpack.h" // vendor custom library
#include "Adafruit_GFX.h" // vendor custom library

Adafruit_AlphaNum4 alpha4 = Adafruit_AlphaNum4();


// we need to monitor both the TACAN channel:
DcsBios::StringBuffer<4> tacanChannelBuffer(0x1162, NULL);
// and the mode switch:
DcsBios::IntegerBuffer tacanModeBuffer(0x1168, 0x000e, 1, NULL);

void setup() {
 alpha4.begin(...) // or whatever else you need to do to initialize that display

 DcsBios::setup();

}

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

 if (tacanChannelBuffer.hasUpdatedData() || tacanModeBuffer.hasUpdatedData()) {
   // if either of those values has been updated, update the display
   if (tacanModeBuffer.getData() == 0) {
     // mode dial in OFF position
     alpha4.writeDigitAscii(0, ' '); // Blank Display if Mode knob is set to Off.
     alpha4.writeDigitAscii(1, ' '); // 0 is left most display, 3 is right most display
     alpha4.writeDigitAscii(2, ' ');
     alpha4.writeDigitAscii(3, ' ');
   } else {
     char* channelStr = tacanChannelBuffer.getData();
     alpha4.writeDigitAscii(0, channelStr[0]);
     alpha4.writeDigitAscii(1, channelStr[1]);
     alpha4.writeDigitAscii(2, channelStr[2]);
     alpha4.writeDigitAscii(3, channelStr[3]);
   }
 }
}

Link to comment
Share on other sites

Unfortunately, the only way to learn about those right now is to read the code. I don't think I documented them anywhere so far.

 

The short version:

each IntegerBuffer or StringBuffer sets a flag (the "dirty bit") whenever it receives new data. The hasUpdatedData() method returns the status of the dirty bit. The getData() method always returns the last received value (or 0 respectively the empty string if the sketch just started up and no data has been received yet). Calling getData() will also clear the dirty bit.

 

Think of the dirty bit as the little flag on a US mailbox that the postman sets when new mail has arrived and that is reset when the mailbox is emptied.

 

If you supply your own callback function, this is the logic that the class will do for you:

if (hasUpdatedData()) {
   if (callback) {
       callback(getData());
   }
}

Every time DcsBios::loop() is called, the dirty bit is checked. When it is set, getData() is called -- clearing the dirty bit -- and the value is passed to your callback function. That logic works for most cases. If you need anything else (such as in this example), you should pass no callback function (to avoid clearing the dirty bit before your own code checks for it) and implement whatever logic you need in your loop() function.

Link to comment
Share on other sites

A little question, if i want to put a stepper have i to make a stepper.h file for dcs bios or can i use the stepper library from arduino?

 

I read that AccelStepper.h was a good one to use. I used this one time as a test run for the engine panel gauges. It includes several example sketches in its library. It can be downloaded here :

 

http://www.airspayce.com/mikem/arduino/AccelStepper/

 

But I went with servo motors instead for the engine gauges because they use just one I/O point from the arduino card vs 4 from some stepper motors.

 

I believe you just need the following references to make it work with DCS Bios.

 

#define DCSBIOS_IRQ_SERIAL

#include "DcsBios.h"

#include <Wire.h>

#include <AccelStepper.h>

Link to comment
Share on other sites

[FSF]Ian, I tried the code and it highlighted the following line and gave me an error message in the view window. I googled the error and it seams to be related to the following term : How to implement Inheritance in C++ and resolve the error “parent class is not accessible base of child class”?

 

if (tacanChannelBuffer.hasUpdatedData() || tacanModeBuffer.hasUpdatedData()) {

 

 

Arduino: 1.6.12 (Windows 10), Board: "Arduino Nano, ATmega328"

In file included from C:\Users\Joseph\Documents\Arduino\libraries\dcs-bios-arduino-library-0.2.5/DcsBios.h:10:0,

from C:\Users\Joseph\Documents\Arduino\Digital Combat Simulator\Version 0.5.0\TACAN_Panel\TACAN_Panel.ino:15:

C:\Users\Joseph\Documents\Arduino\libraries\dcs-bios-arduino-library-0.2.5/ExportStreamListener.h: In function 'void loop()':

C:\Users\Joseph\Documents\Arduino\libraries\dcs-bios-arduino-library-0.2.5/ExportStreamListener.h:79:9: error: 'bool DcsBios::Int16Buffer::hasUpdatedData()' is inaccessible

bool hasUpdatedData() { return (this->flags & DIRTY); }

^

TACAN_Panel:80: error: within this context

if (tacanChannelBuffer.hasUpdatedData() || tacanModeBuffer.hasUpdatedData()) {

^

TACAN_Panel:80: error: 'DcsBios::Int16Buffer' is not an accessible base of 'DcsBios::IntegerBuffer'

exit status 1

within this context

 

This report would have more information with

"Show verbose output during compilation"

option enabled in File -> Preferences.

Link to comment
Share on other sites

Hi. , i m thinking about 360° servos too ... but for the moment it s difficult for me to find them here....

 

 

I read that AccelStepper.h was a good one to use. I used this one time as a test run for the engine panel gauges. It includes several example sketches in its library. It can be downloaded here :

 

http://www.airspayce.com/mikem/arduino/AccelStepper/

 

But I went with servo motors instead for the engine gauges because they use just one I/O point from the arduino card vs 4 from some stepper motors.

 

I believe you just need the following references to make it work with DCS Bios.

 

#define DCSBIOS_IRQ_SERIAL

#include "DcsBios.h"

#include <Wire.h>

#include <AccelStepper.h>

With respect

_________________

Kadda

_________________

My works

TL-39 (NewGen) project (Ру)/(EN)

Link to comment
Share on other sites

Hi Kada,

 

I don't think you will find a 360° servo. They are usually up to 180° max. I used my 3D printer to print out a 1 to 2 gear ratio to achieve the necessary swing on the needle pointer. I used a small 18 tooth gear on the pointer and a 36 tooth gear on the servo. Unfortunately, your options are limited without the gears. Tower Pro Micro Servo 9g is a popular motor. I called the manufacturer and also Servocity and no one makes a gear set that fits the output shaft. So I went to a few popular 3D CAD sites such as Thingiverse or GrabCAD, etc... and download a gear set and then scaled it to fit.

 

This site has some servo gears so you can get an idea. However, the smallest gear that they sell fits the motor that's one size larger than the TowerPro Micro 9G.

 

https://www.servocity.com/motion-components/rotary-motion/gears/servo-mount-gears

Link to comment
Share on other sites

error “parent class is not accessible base of child class”?

 

if (tacanChannelBuffer.hasUpdatedData() || tacanModeBuffer.hasUpdatedData()) {

 

Should be fixed in the new v0.2.6 release of the Arduino library.

 

You can now also set the number of steps per detent for rotary encoders with a new optional argument like this:

DcsBios::RotaryEncoder tacan1("TACAN_1", "DEC", "INC", 3, 4, DcsBios::TWO_STEPS_PER_DETENT);

 

Use one of

DcsBios::ONE_STEP_PER_DETENT

DcsBios::TWO_STEPS_PER_DETENT

DcsBios::FOUR_STEPS_PER_DETENT


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

Hi Kada,

 

I don't think you will find a 360° servo. They are usually up to 180° max. I used my 3D printer to print out a 1 to 2 gear ratio to achieve the necessary swing on the needle pointer. I used a small 18 tooth gear on the pointer and a 36 tooth gear on the servo. Unfortunately, your options are limited without the gears. Tower Pro Micro Servo 9g is a popular motor. I called the manufacturer and also Servocity and no one makes a gear set that fits the output shaft. So I went to a few popular 3D CAD sites such as Thingiverse or GrabCAD, etc... and download a gear set and then scaled it to fit.

 

This site has some servo gears so you can get an idea. However, the smallest gear that they sell fits the motor that's one size larger than the TowerPro Micro 9G.

 

https://www.servocity.com/motion-components/rotary-motion/gears/servo-mount-gears

 

I have a 360 servo on my desk, and I actually tested it with an Arduino and DCS Bios. So yes indeed, you can find them (pretty easy). However they are useless without any external zero positioning sensor... It just rotates in the direction it's told... Perhaps it should be called a endlessly rotating servo, not 360...

Link to comment
Share on other sites

Thanks BravoYankee4, that's good to know. I've also been looking for a supplier for the VID60-02 Stepper Motor. I tried twice from vendors on Aliexpress. Both companies where in China and on both occasions I never received the motors. I've been trying to get that one because I think it has a built in switch that reports when it hits the 12'oclock position.

Link to comment
Share on other sites

[FSF]Ian, that code worked like a charm. If anyone is using a similar display, I listed the complete code for reference.

 

/*

TACAN Panel

Adafruit Alphanumeric Display with backpack.

Wiring for the Display using 5 pin backpack.

A5 to Clock pin

A4 to Data pin

5V to +

5V to + (There are two pins labeled +)

Gnd to -

 

Rotary Encoders need four 10k resistors each and two 0.01uf capacitors

Bourns PEC11R Series

*/

 

#define DCSBIOS_DEFAULT_SERIAL

#include "DcsBios.h"

#include <Wire.h> // this library is needed to drive i2C

#include "Adafruit_LEDBackpack.h" // vendor custom library

#include "Adafruit_GFX.h" // vendor custom library

 

Adafruit_AlphaNum4 alpha4 = Adafruit_AlphaNum4();

 

// Left Channel Selector

DcsBios::RotaryEncoder tacan10("TACAN_10", "DEC", "INC", 4, 2);

 

// Right Channel Selector

DcsBios::RotaryEncoder tacan1("TACAN_1", "DEC", "INC", 5, 3);

 

// TACAN Channel X/Y Toggle

DcsBios::ActionButton tacanXyToggle("TACAN_XY", "TOGGLE", 6);

 

// TACAN Mode Dial

const byte tacanModePins[5] = {7, 8, 9, 10, 11};

DcsBios::SwitchMultiPos tacanMode("TACAN_MODE", tacanModePins, 5);

 

// we need to monitor both the TACAN channel:

DcsBios::StringBuffer<4> tacanChannelBuffer(0x1162, NULL);

// and the mode switch:

DcsBios::IntegerBuffer tacanModeBuffer(0x1168, 0x000e, 1, NULL);

 

// TACAN Test Indicator Light

DcsBios::LED tacanTest(0x10da, 0x0400, 13);

 

// TACAN Test Button

DcsBios::Switch2Pos tacanTestBtn("TACAN_TEST_BTN", 12);

 

// TACAN Signal Volume

// DcsBios::Potentiometer tacanVol("TACAN_VOL", A7);

 

void setup() {

DcsBios::setup();

alpha4.begin(0x70); // pass in the address

}

 

void loop() {

DcsBios::loop();

 

if (tacanChannelBuffer.hasUpdatedData() || tacanModeBuffer.hasUpdatedData()) {

// if either of those values has been updated, update the display

if (tacanModeBuffer.getData() == 0) {

// mode dial in OFF position

alpha4.writeDigitAscii(0, ' '); // Blank Display if Mode knob is set to Off.

alpha4.writeDigitAscii(1, ' '); // 0 is left most display, 3 is right most display

alpha4.writeDigitAscii(2, ' ');

alpha4.writeDigitAscii(3, ' ');

} else {

char* channelStr = tacanChannelBuffer.getData();

alpha4.writeDigitAscii(0, channelStr[0]);

alpha4.writeDigitAscii(1, channelStr[1]);

alpha4.writeDigitAscii(2, channelStr[2]);

alpha4.writeDigitAscii(3, channelStr[3]);

}

}

alpha4.writeDisplay(); // Outputs one or the other of the above code to the Display

}

Link to comment
Share on other sites

  • 2 weeks later...

Hi Ian,

 

Is there any way to detect when a plane (A-10c) has crashed/the player has disconnected?

 

I'm using a Neopixel as a Handle Gear Warning Light, but it's often left turned on indefinitely if the plane crashes while the light is on. Is there a place I can add a call to turn it off should the plane explode/the player disconnect?

Link to comment
Share on other sites

Hi,

I'm fairly new to DCS-BIOS and was wondering if I could export the CMSP to a 16x2 LCD.

Later on I plan a full fidelity cockpit, right now I'm trying to decypher the arduino and the I2C+LCD combo. My setup is this: Arduino leonardo connected to a Blue IIC I2C TWI 1602 16x2 Serial LCD Module Display.

 

 

If I add DcsBios::setup(); or DcsBios::loop(); to the relevant places it doesn't compile.

"error: 'setup' is not a member of 'DcsBios'" and "error: 'loop' is not a member of 'DcsBios'"

Now, if I remove these lines and start the comport listener I get LOADs of numbers scrolling on the LCD. (see attached)

 

Here is the code:

#include <Wire.h>

#include "DcsBios.h"

#include <LiquidCrystal_I2C.h>

 

 

 

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

 

/* paste code snippets from the reference documentation here */

void onCmsp1Change(char* newValue) {

lcd.setCursor(0, 0);

lcd.print(newValue);

}

DcsBios::StringBuffer<19> cmsp1Buffer(0x1000, onCmsp1Change);

 

void onCmsp2Change(char* newValue) {

lcd.setCursor(0, 0);

lcd.print(newValue);

}

DcsBios::StringBuffer<19> cmsp2Buffer(0x1014, onCmsp2Change);

 

 

void setup() {

 

Serial.begin(112500);

lcd.begin(16,2);

lcd.clear();

 

}

 

void loop() {

 

while (Serial.available()) {

lcd.print(Serial.read());

}

}

 

 

What am I not doing right?

I have the wires in 5+, GND, 2(sda), 3(scl). I also tried to use the scl, sda pins on the arduino, then it just displayed jibberish on the lcd.

 

Thank you in advance!

IMG_4833.thumb.JPG.9d46e1984be1ec4b4cdb6d08df861278.JPG

Link to comment
Share on other sites

Hi Ian,

Is there any way to detect when a plane (A-10c) has crashed/the player has disconnected?

 

I am not sure. You could try to monitor the aircraft name from the MetadataStart module:

void onAcftNameChange(char* newValue) {
   if (strcmp(newValue, "A-10C")) {
       // not in an A-10C, turn off light here
   }
}
DcsBios::StringBuffer<16> AcftNameBuffer(0x0000, onAcftNameChange);

 

I don't remember when the aircraft type changes (probably as soon as you go back to spectator mode in multiplayer / select another aircraft in single player mode).

 

 

Hi,

I'm fairly new to DCS-BIOS and was wondering if I could export the CMSP to a 16x2 LCD.

Later on I plan a full fidelity cockpit, right now I'm trying to decypher the arduino and the I2C+LCD combo. My setup is this: Arduino leonardo connected to a Blue IIC I2C TWI 1602 16x2 Serial LCD Module Display.

 

 

If I add DcsBios::setup(); or DcsBios::loop(); to the relevant places it doesn't compile.

"error: 'setup' is not a member of 'DcsBios'" and "error: 'loop' is not a member of 'DcsBios'"

Now, if I remove these lines and start the comport listener I get LOADs of numbers scrolling on the LCD. (see attached)

 

Before including DcsBios.h, you have to tell DCS-BIOS how it should communicate with the PC by #defining one of DCSBIOS_IRQ_SERIAL, DCSBIOS_DEFAULT_SERIAL or DCSBIOS_RS485_SLAVE (see example sketches). On the Leonardo, only DCSBIOS_DEFAULT_SERIAL will work, which is not optimal but should work for a single character display.

 

I suggest you start with the DefaultSerial example sketch and then add your code to it. You should not mess with the serial port at all, so make sure not to add these lines:

Serial.begin(112500); // don't do this in setup()

while (Serial.available()) {   // and don't do this
lcd.print(Serial.read());  // in loop() either
}

(Early versions of the Arduino library handled this differently, you probably found an example that was written a while ago.)

 

You will notice that the 19-character string you get from DCS-BIOS, which includes spaces, won't fit on your 16-character line. See this post for code snippets that will skip the spaces when writing to the display.


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

Ian;2949590']

 

 

Before including DcsBios.h, you have to tell DCS-BIOS how it should communicate with the PC by #defining one of DCSBIOS_IRQ_SERIAL, DCSBIOS_DEFAULT_SERIAL or DCSBIOS_RS485_SLAVE (see example sketches). On the Leonardo, only DCSBIOS_DEFAULT_SERIAL will work, which is not optimal but should work for a single character display.

 

I suggest you start with the DefaultSerial example sketch and then add your code to it. You should not mess with the serial port at all, so make sure not to add these lines:

 

Holy cow!

Mr Magician, thank you so much! It works like a charm!

 

Grüße aus Ungarn!

Link to comment
Share on other sites

Ian;2949590']I am not sure. You could try to monitor the aircraft name from the MetadataStart module:

void onAcftNameChange(char* newValue) {
   if (strcmp(newValue, "A-10C")) {
       // not in an A-10C, turn off light here
   }
}
DcsBios::StringBuffer<16> AcftNameBuffer(0x0000, onAcftNameChange);

I don't remember when the aircraft type changes (probably as soon as you go back to spectator mode in multiplayer / select another aircraft in single player mode).

 

 

Works perfectly, thank you.

 

Another question - the Neopixel library doesn't work with the normal servo library, so they include their own library. It should be as simple as swapping the "#include <Servo.h>" to "#include <Adafruit_TiCoServo.h>" and using "Adafruit_TiCoServo servo_;" instead of "Servo servo_;" according to their documentation. I did this in Servos.h in the DCS bios arduino library, however it gives an error on compiling -

 

flaps:12: error: 'ServoOutput' in namespace 'DcsBios' does not name a type

DcsBios::ServoOutput flapPos(0x10a0, 9, 1100, 500);

         ^

exit status 1
'ServoOutput' in namespace 'DcsBios' does not name a type

Documentation for the TiCoServo library - https://learn.adafruit.com/neopixels-and-servos/the-ticoservo-library

 

I found this -

The solution is to have the user explicitly include the Servo library and have the DCS-BIOS library only define the ServoOutput class if the default Servo library has already been included. To make that work, the Servo library has to be included before the DCS-BIOS library.
Which I'm guessing might be the cause of this - any idea on how to correct it?

 

 

EDIT:

I removed the #ifdef check for the Servo.h include. I now have this error -

cciLTvkl.ltrans0.o:(.text+0x790): undefined reference to `Adafruit_TiCoServo::writeMicroseconds(unsigned int)'

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Arduino/Genuino Uno.

I've checked the Adafruit TiCoServo library and it supports writeMicroseconds (and I've edited the library too to ensure that it's not confusing my board for one that doesn't support it. I know this is pretty far outside the scope of DCS Bios, but any help would be appreciated.

 

 

FINAL EDIT:

I've changed some library code for the TicoServo and it appears to now be working.


Edited by Compulse
Link to comment
Share on other sites

Just in case anyone out there has found their exports have stopped working in 1.5.5, If you use Capt Zeens export.

Quote from another post. "if you are using one of my export.lua, look for this line:

 

os.setlocale("ISO-8559-1", "numeric")

 

and comment it like this:

 

-- os.setlocale("ISO-8559-1", "numeric")

 

That fix the problem."

AMD A8-5600K @ 4GHz, Radeon 7970 6Gig, 16 Gig Ram, Win 10 , 250 gig SSD, 40" Screen + 22 inch below, Track Ir, TMWH, Saitek combat pedals & a loose nut behind the stick :thumbup:

Link to comment
Share on other sites

:pilotfly:... hi every body , Ian i ve a question, is there a way to find the signal for the force feedback on the controls ??:pilotfly:

 

I don't think you can access FFB info through Export.lua.

There might be another way (either through software or by building your own USB FFB device, e.g. based on adapt-ffb-joy), but it's not something that will be supported by DCS-BIOS.

Link to comment
Share on other sites

  • Recently Browsing   0 members

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