-
Posts
640 -
Joined
-
Last visited
Content Type
Profiles
Forums
Events
Everything posted by Vinc_Vega
-
Code needed for Viper FFI Using SH1106 1.3" 128x64 IIC
Vinc_Vega replied to Enabler's topic in Home Cockpits
Hi, I didn't know that your instrument uses an engraved bezel but assumed that such designs may exist For your case you only comment (use // infront of a code line) the line calling the printBezel() routine within the UpdateDisplay() function. It's also documented within the code in the UpdateDisplay() routine. Than the black rectangles and the text will disappear. Edit: can you tell me how many pixels we have to go down? I assume 5 pixels may do it. Regards, Vinc- 26 replies
-
- oled
- arduino code
-
(and 2 more)
Tagged with:
-
Code needed for Viper FFI Using SH1106 1.3" 128x64 IIC
Vinc_Vega replied to Enabler's topic in Home Cockpits
Reworked code and numbers, they should look a little better now. Regards, Vinc characters_n.h F-16_FFI_01c.ino- 26 replies
-
- 1
-
-
- oled
- arduino code
-
(and 2 more)
Tagged with:
-
Why don't you look here and replace the display driver to the original SSD1306 one? Regards, Vinc
-
Yes, that's the easy way to talk to a smaller matrix Congratulations! Regards, Vinc
-
Hi Zorg, First I have to say, that I have the F-16 module just to check some scripting but have no clue how the ECM panel works or the inner data structure. I cannot find a LED matrix for the ECM panel within the DcsBios reference tool that is comparable to the A-10 coding. If you want to do your own 2 col and 8 row matrix, in my opinion you should change the coding somehow to the following pattern unsigned char c1_row_map[16] ={ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, }; #define SEG_DP (1<<7) #define SEG_A (1<<6) #define SEG_B (1<<5) #define SEG_C (1<<4) #define SEG_D (1<<3) #define SEG_E (1<<2) #define SEG_F (1<<1) #define SEG_G (1<<0) unsigned char c1_mask_map[16] = { SEG_DP, SEG_B, SEG_D, SEG_F, SEG_DP, SEG_B, SEG_D, SEG_F, SEG_A, SEG_C, SEG_E, SEG_G, SEG_A, SEG_C, SEG_E, SEG_G, }; unsigned char max7219_rows[8]; Furthermore, I think that you cannot change the A-10 command "updateCautionLights" into "updateEcmLights" without knowing the correct commands and addresses for the F-16 module. For example, the hex code 0x10d4 is for the A-10 CLP. void updateEcmLights (unsigned int address, unsigned int data){ unsigned char clp_row = (address-0x10d4) *2; unsigned char stard_index = clp_row * 4; unsigned char column = 0; unsigned char i; Same for the A-10 commands "ClpData1" and "ClpData2" where no F-16 equivalent is within your code. void onClpData1Change(unsigned int newValue) { updateEcmLights(0x448, newValue); } DcsBios::IntegerBuffer clpData1(0x4480, 0xffff, 0, onClpData1Change); void onClpData2Change(unsigned int newValue) { updateEcmLights(0x448a, newValue); } DcsBios::IntegerBuffer clpData2(0x448a, 0xffff, 0, onClpData2Change); So in the end, the problem cannot be solved without further knowledge on the F-16 EMC panels inner data structure. Sorry for that! Regards, Vinc
-
Hi Zorg, I'll have a look in the evening if help is possible. Regards, Vinc
-
Thank you, at least it's worth to try it. Regards, Vinc
-
Code needed for Viper FFI Using SH1106 1.3" 128x64 IIC
Vinc_Vega replied to Enabler's topic in Home Cockpits
Thanks, that's awesome I wish I was that far with my cockpit. But there always is a next winter to work on it. I'll try to improve graphics and performance of the sketch and will give you an update. Regards, Vinc- 26 replies
-
- 1
-
-
- oled
- arduino code
-
(and 2 more)
Tagged with:
-
Code needed for Viper FFI Using SH1106 1.3" 128x64 IIC
Vinc_Vega replied to Enabler's topic in Home Cockpits
If you like, you may post a picture or clip of the working display in your cockpit environment Regards, Vinc- 26 replies
-
- oled
- arduino code
-
(and 2 more)
Tagged with:
-
For the sake of completeness: Functioning sketch for the F-16 Fuel Flow Counter, adapted to a SH1106 I2C OLED 128 x 64 pixel. https://forum.dcs.world/topic/329533-code-needed-for-viper-ffi-using-sh1106-13-128x64-iic/#comment-5296189 Regards, Vinc
- 75 replies
-
- 1
-
-
Hi eatthis, I understood that you have tried several USB ports, including new cables and different Arduino boards, to make a connection between the Arduino and the IDE. Neither of that worked for you. I assume that the connection is still greyed out if you try to connect via the “Tools/Port” menu items. That seems to me like a problem that must be solved between the Arduino board and your installation of the IDE. It may help to delete the COM ports within Windows device manager or re-install the Arduino IDE. Nevertheless, I would trace your technical issue down to non-DcsBios related roots. Sorry to say, that I don’t have the qualification to help and bring up more detailed assistance. Find out what’s already on an Arduino board is almost not possible. The upload process uploads a compiled binary file to the chip that cannot be “re-engineered” to human readable text. You have to remember what you have uploaded to a dedicated Arduino board. One exception is that you open the Serial Monitor after plug in the board and hope that the loaded sketch communicates via the serial interface. To make it short: Your actual problem seems not related to the questioned sketch. You first have to solve the connection problems, related to the IDE or your computer COM ports. Regards, Vinc
-
Code needed for Viper FFI Using SH1106 1.3" 128x64 IIC
Vinc_Vega replied to Enabler's topic in Home Cockpits
The values for the flow counter are for use with gauges and not for a direct output. So it is not easy to convert them back to a real digital display. The results look much better in the scrolling digit style, like already done for several A-10 instruments. Furthermore, it doesn't matter what OLED driver is in use. Most of the sketches can be adapted to several libraries or drivers (like SSD1306 SPI to SH1106 I2C or so). I quickly scripted within Middlefart's A-10 code to make it useable for the F-16 Fuel Flow Counter and SH1106 driven OLEDs. The sketch uses the (standard) characters.h file for the digits, to be installed within the same folder like the script. It's not 100% perfect but may be a starting point for your Fuel Flow Counter. Regards, Vinc characters.h- 26 replies
-
- 1
-
-
- oled
- arduino code
-
(and 2 more)
Tagged with:
-
It's the connection to the Arduino over the serial protocol (USB) to talk to the programme. You may see text outputs of it or give keyboard inputs. If you don't know, you probably don't left it open Did you already restart the IDE? Regards, Vinc Edit: The serial monitor also can be found under the menu item "Tools" and than "Serial Monitor". That way an open window can be closed too.
-
This is not a problem of your sketch. Looks like the COM port is busy. If you have a serial monitor open, you must close it before uploading a sketch. Otherwise try to disconnect and reconnect the Arduino or use another cable and confirm the right port for the upload in the IDE. In some cases you may choose another bootloader (Old bootloader for the Nano) to solve the problem. Regards, Vinc
-
Verry nice! I like your flight rig. Regards, Vinc
-
Im still trying to convince my Raspberry safely talking to DcsBios for the HSI display. If that works (sometime) the plan is to let another Raspbi reproduce the ADI. So two USB ports would be sucrified in favour to free HDMI ports. Than only the two head down displays and the radar warner have to be connected to the graphic card. Regards, Vinc
-
So what I do for the A-10C is reading the value of the linear 10kOhm pot at the Lighting Control Panel (analogue input A0) and put the value directly to DcsBios for the console lighting signal, like DcsBios::Potentiometer lcpConsole("LCP_CONSOLE", A0); That value may be read back from DcsBios (here: onLcpConsoleChange) and than mapped (to e.g. a PWM value) to bring it to a dimmable backlight LED strip of a panel. That code may be used for several panels. (In my case a division of the read back value by 256 is more efficient than the map function as PWM signals of a Nano or Mega are in the range of 0 to 255.) // ---------- DCS content here below ---------- // For Console Lights: definition of the Output Pin (PWM) const int ConsoleLightsPin = 3; // use PWM PIN for Console Lights (via MOSFET) // For Console Lights: definition of the Output as PWM signal void onLcpConsoleChange(unsigned int newValue) { // Min. Value 0 - Max. Value: 65535 analogWrite(ConsoleLightsPin, (newValue/256)); // writes as PWM (0 - 255) } DcsBios::IntegerBuffer lcpConsoleBuffer(0x1150, 0xffff, 0, onLcpConsoleChange); Regards, Vinc
-
Hi Les, Congratulations to see the finish line! If USB is working fine and the glitches come when wiring to the other bus, so did you check if RS485 slave address 49 is already in use with an other device? Regards, Vinc
-
For your information I just wrote a small tutorial on how to deal with the MCP23017 port expander: Regards, Vinc
-
Let's carry on with the 16 bit port expansion to an Arduino Nano example. To keep it simple we just use waveshare's MCP23017 ->board<- and ->library<- to extend the pins of a Nano to match the physical switches (not rotaries) requirements of the A-10 VHF FM radio. I used the waveshare library because it is fast reacting and smaller than the Adafuit MCP23x17 library. Here the Frequency Selection Dial (4 pins), Mode switch (3 pins), Squelch switch (2 pins), Load button (1 pin) and a simple rocker switch for the Preset Channel Selector (2 pins) are connected to 12 of the 16 expander inputs. The MCP23017 is connected via A4 and A5 to the I2C bus (just two Nano pins plus electrical power), that means you still have plenty pins left to connect the remaining rotaries and potentiometer as well as displays for the frequency output and other devices. I wired all switches the typically DcsBios style active low, so a single switch also may be used directly connected for test purposes. First the declaration of DcsBios, I2C-bus ("wire") and the MCP23017 object has to be done within the code. #define DCSBIOS_IRQ_SERIAL // #define DCSBIOS_DEFAULT_SERIAL // for use with no Arduino Chips #include "DcsBios.h" #include <Wire.h> // ----- 16 bit port expander connected @ IC2 address 0x27 #include "MCP23017.h" MCP23017 mcp; // Connect pin SCL of the expander to NANO/UNO pin A5 // Connect pin SDA of the expander to NANO/UNO pin A4 // MCP23017 connections // Physial Pin# PinName PinID // 21 GPA0 0 // 22 GPA1 1 // 23 GPA2 2 // 24 GPA3 3 // 25 GPA4 4 // 26 GPA5 5 // 27 GPA6 6 // 28 GPA7 7 // 1 GPB0 8 // 2 GPB1 9 // 3 GPB2 10 // 4 GPB3 11 // 5 GPB4 12 // 6 GPB5 13 // 7 GPB6 14 // 8 GPB7 15 Than a few variables may be declared, like debouncing time and the actual and previous switch status for further use. // ----- declaration of variables const byte debounce = 35; // debounce time (value to be multiplied by 10 to make an integer) byte VHFFM_FREQEMER = 0; byte prev_VHFFM_FREQEMER = 0; byte VHFFM_MODE = 0; byte prev_VHFFM_MODE = 0; byte VHFFM_PRESET = 0; byte prev_VHFFM_PRESET = 0; byte VHFFM_SQUELCH = 1; byte prev_VHFFM_SQUELCH = 1; byte VHFFM_LOAD = 0; byte prev_VHFFM_LOAD = 0; Within the SETUP section the modes and pullups for each input have to be identified. We don't need all of the 16 expansions in this case. // ---------- SETUP Loop ---------- void setup() { DcsBios::setup(); // ----- initialize the 16 bit port expander mcp.begin(0x27); mcp.pinMode(0, INPUT); mcp.pullUp(0, HIGH); mcp.pinMode(1, INPUT); mcp.pullUp(1, HIGH); mcp.pinMode(2, INPUT); mcp.pullUp(2, HIGH); mcp.pinMode(3, INPUT); mcp.pullUp(3, HIGH); mcp.pinMode(4, INPUT); mcp.pullUp(4, HIGH); mcp.pinMode(5, INPUT); mcp.pullUp(5, HIGH); mcp.pinMode(6, INPUT); mcp.pullUp(6, HIGH); mcp.pinMode(7, INPUT); mcp.pullUp(7, HIGH); mcp.pinMode(8, INPUT); mcp.pullUp(8, HIGH); mcp.pinMode(9, INPUT); mcp.pullUp(9, HIGH); mcp.pinMode(10, INPUT); mcp.pullUp(10, HIGH); mcp.pinMode(11, INPUT); mcp.pullUp(11, HIGH); // ... continue to pin 15 if necessary } // ---------- End of SETUP Loop ---------- Now we need to read the expander inputs and send the corresponding switch status to DcsBios. Expander ports are read the typically Arduino code style: [mcp.digitalRead(expander port) == 0] if a switch is activated. Btw. each status information may be placed into a variable related to the input device (switch). I have grouped that into a compact function -> void send_mcpReadings() // ----- read the physical VHF FM radio switch positions from cockpit, save status into variables and send to DcsBios void send_mcpReadings() { // Frequency Selection Dial FM/AM/MAN/PRE if (mcp.digitalRead(0) == 0) {VHFFM_FREQEMER = 0; DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "0");} // Emergency FM if (mcp.digitalRead(1) == 0) {VHFFM_FREQEMER = 1; DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "1");} // Emergency AM if (mcp.digitalRead(2) == 0) {VHFFM_FREQEMER = 2; DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "2");} // Manual mode if (mcp.digitalRead(3) == 0) {VHFFM_FREQEMER = 3; DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "3");} // preselected channel mode // Mode OFF/TR/DF if (mcp.digitalRead(4) == 0) {VHFFM_MODE = 0; DcsBios::tryToSendDcsBiosMessage("VHFFM_MODE", "0");} // OFF - disables the radio if (mcp.digitalRead(5) == 0) {VHFFM_MODE = 1; DcsBios::tryToSendDcsBiosMessage("VHFFM_MODE", "1");} // TR - Transmit and Recieve mode if (mcp.digitalRead(6) == 0) {VHFFM_MODE = 2; DcsBios::tryToSendDcsBiosMessage("VHFFM_MODE", "2");} // DF - Direction finding mode for the ADI and HSI // Preset Channel Selector if (mcp.digitalRead(7) == 0) {VHFFM_PRESET = 0; DcsBios::tryToSendDcsBiosMessage("VHFFM_PRESET", "DEC");} // decrease channel selection if (mcp.digitalRead(8) == 0) {VHFFM_PRESET = 1; DcsBios::tryToSendDcsBiosMessage("VHFFM_PRESET", "INC");} // increase channel selection // Squelch if (mcp.digitalRead(9) == 0) {VHFFM_SQUELCH = 0; DcsBios::tryToSendDcsBiosMessage("VHFFM_SQUELCH", "0");} // Squelch disabled if ((mcp.digitalRead(9) == 1) && (mcp.digitalRead(10) == 1)) {VHFFM_SQUELCH = 1; DcsBios::tryToSendDcsBiosMessage("VHFFM_SQUELCH", "1");} // if no push botton is pressed // momentary and therefore, may be commented out for regularily sending if (mcp.digitalRead(10) == 0) {VHFFM_SQUELCH = 2; DcsBios::tryToSendDcsBiosMessage("VHFFM_SQUELCH", "2");} // Squelch tone mode if (mcp.digitalRead(11) == 0) {VHFFM_LOAD = 1; DcsBios::tryToSendDcsBiosMessage("VHFFM_LOAD", "1");} // Load Button pressed if ((mcp.digitalRead(11) == 1) && (VHFFM_LOAD == 1)) {VHFFM_LOAD = 0; DcsBios::tryToSendDcsBiosMessage("VHFFM_LOAD", "0");} // reset Load Button } You also may skip to set status variables and send data directly to DcsBios by using code like below // Frequency Selection Dial FM/AM/MAN/PRE if (mcp.digitalRead(0) == 0) DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "0"); // Emergency FM if (mcp.digitalRead(1) == 0) DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "1"); // Emergency AM if (mcp.digitalRead(2) == 0) DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "2"); // Manual mode if (mcp.digitalRead(3) == 0) DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "3"); // preselected channel mode At last the readings continuously can be pulled and than send to DcsBios within the execution loop. // ---------- EXECUTION loop ---------- void loop() { DcsBios::loop(); send_mcpReadings(); } To do it more elegant, the information may be send non blocking and periodically to DcsBios. That way the traffic on the connected bus may be decreased. We first have to declare two more variables within the code: // ----- declaration of variables ... const byte period = 10; // refresh and send switch positions regularily in seconds (value to be multiplied by 1000 to make an integer) long lastChangeTime = 0; and than enhance the loop section so, that the information is send only e.g. every 10 seconds (to be changed with the variable "period"). // ---------- EXECUTION loop ---------- void loop() { DcsBios::loop(); // send switch positions regularily (non blocking) long now = millis(); if (now > lastChangeTime + (period*1000)) { send_mcpReadings(); lastChangeTime = now; } } A further way is to read the expander inputs and send the corresponding switch status to the simulator only if a switch position has changed. To keep the overview, again functional grouping is used -> void send_onChange() // ----- read Inputs from MCP23017 and send switch positions only on change void send_onChange() { // Frequency Selection Dial FM/AM/MAN/PRE -> SwitchMultiPos at expander pins GPA0 (0) to GPA3 (3) if (mcp.digitalRead(0) == 0) { VHFFM_FREQEMER = 0; if (prev_VHFFM_FREQEMER != 0) { DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "0"); // "tryToSendDcsBiosMessage" or "sendDcsBiosMessage" prev_VHFFM_FREQEMER = VHFFM_FREQEMER; } } if (mcp.digitalRead(1) == 0) { VHFFM_FREQEMER = 1; if (prev_VHFFM_FREQEMER != 1) { DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "1"); prev_VHFFM_FREQEMER = VHFFM_FREQEMER; } } if (mcp.digitalRead(2) == 0) { VHFFM_FREQEMER = 2; if (prev_VHFFM_FREQEMER != 2) { DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "2"); prev_VHFFM_FREQEMER = VHFFM_FREQEMER; } } if (mcp.digitalRead(3) == 0) { VHFFM_FREQEMER = 3; if (prev_VHFFM_FREQEMER != 3) { DcsBios::tryToSendDcsBiosMessage("VHFFM_FREQEMER", "3"); prev_VHFFM_FREQEMER = VHFFM_FREQEMER; } } // Mode OFF/TR/DF -> SwitchMultiPos at expander pins GPA4 (4) to GPA6 (6) if (mcp.digitalRead(4) == 0) { VHFFM_MODE = 0; if (prev_VHFFM_MODE != 0) { DcsBios::tryToSendDcsBiosMessage("VHFFM_MODE", "0"); prev_VHFFM_MODE = VHFFM_MODE; } } if (mcp.digitalRead(5) == 0) { VHFFM_MODE = 1; if (prev_VHFFM_MODE != 1) { DcsBios::tryToSendDcsBiosMessage("VHFFM_MODE", "1"); prev_VHFFM_MODE = VHFFM_MODE; } } if (mcp.digitalRead(6) == 0) { VHFFM_MODE = 2; if (prev_VHFFM_MODE != 2) { DcsBios::tryToSendDcsBiosMessage("VHFFM_MODE", "2"); prev_VHFFM_MODE = VHFFM_MODE; } } // Preset Channel Selector -> two push buttons workaround for a rocker switch at expander pins GPA7 (7) and GPB0 (8) if (mcp.digitalRead(7) == 0) { VHFFM_PRESET = 1; if (prev_VHFFM_PRESET != 1) { DcsBios::tryToSendDcsBiosMessage("VHFFM_PRESET", "DEC"); delay(debounce*10); prev_VHFFM_PRESET = 0; // reset to accept next button signal } } if (mcp.digitalRead(8) == 0) { VHFFM_PRESET = 2; if (prev_VHFFM_PRESET != 2) { DcsBios::tryToSendDcsBiosMessage("VHFFM_PRESET", "INC"); delay(debounce*10); prev_VHFFM_PRESET = 0; // reset to accept next button signal } } // Squelch -> Switch3Pos at expander pins GPB1 (9) and GPB2 (10) if ((mcp.digitalRead(9) == 1) && (mcp.digitalRead(10) == 1)) // workaround to active send from the middle position of a 3 pos toggle switch { VHFFM_SQUELCH = 1; if (prev_VHFFM_SQUELCH != 1) { DcsBios::tryToSendDcsBiosMessage("VHFFM_SQUELCH", "1"); prev_VHFFM_SQUELCH = VHFFM_SQUELCH; } } if (mcp.digitalRead(9) == 0) { VHFFM_SQUELCH = 0; if (prev_VHFFM_SQUELCH != 0) { DcsBios::tryToSendDcsBiosMessage("VHFFM_SQUELCH", "0"); prev_VHFFM_SQUELCH = VHFFM_SQUELCH; } } if (mcp.digitalRead(10) == 0) { VHFFM_SQUELCH = 2; if (prev_VHFFM_SQUELCH != 2) { DcsBios::tryToSendDcsBiosMessage("VHFFM_SQUELCH", "2"); prev_VHFFM_SQUELCH = VHFFM_SQUELCH; } } // Load Button -> simple push button at expander pin GPB3 (11) if (mcp.digitalRead(11) == 0) { VHFFM_LOAD = 1; if (prev_VHFFM_LOAD != 1) { DcsBios::tryToSendDcsBiosMessage("VHFFM_LOAD", "1"); delay(debounce*10); prev_VHFFM_LOAD = 0; // push Load Button } } if ((mcp.digitalRead(11) == 1) && (VHFFM_LOAD == 1)) // release button and reset the variable { delay(debounce*10); DcsBios::tryToSendDcsBiosMessage("VHFFM_LOAD", "0"); VHFFM_LOAD = 0; prev_VHFFM_LOAD = 0; } } In the end both functions may be used within the same loop to send the readings periodically and on switch input changes. // ---------- EXECUTION loop ---------- void loop() { DcsBios::loop(); // possibility 1: send switch positions regularily (non blocking) long now = millis(); if (now > lastChangeTime + (period*1000)) { send_mcpReadings(); lastChangeTime = now; } // possibility 2: continously read the port expander and send switch positions only on change send_onChange(); } // ---------- End of EXECUTION loop ---------- Btw. the switch positions still may be read out from the simulator, for example that of the Mode switch. // ---------- DCS content here below ---------- // example to read the switch feedback from DcsBios, here: status change of the Mode OFF/TR/DF switch (OFF = 0/TR = 1/DF =2) void onVhffmModeChange(unsigned int newValue) { // your code here } DcsBios::IntegerBuffer vhffmModeBuffer(0x1194, 0x0060, 5, onVhffmModeChange); Below is the final sketch to read all switches from the VHF FM radio panel and send their status information regularly and on change to DcsBios. Regards, Vinc
- 75 replies
-
- 2
-
-
-
Edit: for the application of the above CD47HC4067 chip see here: http://adam-meyer.com/arduino/CD74HC4067 It could be used as a 16 pin analogue channel expander to your Nano board. The MCP digital expanders are also available for the SPI interface, just google for MCP23S17. I use the cheaper waveshare MCP23017 board for the I2C bus and may give you some hints to deal with it. https://www.waveshare.com/mcp23017-io-expansion-board.htm It's a 16 digital pins extension and works good for me with the Nano. The expanders may be daisy chained if the I2C addresses are manipulated. Here is a link to Adafruits' library that even works with the waveshare chipsets, for your imagination. https://learn.adafruit.com/adafruit-mcp23017-i2c-gpio-expander/arduino Other than to the Nanos' DcsBios code you have to take care to regularly pull the input status from the expanded ports. But this easily can be scripted. Regards, Vinc
-
Try the MCP23017, it's I2C compatible and there is already an Adafruit library available for it. Regards, Vinc
-
Hi Les, although I changed the cl_mask_map to my matrix design, the code is still working for me and I can't confirm the flipped cautious. Checked with the latest open beta of the A-10C II. Regards, Vinc
-
Assistance required converting a .bdf file to .c or .h
Vinc_Vega replied to lesthegrngo's topic in Home Cockpits
You have to copy the code from the .c file into the Arduino sketch. Than it can be used like the built-in fonts of the u8g2 library. Edit: see ->here for an example. Regards, Vinc -
Well I didn't mean that resources but rather the stock you can pull from your shelves In good old Europe there is not really a market for such military aircraft parts. And if it was they are really expensive. That means everything has to be designed and produced by ourselves. Furtunatly there is this great help here in the forum Regards, Vinc