

lesthegrngo
Members-
Posts
1245 -
Joined
-
Last visited
Content Type
Profiles
Forums
Events
Everything posted by lesthegrngo
-
Pictures of the A10-C HUD frame and reflector holder
lesthegrngo replied to lesthegrngo's topic in Home Cockpits
Great, thanks - I'll check that out, it would be the best solution because I'd be able to see the actual DCS version Les -
Pictures of the A10-C HUD frame and reflector holder
lesthegrngo replied to lesthegrngo's topic in Home Cockpits
Didn't know that existed - is that in the game itself? Cheers Les -
Hi all, I am wondering if anyone can point me to some good pictures or diagrams of the A10-C HUD framework; I want to make the frame for the dash coaming to hang the accelerometer / AOA indexer and standby compass and refuelling light unit on. I know they should be on the windscreen frame but I am having to compromise a bit as I know that in the not too distant future it all has to be put in a box and moved again. I've searched for pictures online, and most are virtually useless for the purposes of helping me design a stand off version as they never seem to show it from the side. The ones I have seen contradict each other in terms of shape leaving me scratching my head. I don't need dimensions, as what I make will be sized to fit my current dash, just a good side on view would be good enough Cheers Les
-
I use both - MDF cut with a CNC router / 'mill' for the backplates with a laser cut and engraved fascia. The MDF is cheaper and easier to get than the acrylic, and is available in numerous thicknesses so lends itself to the mounting for the switches and instruments, plus can be pocketed at the front to accommodate a PCB with 805 SMD LED's for back lighting. The downside of MDF is it doesn't hold thin wall sections easily and you can break off thin lips or features, at least with the MDF qualities I can get. Acrylic is not nice to cut with a rotary cutter in a router due to the fact that it can melt rather than cut, which then balls up on the cutter ruining the part and/or the cutter. Whenever I do use the CNC router for it I use a small cutter and use my airbrush to blow cold air continually and directly at the point of the cut to chill the plastic being cut away. It's necessary when you have to machine reliefs or pockets but I do keep it to a minimum. I used to use a mix of water and washing up liquid but it was awfully messy. One material that I used to be able to get but is no longer available that would step in for MDF and be a lot stronger while still being easy to machine is Tufnol, an early composite that was used quite extensively in the past Plywood has the disadvantage in my experience of being a bit less able to hold very accurate and clean cuts (unless you go for expensive grades, not available to me) plus the extra finishing time they require As for not being able to create depth with Laser cutters, that's not entirely true; I have successfully made parts with multi levels and pockets but the limitation is poor depth control and a rough surface finish Hope this helps Les
-
Hi all, this is the sketch I ended up with to show the six TISL numerals for my A-10 pit, maybe it will help you with the structure #define DCSBIOS_DEFAULT_SERIAL #include <DcsBios.h> #include <Arduino.h> #include <U8g2lib.h> #include <Wire.h> #include "XBM1.h" //64x32 XBM format #define TCAADDR 0x70 void tcaselect (uint8_t i) { if (i > 7) return; Wire.beginTransmission(TCAADDR); Wire.write(1 << i); Wire.endTransmission(); } U8G2_SSD1306_64X32_1F_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); void setup() { /* void DisplayInit() { for (int i = 0; i < 7; i++) tcaselect(i);*/ DcsBios::setup(); for (int i = 0; i <= 7; i++) { tcaselect(i); u8g2.begin(); } } const unsigned char* aBitmaps[] = { //array of pointers to PROGMEM c24_0, c24_1, c24_2, c24_3, c24_4, c24_5, c24_6, c24_7, c24_8, c24_9, c24_10, c24_11, c24_12, c24_13, c24_14, c24_15, c24_16, c24_17, c24_18, c24_19 }; const unsigned char* bBitmaps[] = { //array of pointers to PROGMEM c24_0, c24_2, c24_4, c24_6, c24_8, c24_10, c24_12, c24_14, c24_16, c24_18, }; void onTislAlt1000Change(unsigned int newValue) //simpler with array index { tcaselect(2); //multiplex the required OLED u8g2.clearBuffer(); u8g2.drawXBMP( 0, 0, 64, 32, bBitmaps[newValue]); //direct from PROGMEM u8g2.sendBuffer(); } DcsBios::IntegerBuffer tislAlt1000Buffer(0x1114, 0x0f00, 8, onTislAlt1000Change); void onTislAlt10000Change(unsigned int newValue) //simpler with array index { tcaselect(3); //multiplex the required OLED u8g2.clearBuffer(); u8g2.drawXBMP( 0, 0, 64, 32, bBitmaps[newValue]); //direct from PROGMEM u8g2.sendBuffer(); } DcsBios::IntegerBuffer tislAlt10000Buffer(0x1112, 0xf000, 12, onTislAlt10000Change); void onTislCode1Change(unsigned int newValue) //simpler with array index { tcaselect(4); //multiplex the required OLED u8g2.clearBuffer(); u8g2.drawXBMP( 0, 0, 64, 32, aBitmaps[newValue]); //direct from PROGMEM u8g2.sendBuffer(); } DcsBios::IntegerBuffer tislCode1Buffer(0x1116, 0x1f00, 8, onTislCode1Change); void onTislCode2Change(unsigned int newValue) //simpler with array index { tcaselect(5); //multiplex the required OLED u8g2.clearBuffer(); u8g2.drawXBMP( 0, 0, 64, 32, aBitmaps[newValue]); //direct from PROGMEM u8g2.sendBuffer(); } DcsBios::IntegerBuffer tislCode2Buffer(0x111a, 0x1f00, 8, onTislCode2Change); void onTislCode3Change(unsigned int newValue) //simpler with array index { tcaselect(6); //multiplex the required OLED u8g2.clearBuffer(); u8g2.drawXBMP( 0, 0, 64, 32, aBitmaps[newValue]); //direct from PROGMEM u8g2.sendBuffer(); } DcsBios::IntegerBuffer tislCode3Buffer(0x111e, 0x1f00, 8, onTislCode3Change); void onTislCode4Change(unsigned int newValue) //simpler with array index { tcaselect(7); //multiplex the required OLED u8g2.clearBuffer(); u8g2.drawXBMP( 0, 0, 64, 32, aBitmaps[newValue]); //direct from PROGMEM u8g2.sendBuffer(); } DcsBios::IntegerBuffer tislCode4Buffer(0x1122, 0x1f00, 8, onTislCode4Change); void loop() { DcsBios::loop(); } Cheers Les
-
I kept on at this, and after doing a thorough search of the PC it showed that the files were being saved as internet explorer files that could not be opened by anything, but also in curiously random locations. It also did save one .ikarus file on the desktop, so I copied that into the Ikarus folder where the other profiles were. I opened Ikarus, loaded the file I had saved, and it seemed to work - it showed the cockpit components that I had selected. However once you finished loading DCS, it immediately then loaded the default A-10C file, and ignored my saved one. I believe that there is a configuration somewhere, and I can't find it, that detects the DCS module you are loading and loads the default profile for that aircraft. On that basis, I made a backup of the default file, then modified the default file to mirror the customised one that I wanted, and that then worked (almost) flawlessly when I opened DCS. So while not perfect, it is a workaround to get this running. However there are a couple of things to note. Firstly, the background images have to be replaced by a completely blank one if you are to use it for individual instruments on dash mounted screens like I did, as if not the background gets scaled to suit the desktop and is visible as the gauge backrounds, ruining the effect somewhat. Secondly, after I made a modified background file to one with a single colour, unfortunately that means for the devices like the RWR where DCS will display the RWR icons and information via monitorsetup.lua, it won't show up as it seems the Ikarus background is displayed over the monitorsetup.lua data. I imagine that there is some way to set the background as either transparent (Helios has this) or that you can move the background layer to the back so that the game data shows up over it. I'm still looking for those options. Thirdly, while Helios gives you the option of resizing the individual instruments height and width independently, Ikarus does not. That means that if your instruments don't appear as perfectly round on the screen, you do not have a way to correct it, you can only resize it proportionately. This means that the gauges for example are too narrow for the round apertures in the fascia plates I made. The Ikarus rendition of the instruments that work is good, the IAS, HSI and ADI all work really nicely (aspect ratio aside) but of course the RWR at the moment doesn't display anything other than the blank grid. If I can overcome those little niggles, I would say it would be my go to for this, so hopefully there is a way to do so Les
-
Hi all, after fruitlessly trying to get Helios to output the working IAS gauge to my cockpit, I am trying out Ikarus to see if I can get this to work. I used the A10C profile that comes with it that has the ADI, HSI, RWR and ASI on it, and deleted all the buttons, gauges, lamps etc that I didn't need. I saved at various points along the way, and kept checking that the instruments still displayed, and finally sized and located them to suit. After a few false starts I got the hang of it . However when I loaded DCS, the profile that appeared was the original unmodified one with everything. I closed Ikarus down, then reloaded it, and looked for my saved file... and it is nowhere to be found. Not only that, Ikarus in now defaulting back to the original A10C file I used, and I can't change it. If my PC is to be believed, I have not saved the profile anywhere So can anyone who has used Ikarus successfully help me to either save the profile correctly or how to load the one I want? Cheers Les
-
Rotating viewports for monitorsetup.lua use
lesthegrngo replied to lesthegrngo's topic in Multi-Display Support
Thanks If the overall size doesn't affect it I may as well make my life easy then! No rotation necessary if I have the larger extended desktop, so I'll go that way Thanks for the input Les -
Helios screen sizes - making instruments overlap edges of screen
lesthegrngo replied to lesthegrngo's topic in Home Cockpits
Found it Ignore the dragging and go straight to the instrument size and position on the right hand window. You can enter the oversize you want in the width and height, and position with the top and left position numbers. If you try to drag it will snap to the monitor edges Cheers Les- 1 reply
-
- 1
-
-
I resolved it - it was an incorrect aspect ratio. The one required in the monitorsetup.lua file was correct but I'd used the same ratio in the game setup screen; once corrected it will start 'minimised' on the main monitor but then displays correctly once you click on the task bar I think I had it in my head that it was automatically generated so it was probably what was there before on the 1 camera setting Chewers Les
-
Unfortunately that's not it; I tried it and it ended up displaying the screen with only the bottom right corner visible, although thankfully including the bit with the exit button I'll keep trying the options to see if something changes Les
-
As I mentioned before, you have sharp eyes! Let me give that a go Les
-
Hi again, another day another bizarre question! I have (almost) resolved my monitor setup issues, and am back with the MFCD's, RWR, Helios displaying some stuff and now the CDU on an additional Monitor. The new improved issue is that when I start DCS, it will start only on the main monitor, with everything scaled from the extended desktop (2048 X 2960). I then have to either move the mouse to the task bar and left click, or CTRL ALT DEL, then cancel. When I do that, the main screen then does one of two things - it either shows the main screen as too short, ie there is a gap at the bottom of the main screen, or too long, so that it goes past the bottom of the screen, onto the additional monitors. If I exit to desktop and restart, it will do the the same, either too long or too short after starting scaled. The main monitor is setup in monitorsetup.lua as 1920 X 1080, with the aspect ratio set as 1.77777778, and position X = 0 and y = 0. It makes no sense that it is inconsistent if nothing else, and the fact that it does not go straight to the correct scaling is strange Can anyone offer any explanation and fix? Cheers Les
-
Hi all, I have six monitors set up, in such a way that they give me the lowest overall total extended monitor resolution, in this case 2104 x 2700, which gives a 5680800 total pixel count. The next best I can manage would be 2048 x 2960, giving 6062080, nearly 7% more pixel count. Knowing that the higher the total pixel count the heavier it is on the GPU, I'd like to use the smaller one, but it would mean that the two MFCD screens would be set up as portrait on the extended setup, but actually physically arranged as landscape on the dash. Helios deals with two monitors, so they are fine, and the monitorsetp.lua can deal easily with the CDU export (same alignment on the extended desktop and physically) but for the MFCD's I need to rotate the output to match the two monitors that display them. I have updated the monitor setup .lua file with a line saying 'rotation = 90' but it doesn't do anything (although surprisingly I get no errors) So is there a way to rotate the viewports using monitorsetup.lau? Les
-
new Monitor setup .lua file not visible in menu
lesthegrngo replied to lesthegrngo's topic in Multi-Display Bugs
All, I niggled and niggled at this for the last couple of days, and finally worked it out by some trial and error. I could make .lua file disappear depending on what text was written into the file, and it seems that if it comes across syntax it doesn't recognise it goes tilt and pretends the file does not exist. In this case, for some reason the 'A10CDU' section was what was messing it up. Delete that and it returned. However if you substitute 'A10CDU' with 'ED_A10C_CDU' it will happily read the file, even if you have not updated the CDU_init file to match. Now it would accept the file so I could start playing with the monitorsetup and once the init file was updated I can now see the CDU Hope this helps someone Les -
new Monitor setup .lua file not visible in menu
lesthegrngo replied to lesthegrngo's topic in Home Cockpits
All, I niggled and niggled at this for the last couple of days, and finally worked it out by some trial and error. I could make .lua file disappear depending on what text was written into the file, and it seems that if it comes across syntax it doesn't recognise it goes tilt and pretends the file does not exist. In this case, for some reason the 'A10CDU' section was what was messing it up. Delete that and it returned. However if you substitute 'A10CDU' with 'ED_A10C_CDU' it will happily read the file, even if you have not updated the CDU_init file to match. Now it would accept the file so I could start playing with the monitorsetup and once the init file was updated I can now see the CDU Hope this helps someone Les -
Hi all, I need to make my displayed instruments larger than the edges of the monitor they are assigned to in order to match the dash bezels and openings I physically have. However when I try to drag the instrument to do so, once it hits the edges of the monitor in the setup, it cannot go any farther. Is there a way to disable or override this? Cheers Les
-
RS485 network hardware questions / details
lesthegrngo replied to lesthegrngo's topic in Home Cockpits
I use the 5v pin, so it sounds like I'll have to get busy with the capacitors. However I have a question, if I have multiple nanos hardwired to one PCB, do I just have one capacitor for the entire PCB? Interestingly, today I was trying to get the new monitor lua set up, and connected up the RS485 devices just to mess around, but without any attention to what was connected to what. As it turned out, everything ended up connected to just one of the busses on the master with 3 MAX chips on it, and there was no hint of the stepper twitching. I've left it how it is to look at tomorrow to see if there is something. Apart from where the connecting wires go, nothing else has changed, so I have to confess to being confused Cheers Les -
Hi all, I have modified a setup file for the view to include the MFCDs, RWR and CDU based on my new combined resolution, but the file does not show up in the options drop-down. It is in the DCS World/config/monitorsetup folder, yet it simply doesn't appear as an option has the default location changed? It's been a while since I last had to change the monitor setup here's the file I created _ = function(p) return p; end; name = _('Camera+LMFCD+RMFCD+RWR+CDU'); Description = 'Left MFCD to left monitor,Right MFCD to right, CDU and camera on the center' Viewports = { Center = { x = 0; y = 0; width = 1980; height = 1080; viewDx = 0; viewDy = 0; aspect = 1.833333333; } } LEFT_MFCD = { x = 290; y = screen.height -1080; width = 610; height = 610; } RIGHT_MFCD = { x = screen.width -900; y = screen.height -1080; width = 610; height = 630; } ED_A10C_RWR = { x = 1024; y = screen.height 0; width = 610; height = 610; } A10CDU = { x = 2400; y = -1280; width = 800; height = 480; } UIMainView = Viewports.Center GU_MAIN_VIEWPORT = Viewports.Center I checked this with notepad++ and can't see any weird symbols, and I tried to make another .lua file by simply copying and pasting one of the existing files with a new file name and that won't show up either EDIT***(just to head off the potential questions, yes I did change the line in the file with a new name too) Cheers Les
-
Hi all, I have modified a setup file for the view to include the MFCDs, RWR and CDU based on my new combined resolution, but the file does not show up in the options drop-down. It is in the DCS World/config/monitorsetup folder, yet it simply doesn't appear as an option has the default location changed? It's been a while since I last had to change the monitor setup here's the file I created _ = function(p) return p; end; name = _('Camera+LMFCD+RMFCD+RWR+CDU'); Description = 'Left MFCD to left monitor,Right MFCD to right, CDU and camera on the center' Viewports = { Center = { x = 0; y = 0; width = 1980; height = 1080; viewDx = 0; viewDy = 0; aspect = 1.833333333; } } LEFT_MFCD = { x = 290; y = screen.height -1080; width = 610; height = 610; } RIGHT_MFCD = { x = screen.width -900; y = screen.height -1080; width = 610; height = 630; } ED_A10C_RWR = { x = 1024; y = screen.height 0; width = 610; height = 610; } A10CDU = { x = 2400; y = -1280; width = 800; height = 480; } UIMainView = Viewports.Center GU_MAIN_VIEWPORT = Viewports.Center Les
-
RS485 network hardware questions / details
lesthegrngo replied to lesthegrngo's topic in Home Cockpits
Thanks - I'll try it with a pinned module so I can install or remove it to see if there is any difference Les -
Hi all, this is a thread that follows on from the posts in the 'DCS BIOS over RS485' thread, but is more to discuss hardware setup rather than the generic issue. I didn't feel it was right to hijack that thread for this. To sum up the story so far, my A10C cockpit currently uses about 40 slave Arduino Nano's. At the suggestion of the very helpful people on this site I have gone for three Megas to be used as masters, one of which has three MAX487 chips so has effectively three RS485 busses, the other two have one Max487 chip each. This was originally to allow one RS485 bus for each 'leg' of the cockpit, so left console, main dash and right console. After trying out the networks, I found that I had some unwanted behaviour of the stepper motors if I connected any LCD or OLED connected nanos to the same bus as stepper connected ones, and so the two single Mega Masters will be used solely to drive those devices with steppers, and the three way bus Mega will be used to drive the rest. This works well as the steppers are all in the right console and dash, so they can be treated as individual legs. As an attempt to fix the strange flickering of the steppers I put in a dedicated 5A 5v power supply, however one of things that I didn't do was run a discrete 5v bus to each device, using the RS485 wiring to run the power. I am going to retry the setup I have with a dedicated 5v bus to see if that removes or reduces the stepper twitching. I would appreciate any input on this For the Mega masters, I believe that using a USB2.0 connection is fine and will be using a powered USB hub for this purpose. Again, if anyone has feedback I would like to hear it. Depending of how successful I am in eradicating the unwanted behaviour, I may revisit some of my PCB's to decouple the devices still further. For example the nano driving the OLED that is used to display the fuel quantity is on the same PCB as the nanos driving the Hydraulic gauge steppers and fuel gauge stepper, and so the RS485 connection for those are common. I have a dual axis stepper in the post for the fuel gauge to properly implement it so will take that opportunity to run two independent RS485 busses on that PCB. Cheers Les
-
Hi all, I am currently using Helios to display the ADI and HSI, but want to see if I can get the HDI and ADI in the monitor.lua to try to simplify it Using this thread I can see that it should be possible for the ADI, however I need to know where the list of callouts for the monitorsetup.lua code can be looked at. Is there a list somewhere? Cheers Les
-
Hi, the site was unavailable to me yesterday, sorry for the delay - this is the sketch that is working with the IR sensor #define DCSBIOS_IRQ_SERIAL //#define DCSBIOS_RS485_SLAVE 49 //#define TXENABLE_PIN 2 #include <AccelStepper.h> #include "DcsBios.h" #include <Wire.h> struct StepperConfig { unsigned int maxSteps; unsigned int acceleration; unsigned int maxSpeed; }; class Vid29Stepper : public DcsBios::Int16Buffer { private: AccelStepper& stepper; StepperConfig& stepperConfig; inline bool zeroDetected() { return digitalRead(irDetectorPin) == 1; } unsigned int (*map_function)(unsigned int); unsigned char initState; long currentStepperPosition; long lastAccelStepperPosition; unsigned char irDetectorPin; long zeroOffset; bool movingForward; bool lastZeroDetectState; long normalizeStepperPosition(long pos) { if (pos < 0) return pos + stepperConfig.maxSteps; if (pos >= stepperConfig.maxSteps) return pos - stepperConfig.maxSteps; return pos; } void updateCurrentStepperPosition() { // adjust currentStepperPosition to include the distance our stepper motor // was moved since we last updated it long movementSinceLastUpdate = stepper.currentPosition() - lastAccelStepperPosition; currentStepperPosition = normalizeStepperPosition(currentStepperPosition + movementSinceLastUpdate); lastAccelStepperPosition = stepper.currentPosition(); } public: Vid29Stepper(unsigned int address, AccelStepper& stepper, StepperConfig& stepperConfig, unsigned char irDetectorPin, long zeroOffset, unsigned int (*map_function)(unsigned int)): Int16Buffer(address), stepper(stepper), stepperConfig(stepperConfig), irDetectorPin(irDetectorPin), zeroOffset(zeroOffset), map_function(map_function), initState(0), currentStepperPosition(0), lastAccelStepperPosition(0) { } virtual void loop() { if (initState == 0) { // not initialized yet pinMode(irDetectorPin, INPUT); stepper.setMaxSpeed(stepperConfig.maxSpeed); stepper.setSpeed(1000); initState = 1; } if (initState == 1) { // move off zero if already there so we always get movement on reset // (to verify that the stepper is working) if (zeroDetected()) { stepper.runSpeed(); } else { initState = 2; } } if (initState == 2) { // zeroing if (!zeroDetected()) { stepper.runSpeed(); } else { stepper.setAcceleration(stepperConfig.acceleration); stepper.runToNewPosition(stepper.currentPosition() + zeroOffset); // tell the AccelStepper library that we are at position zero stepper.setCurrentPosition(0); lastAccelStepperPosition = 0; // set stepper acceleration in steps per second per second // (default is zero) stepper.setAcceleration(stepperConfig.acceleration); lastZeroDetectState = true; initState = 3; } } if (initState == 3) { // running normally // recalibrate when passing through zero position bool currentZeroDetectState = zeroDetected(); if (!lastZeroDetectState && currentZeroDetectState && movingForward) { // we have moved from left to right into the 'zero detect window' // and are now at position 0 lastAccelStepperPosition = stepper.currentPosition(); currentStepperPosition = normalizeStepperPosition(zeroOffset); } else if (lastZeroDetectState && !currentZeroDetectState && !movingForward) { // we have moved from right to left out of the 'zero detect window' // and are now at position (maxSteps-1) lastAccelStepperPosition = stepper.currentPosition(); currentStepperPosition = normalizeStepperPosition(stepperConfig.maxSteps + zeroOffset); } lastZeroDetectState = currentZeroDetectState; if (hasUpdatedData()) { // convert data from DCS to a target position expressed as a number of steps long targetPosition = (long)map_function(getData()); updateCurrentStepperPosition(); long delta = targetPosition - currentStepperPosition; // if we would move more than 180 degree counterclockwise, move clockwise instead if (delta < -((long)(stepperConfig.maxSteps / 2))) delta += stepperConfig.maxSteps; // if we would move more than 180 degree clockwise, move counterclockwise instead if (delta > (stepperConfig.maxSteps / 2)) delta -= (long)stepperConfig.maxSteps; movingForward = (delta >= 0); // tell AccelStepper to move relative to the current position stepper.move(delta); } stepper.run(); } } }; /* modify below this line */ /* define stepper parameters multiple Vid60Stepper instances can share the same StepperConfig object */ struct StepperConfig stepperConfig = { 730, // maxSteps 2200, // maxSpeed 1000 // acceleration }; // define AccelStepper instance AccelStepper stepper(AccelStepper::DRIVER, 11, 10); // define Vid29Stepper class that uses the AccelStepper instance defined in the line above // v-- arbitrary name Vid29Stepper alt100ftPointer(0x107e, // address of stepper data stepper, // name of AccelStepper instance stepperConfig, // StepperConfig struct instance 6, // IR Detector Pin (must be HIGH in zero position) 0, // zero offset [](unsigned int newValue) -> unsigned int { /* this function needs to map newValue to the correct number of steps */ return map(newValue, 65535, 0, 0, stepperConfig.maxSteps - 1); }); void setup() { DcsBios::setup(); } void loop() { DcsBios::loop(); } cheers Les
-
I have a working sketch, originally from one of the clever guys on the forum. I'll copy it into here when I get home Cheers Les