-
Posts
77 -
Joined
-
Last visited
Content Type
Profiles
Forums
Events
Everything posted by Heling
-
One of my problems: only one of the Arduino Mega boards has an additional power supply with 9 volts. I ordered three mor and try to power up all. Yes, my USB-Hubs are all with power supply, but I don't know the quality over the 10 connected devices... Will report
-
I found in my installation a bodnar board with some problems. I disconnected it and the Port disconnections feels better. Now I deinstalled in the Hardware manager the 3.0 USB-Hubs. They are reinstalled by the system after a reboot. I flu now some times without port disconnections. Hope I found my solution. Will report here
-
Any news about the working code? I've it working as a viewport in Helios, but I prefer an arduino solution. Regards Mic
-
Ich habe jetzt das DCS in der Version 2.9.xx aufgespielt und nix geht mehr. Alle COM-Ports spinnen die komplette Tastenbelegung ist weg und die DCS-BIOS Scripte und die von Helios tun nicht das was sie wollen. Hat jemand ähnliche Erfahrung gemacht?
-
I think I found the right way! 1. I switched from DCS-BIOS to DCS-Flightpanels. It's a fork from DCS-Bios. There is a good description to install it properly. 2. You must delete the Arduino DCS library and install the new from DCS Flightpanels. Then recompile and upload every Arduinocodes 3. USB 3.0 HUBs are sometimes a problem. I changed one of three to a USB 2.0 and the connected Arduionos work fine now. 4. start your comports now with the given multi-serial-connection.bat. Write in this file only the needed ports in a line with spaces between. 5. move all switches from boards like Bodnar to Helios, not in the controls of DCS. It's also good for 3Pos. switches! With this, I have a stable system for hours. Try it!
-
Since last update I can't switch off the MFDs in Alt-F1 mode Any hints?
-
Hi, I'm long time sitting behind the multiport problem with DCS-BIOS Hub and DCS Flightpanels. The last I use at the moment. Now is a last Issue. I can connect all 12 Arduino borads for longer time than before, but some minutes later this error is shown: socat[452] E open("/dev/ttyS10", 012, 0666): Permission denied and socat[454] E xiopoll({5,1}{-1,4}{7,1}{-1,4}, 4, {0.4294967296}): Permission denied or socat[890] E write(7, 0x800070000, 154): Permission denied The tty is S12 or S7. Permission denied is known in Liniuxversion of socat when the user is not member of the desired group. But for the windows version I find nothing about the error. I'm not a programmer. I can't show in the code and understand... Is there a known solution?
-
DCS-BIOS HUB is out of maintenance since 2019... With this I had the trouble at all. Now I'm using DCS-Flightpanels. It's a forge of DCS-BIOS 0.7 and it is up to date. The installation is not so easy but well described in a step by step .pdf. With this, my errors are reduced to a few. Only my Coutionboard has errors like " socat: ttyS7: E write: permission denied... I'm hanging with this error and in a long flight some other Arduinos disconnects I'm not a programmer. I read for Linux that the problem is depenced on user groups. In windows there are issues with opening hight numbered ports (above 40,000) Thats all what I found in long searches
-
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?
-
You are not alone! This is my problem too. I'm searching for solution for months. My next try is to use DCSFlightpanels. It's using the same DCS-Arduino library. The disconnect issue is not: energy saving options, wrong USB-Hubs, non-powered USB-Hubs, clones of Arduinos, Ground loops in wiring, Sometimes DCS-BIOS Hub filled up my 32 GByte RAM! I think, there is no way to use it anymore. It's not updated since 2019... Whenever you find a quick solution - let me know! Michael
-
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?
-
I'm new with RS Mapper. I've one question. I have a simpit with a lot of switches. I tried to use some with RS Mapper. They work fine with press and release. But after restart, most of the switches changed the direction. It looks confuse. Is RS-Mapper not able to read out the current position of the switches? In DCS-BIOS I have a small script in the Arduinos to read out the current positions. In bodnar boards not. Without this option is rs-mapper useless for me
-
Hi electricaltill , Did you found a solution for this Com port problem? I'm sitting here with the same and wondering what I can do...
-
Meiner fiel vom PC runter und ist gebrochen. Und zwar das Glockenförmige Kunststoffteil welches über der Kugel aus der Basis ragt. Oben dran hat es das Gewinde für den Stick. TM schickte mir auf Anfrage eine Ersatz-Kugel. Auf meine Rückfrage, dass es doch die Glocke sei bekam ich die Antwort, dass genau dieses Teil nicht als Ersatzteil verkauft wird. Ich müsste eine neue Base kaufen. Merkwürdige Strategie von TM. Was mal wirklich kaputt gehen kann gibts nicht...
-
I think ED has not enough informations how the box works. To write down the functions in a code is not so hard when you know what they do. In that case we have to wait a long time...
-
I wonder where DCS will get the functions and display patterns for the device from. So far, hardly anything has come to the public. Is this where the problem lies?
-
PC Flights A10 Flaps, Hyd Press and Fuel Gauges Help
Heling replied to Kenpilot's topic in Home Cockpits
I've now rolling digits for the total display integrated. Thanks to middlefart. I used code fragments from his altimeter with rolling digits: /* Fuel Panel, CMSC-LEDs, Front Dash V3.1 DL4ALL 29.July 21 */ //#define DCSBIOS_DEFAULT_SERIAL #define DCSBIOS_IRQ_SERIAL #include <Servo.h> #include "DcsBios.h" #include <LedControl.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include "characters.h" #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); Servo FuelQtyLeft_gauge; // create servo object to control a servo motor Servo FuelQtyRight_gauge; // create servo object to control a servo motor Servo L_HYD_Press_gauge; // create servo object to control a servo motor Servo R_HYD_Press_gauge; // create servo object to control a servo motor Servo Flaps_gauge; // create servo object to control a servo motor int AB; float Value1; float Value2; float Value3; float Total; unsigned long time = 0; unsigned int i = 0; const byte fqisSelectPins[5] = {A1, A2, A3, A6, A7}; //Comment for barometric pressure #define ALTIMETER int updateInterval = 100; //the number of milliseconds between updates struct scrollDigit { int digit; //The digit that is displayed int y; // The vertical position of the digit }; struct disp { Adafruit_SSD1306 display; int width; int numberOfDigits; scrollDigit digits[5]; }; //disp oled = {Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET), 24, 5, {{0,0},{0,0},{0,0},{0,0},{0,0}}}; disp oled = {Adafruit_SSD1306(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET), 16, 5, {{0,0},{0,0},{0,0},{0,0},{0,0}}}; void setup() { if(!oled.display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32 for(;;); // Don't proceed, loop forever } DcsBios::setup(); FuelQtyLeft_gauge.attach(6); // attaches the servo on pin 3 to the servo object FuelQtyRight_gauge.attach(9); // attaches the servo on pin 5 to the servo object L_HYD_Press_gauge.attach(5); // attaches the servo on pin 6 to the servo object R_HYD_Press_gauge.attach(10); // attaches the servo on pin 9 to the servo object } void UpdateDisplay() { oled.display.clearDisplay(); for (int i = 0; i < oled.numberOfDigits; i++) { printScrollingDigit(oled.digits[i].digit, oled.width, oled.digits[i].y, i + 1, &oled); } //Clear the area below the the numbers if we are using the small font if (oled.width == 16) { oled.display.fillRect(0, 30, 127, 7, BLACK); } oled.display.display(); } int YPos() { return ((oled.width + 9) * -1); } void printScrollingDigit(int digit, int width, int y, int pos, disp *oled) { int x = (width * pos) - width + pos + 30; y +=5; switch (digit) { case -1: oled->display.drawBitmap(x, y, c16_Empty, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_1, 16, 24, 1); break; case 1: oled->display.drawBitmap(x, y, c16_1, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_2, 16, 24, 1); break; case 2: oled->display.drawBitmap(x, y, c16_2, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_3, 16, 24, 1); break; case 3: oled->display.drawBitmap(x, y, c16_3, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_4, 16, 24, 1); break; case 4: oled->display.drawBitmap(x, y, c16_4, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_5, 16, 24, 1); break; case 5: oled->display.drawBitmap(x, y, c16_5, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_6, 16, 24, 1); break; case 6: oled->display.drawBitmap(x, y, c16_6, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_7, 16, 24, 1); break; case 7: oled->display.drawBitmap(x, y, c16_7, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_8, 16, 24, 1); break; case 8: oled->display.drawBitmap(x, y, c16_8, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_9, 16, 24, 1); break; case 9: oled->display.drawBitmap(x, y, c16_9, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_0, 16, 24, 1); break; default: oled->display.drawBitmap(x, y, c16_0, 16, 24, 1); oled->display.drawBitmap(x, y+25, c16_1, 16, 24, 1); break; } } void onFuelQty10000Change(unsigned int newValue) { unsigned int mappedValue = newValue / 6553; unsigned int y = map(newValue, mappedValue * 6553, mappedValue * 6553 + 6553, 0, YPos()); if (mappedValue == 0) { mappedValue = -1; } #ifdef TEST Serial.println(mappedValue); #endif oled.digits[0].digit = mappedValue; oled.digits[0].y = y; } void onFuelQty1000Change(unsigned int newValue) { unsigned int mappedValue = newValue / 6553; unsigned int y = map(newValue, mappedValue * 6553, mappedValue * 6553 + 6553, 0, YPos()); oled.digits[1].digit = mappedValue; oled.digits[1].y = y; } void onFuelQty100Change(unsigned int newValue) { unsigned int mappedValue = newValue / 6553; unsigned int y = map(newValue, mappedValue * 6553, mappedValue * 6553 + 6553, 0, YPos()); oled.digits[2].digit = mappedValue; oled.digits[2].y = y; } DcsBios::IntegerBuffer fuelQty10000Buffer(0x10ce, 0xffff, 0, onFuelQty10000Change); DcsBios::IntegerBuffer fuelQty1000Buffer(0x10d0, 0xffff, 0, onFuelQty1000Change); DcsBios::IntegerBuffer fuelQty100Buffer(0x10d2, 0xffff, 0, onFuelQty100Change); //CMSC Missile Launch Indicator (red) DcsBios::LED cmscLaunch(0x1012, 0x0100, 2); //CMSC Priority Status Indicator (green) DcsBios::LED cmscPrio(0x1012, 0x0200, 3); // Fuel Gauge Test DcsBios::Switch2Pos fqisTest("FQIS_TEST", 4); // GUN READY Indicator DcsBios::LED gunReady(0x1026, 0x8000, 7); // Nosewheel Steering Indicator DcsBios::LED nosewheelSteering(0x10da, 0x0001, 8); // CANOPY UNLOCKED Indicator DcsBios::LED canopyUnlocked(0x10da, 0x0004, 11); // MARKER BEACON Indicator DcsBios::LED markerBeacon(0x10da, 0x0002, 12); //CMSC Unknown Status Indicator (blue) DcsBios::LED cmscUnkn(0x1012, 0x0400, 13); // Fuel Display Selector DcsBios::SwitchMultiPos fqisSelect("FQIS_SELECT", fqisSelectPins, 5); //------- Servos ---------------------------------- // Fuel Qty Left DcsBios::ServoOutput fuelQtyL(0x10ca,5, 900, 2000); // Fuel Qty Right DcsBios::ServoOutput fuelQtyR(0x10cc,6, 2155, 1018); // Left Hydraulic Pressure----------------------- DcsBios::ServoOutput lHydPress(0x10c2,9, 850, 1910); // Right Hydraulic Pressure DcsBios::ServoOutput rHydPress(0x10c4,10, 870, 1820); void loop() { DcsBios::loop(); time = millis(); if (time % updateInterval == 0) { UpdateDisplay(); } } -
SOLVED After I restored the default.lua from backup, the DCS-BIOS worked too.. strange but okay for me.
-
DCS-BIOS: latest V10. DCS World: 2.7 from today. Now I checked the export.lua. All okay, but not working. Helios works fine. There is no connection to DCS. The "virtual cockpit" field is not green. Is this path okay with two slashes? #BIOS.PluginDir = [[C:\Users\Micha\AppData\Roaming/DCS-BIOS/Plugins\]]#
-
PC Flights A10 Flaps, Hyd Press and Fuel Gauges Help
Heling replied to Kenpilot's topic in Home Cockpits
My full working code for theA-10 fuel panel with some other connections. Four Servos for LHYd RHyd Lfuel RFuel and a 128x32 0.91" OLED for the total indicator. Enjoy it. You have to set new Values on the servos. I use small gears for 270 degrees rotation. Michael /* Fuel Panel, CMSC-LEDs, Front Dash V2.1 DL4ALL */ //#define DCSBIOS_DEFAULT_SERIAL #define DCSBIOS_IRQ_SERIAL #include <Servo.h> #include "DcsBios.h" #include <LedControl.h> //#include <Wire.h> //#include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); Servo FuelQtyLeft_gauge; // create servo object to control a servo motor Servo FuelQtyRight_gauge; // create servo object to control a servo motor Servo L_HYD_Press_gauge; // create servo object to control a servo motor Servo R_HYD_Press_gauge; // create servo object to control a servo motor Servo Flaps_gauge; // create servo object to control a servo motor // MAX 7219 only works with Common Cathode Displays // inputs: DIN pin, CLK pin, LOAD (/CS) pin. number of MAX7219chips LedControl FuelDisplay = LedControl(12, 11, 10, 1); int AB; float Value1; float Value2; float Value3; float Total; void setup() { DcsBios::setup(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.cp437(true); display.clearDisplay(); display.ssd1306_command(0x81); display.ssd1306_command(1); display.setTextSize(3); display.setTextColor(WHITE); display.setCursor(30,10); display.print(". . ."); display.display(); FuelQtyLeft_gauge.attach(6); // attaches the servo on pin 3 to the servo object FuelQtyRight_gauge.attach(9); // attaches the servo on pin 5 to the servo object L_HYD_Press_gauge.attach(5); // attaches the servo on pin 6 to the servo object R_HYD_Press_gauge.attach(10); // attaches the servo on pin 9 to the servo object } //CMSC Missile Launch Indicator (red) DcsBios::LED cmscLaunch(0x1012, 0x0100, 2); //CMSC Priority Status Indicator (green) DcsBios::LED cmscPrio(0x1012, 0x0200, 3); // Fuel Gauge Test DcsBios::Switch2Pos fqisTest("FQIS_TEST", 4); // GUN READY Indicator DcsBios::LED gunReady(0x1026, 0x8000, 7); // Nosewheel Steering Indicator DcsBios::LED nosewheelSteering(0x10da, 0x0001, 8); // CANOPY UNLOCKED Indicator DcsBios::LED canopyUnlocked(0x10da, 0x0004, 11); // MARKER BEACON Indicator DcsBios::LED markerBeacon(0x10da, 0x0002, 12); //CMSC Unknown Status Indicator (blue) DcsBios::LED cmscUnkn(0x1012, 0x0400, 13); // Fuel Display Selector const byte fqisSelectPins[5] = {A1, A2, A3, A6, A7}; DcsBios::SwitchMultiPos fqisSelect("FQIS_SELECT", fqisSelectPins, 5); // FUEL OLED Display------------------------------------- void onFuelQty10000Change(unsigned int newValue) { Value1=(newValue/6553); }DcsBios::IntegerBuffer fuelQty10000Buffer(0x10ce, 0xffff, 0, onFuelQty10000Change); void onFuelQty1000Change(unsigned int newValue) { Value2=(newValue/6553); }DcsBios::IntegerBuffer fuelQty1000Buffer(0x10d0, 0xffff, 0, onFuelQty1000Change); void onFuelQty100Change(unsigned int newValue) { Value3=(newValue/655.3); }DcsBios::IntegerBuffer fuelQty100Buffer(0x10d2, 0xffff, 0, onFuelQty100Change); //--------------------------------------------------------- // Fuel Qty Left DcsBios::ServoOutput fuelQtyL(0x10ca,5, 900, 2000); // Fuel Qty Right DcsBios::ServoOutput fuelQtyR(0x10cc,6, 2155, 1018); // Left Hydraulic Pressure----------------------- DcsBios::ServoOutput lHydPress(0x10c2,9, 850, 1910); // Right Hydraulic Pressure DcsBios::ServoOutput rHydPress(0x10c4,10, 870, 1820); // Flaps Position Indicator---------------------- //DcsBios::ServoOutput flapPos(0x10a0, 8, 850, 2200); void loop() { DcsBios::loop(); Total = ((int(Value1)*10000)+(int(Value2)*1000)+(int(Value3+1)*10)); display.clearDisplay(); display.setCursor(30,10); if (Total < 100){ // if for enought leading zeros display.print("000"); display.setCursor(80,10); } else if (Total < 1000){ display.print("00"); display.setCursor(70,10); } else if (Total < 10000){ display.print("0"); display.setCursor(50,10); } display.print(int(Total)); display.display(); } -
Vinc_Vega your solution is the best I found! Thank you for the tutorial. This helps me a lot. Michael
-
Hi everyone, some questions. 1. The HSI dit'nt show the From / To and the Course flag. There are no options to bind. I use the HSI from the toolbox. 2. The IAS from the toolbox has trouble with upper needle, main needle and the backplate. There is the max speed needle fix. How can I build up an own IAS? 3. How can I edit the Pictures in the toolbox? Where can I find the picutures from capt zeen ready mainpanel? Thanks for help Michael
-
OLED with DCS-BIOS works fine. The beginning was a little confused. When all parameters are okay, the result looks perfect. The 20 x 2 OLED comes with a very large backplate. I elongated the wires. This was tricky. If you like it, my arduino code is below. I also used OLED on UHF and Total Fuel Gauge on my A-10 Mainpanel. The special characters are included! Important: the Reset on OLED-Board must be everytime on hight 3.3V level. Now I'm looking for a nice solution for the CDU-screen. Michael code for Arduino Uno //#define DCSBIOS_IRQ_SERIAL #define DCSBIOS_DEFAULT_SERIAL #include <DcsBios.h> #include "I2cCharDisplay.h" #include "Wire.h" ///////////////////////// SETUP ////////////////////////////////////////////////////////////// #define OLEDADDRESS 0x3c // i2c address for the oled display I2cCharDisplay oled(OLED_TYPE, OLEDADDRESS, 2); // create an oled object for a 2 line display #define TESTNUM void setup() { Wire.begin(); // initialize i2c uint8_t mm[8] = {0x11,0x1b,0x15,0x11,0x11,0x00,0x1F,0x00}; // m uint8_t ss[8] = {0x0e,0x10,0x0e,0x01,0x1e,0x00,0x1F,0x00}; // s uint8_t aa[8] = {0x04,0x0a,0x11,0x1f,0x11,0x00,0x1F,0x00}; // a uint8_t xx[8] = {0x11,0x0a,0x04,0x0a,0x11,0x00,0x1F,0x00}; // x oled.createCharacter(0, mm); oled.createCharacter(1, ss); oled.createCharacter(2, aa); oled.createCharacter(3, xx); oled.begin(); // initialize the oled oled.clear(); oled.setBrightness(255); oled.cursorMove(1,1); oled.print("OFF "); oled.cursorMove(1,13); oled.print("X---X---"); oled.cursorMove(2,1); oled.print(" OFF"); oled.setBrightness(1); DcsBios::setup(); } ////////////////////////////Config Display /////////////////////////////////////////////////////// void onCmscTxtJmrChange(char* newValue) { oled.setBrightness(255); oled.cursorMove(1,1); oled.print(newValue); oled.setBrightness(1); } DcsBios::StringBuffer<8> cmscTxtJmrBuffer(0x1096, onCmscTxtJmrChange); void onCmscTxtChaffFlareChange(char* newValue) { oled.setBrightness(255); oled.cursorMove(1,13); oled.print(newValue[0]); oled.print(newValue[1]); oled.print(newValue[2]); oled.print(newValue[3]); if (newValue[4] == 'm') oled.write(0); else if(newValue[4] == 's') oled.write(1); else if(newValue[4] == 'a') oled.write(2); else if(newValue[4] == 'x') oled.write(3); else oled.print(newValue[4]); oled.print(newValue[5]); oled.print(newValue[6]); oled.print(newValue[7]); oled.setBrightness(1); } DcsBios::StringBuffer<8> cmscTxtChaffFlareBuffer(0x108e, onCmscTxtChaffFlareChange); void onCmscTxtMwsChange(char* newValue) { oled.setBrightness(255); cleanUpCom (newValue); oled.cursorMove(2,1); oled.print(newValue); oled.setBrightness(1); } DcsBios::StringBuffer<8> cmscTxtMwsBuffer(0x12b0, onCmscTxtMwsChange); char* cleanUpCom(char* newValue) { for(int i;i<8;i++){ switch (newValue[0]) { case 'm': newValue[i]= "\mm"; break; case 's': newValue[i]= "\x01"; break; case 'a': newValue[i]= "\x02"; break; case 'x': newValue[i]= "\x03"; break; } } return newValue; } /////////////////////////// LOOP //////////////////////////////////////////////////////// void loop() { DcsBios::loop(); }
-
I do not know. I switched from a Mega 2560 to a Uno and now it works. What a hassle. I deal with the forum here and then something. Thank you guys!
-
At the moment, I have DCS-A10 started like a PC-game on my monitor. The DCS BIOS Hub is running and he shows me the changes on CMSC. And then I connect to my Arduino port. In this moment, my default text disappears and nothing fills the given positions the OLED. I think the viewport should be okay in this configuration. The UHF-Frequency works fine, but with a light different function. But I can't do that with the CMSC: void updateComDisplay(int changed,char* newValue) { comDisplay[changed] = cleanUpCom(newValue); display.clearDisplay(); display.setCursor(0,10); display.print(comDisplay[0]); //display.setCursor(0,10); //display.print(comDisplay[1]); display.display(); } char* cleanUpCom(char* newValue) { switch (newValue[0]) { case '`': newValue[0]='1'; break; case '~': newValue[0]='2'; break; } return newValue; } void onUhfFrequencyChange(char* newValue) { updateComDisplay(0, newValue); } DcsBios::StringBuffer<7> uhfFrequencyBuffer(0x1180, onUhfFrequencyChange);