wiggles5289 Posted September 6, 2022 Author Posted September 6, 2022 On 8/23/2022 at 1:24 PM, mike4t5 said: Hi sorry for the late reply. unfortunately i've never managed to get it working properly. i have the same issue as yourself. it works perfectly till you get to the list page then it gets corrupted or something. im wondering if i should just try to find the same board as was used by everyone else. I have just jumped back into rebuilding my code for the DED. There is a problem with code I have on the first post. The StringBuffer and dedLineXBuffer values have changed somewhere with an update, possibly from the 2.6 to 2.7 jump as there have been new pages added to the DED. As for now I will be fixing the code to make sure that it does work out of the box.
wiggles5289 Posted September 6, 2022 Author Posted September 6, 2022 After pulling my hair out for about 2 hours as to why my original code wasn't working, I figured out that I had wrong pointer data for each line. //F-16 DED for DCS BIOS using 256x64 ER-OLED032-1G from BuyDisplay.com //Final code by JohnnyChicago,a whole lotta font cred to Fusion's wife, and Wiggles5289 on the DCS Forums //Updated for DCS 2.7 on 06SEP2022 #define DCSBIOS_IRQ_SERIAL #include "DcsBios.h" #include <Arduino.h> #include <U8g2lib.h> #include <U8glib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); char* line1; char* line2; char* line3; char* line4; char* line5; const u8g_fntpgm_uint8_t DEDfont16px[1148] U8G_FONT_SECTION("DEDfont16px") = "_\0\3\3\4\4\4\5\5\10\16\0\376\12\376\12\377\1\212\3\1\4_ \5\0\10\61!\14\224\32" "q$\207\212H,\222\0\42\10\66y\61DL\2#\22\227\31q\224$\222\213\222D$\221\134\224$" "\22\0$\20\326\371\260\204\62\212\210\252\225$\241\11E\0%\24\270\10q\206\22\231D\22\232Hu\31" "E\324$\302\11\0&\21\227\31qf\22\221D\66\223JL\22\221h\42'\6\62{\61\14(\15\264" "\372\260$\42\211H\67\221L\0)\15\264\372\60d\42\231H\27\221D\4*\20\310\10\61~\60\205h" "s\300\214\24:<\20+\12V\71\261\204\42\223P\4,\10C\373\60,\24\0-\6\26Y\61\14." "\6#\33\61\14/\16\246\11\61\325\204\62\241L(\23\12\1\60\16\226\32q(\42JS\245B\222P" "\0\61\11\225\31\361D\207\230>\62\14\226\31q(\42\222P\246\243\1\63\17\226\31q(\42\222P\64" "%\221$\24\0\64\20\227\31q\244*\42\211H\242$\71J%\0\65\15\226\31\61\16A\305\252P&" "!\1\66\15\226\31\261fj\25\21'\11\5\0\67\15\226\31\61\214\62\241L(\23\252\1\70\20\226\31" "q(\42REB\221\224H\22\12\0\71\15\226\31q(\42N\222\232\332\10\0:\10s\33\61\354 " "\3;\12\223\373\60\354 \13\5\0<\11\226\31\61e\272\352\0=\7\66I\61\314\6>\11\226\31\61" "\244\272\351\10\77\16\226\31q(\42\222LQ\16\23\212\0@\17\230\30q,B&\213\204\42!\331\1" "\7A\14\226\31\261d\24\21\323a\304$B\14\226\31\61*\42\246\213\210\351\2C\15\226\31q(\42" "FM$\11\5\0D\14\226\31\61H\22%\276HH\0E\14\226\31\61\16A\305\212P\321\0F\14" "\226\31\61\16A\305\212P#\0G\14\226\31q(\42F\225\22IRH\13\226\31\61D\234\16#N" "\2I\11\224\32\61(\42}!J\13\226\31\61\365H\42I(\0K\15\226\31\61D,ZH\22\235" "H\2L\11\226\31\61\204\372\321\0M\20\227\31\61d\264J%B\211P\42\64\66\1N\15\227\31\61" "d\264\222\205b\252\261\11O\13\226\31q(\42~\222P\0P\14\226\31\61*\42\246\213P#\0Q" "\14\266\371p(\42~\222\20\245\2R\14\226\31\61*\42\246\213&&\1S\14\226\31q(\42\252V" "\222\204\2T\11\226\31\61LB\375\4U\12\226\31\61D\374IB\1V\13\226\31\61D\374$\241\211" "\0W\21\227\31\61d\134\42\224\10%\242I\42\222H\0X\17\226\31\61D$\211$&\224E\224\230" "\4Y\14\226\31\61D\234$\64\241&\0Z\12\226\31\61\214j:\12\15[\11\304\352\60L\372'\2" "\134\27\230\30\61d\22ID%\42\71L\42*\21\221D&\221ID\0]\11\304\352\60H\372'\3" "^\11\66\231\261d\24\221\0_\7\30\350\60\16\1`\10\64\232\61F\62\1a\16\267\31\361\242\263\312" "\35\303\245\66\215\1b\14\226\31\61\204\302\212\210\247\13\0c\14v\31q(\42\242&\11\5\0d\12" "\226\31\61UN<I\12e\14v\31q(\42\322a(\245\0f\14\226\31\261(B\65\213P\33\0" "g\14\246\351pN<I\212\302\13\0h\13\226\31\61\204\302\212\210O\2i\13\246\31\261\204r\10Q" "O\6j\12\325\351\360\224i\372\315\2k\15\226\31\61\204J,\22\222D\211$l\11\226\31\61\210\372" "\311\0m\21w\31\61,\222\10%B\211P\42\224\10M\0n\11v\31\61*\42>\11o\11Cm" "qR$)\0p\14\246\351\60*\42\236.BE\0q\12\246\351pN<I\212\32r\13v\31\61" "D\24\233P#\0s\12v\31q\216R\252\360\2t\13\226\31q\204\62\213PW\2u\11v\31\61" "D|\222\24v\13v\31\61D<Ih\42\0w\21w\31\61d\224\10%B\211P\42\232$\22\0" "x\15v\31\61D$\11MF\21\221\4y\24\247\350pD\22\221D$\21ID\22\221\210*\24\321" "\0z\11v\31\61\214\62\35\15{\14\265\371\360D\62%E\65E\1|\7\302\353\60>\14}\15\265" "\372\60\204\62E%\65%\31\0~\12\70xqf\23\311l\2\0\0\0\4\377\377\0"; void onDedLine1Change(char* newValue) { line1 = newValue; } DcsBios::StringBuffer<29> dedLine1Buffer(0x450a, onDedLine1Change); void onDedLine2Change(char* newValue) { line2 = newValue; } DcsBios::StringBuffer<29> dedLine2Buffer(0x4528, onDedLine2Change); void onDedLine3Change(char* newValue) { line3 = newValue; } DcsBios::StringBuffer<29> dedLine3Buffer(0x4546, onDedLine3Change); void onDedLine4Change(char* newValue) { line4 = newValue; } DcsBios::StringBuffer<29> dedLine4Buffer(0x4564, onDedLine4Change); void onDedLine5Change(char* newValue) { line5 = newValue; } DcsBios::StringBuffer<29> dedLine5Buffer(0x4582, onDedLine5Change); void setup() { DcsBios::setup(); u8g2.begin(); u8g2.clearBuffer(); u8g2.setFont(DEDfont16px); } void loop() { u8g2.firstPage(); do { u8g2.drawStr(30, 12.8, line1); u8g2.drawStr(30, 25.6, line2); u8g2.drawStr(30, 38.4, line3); u8g2.drawStr(30, 51.2, line4); u8g2.drawStr(30, 64, line5); } while ( u8g2.nextPage() ); u8g2.updateDisplay(); DcsBios::loop(); } Updated code to be added to first post.
mike4t5 Posted October 4, 2022 Posted October 4, 2022 (edited) On 8/9/2022 at 11:04 PM, Meringdal said: A small update from me: As mentioned above I had some troubles with this 3.12" oled display from Aliexpress - Ver: 2.1. At first boot it worked like a charm, but changing to "List" or any other page on the DED made the display go black. Looked like there were some kind of issue where some of the letters or numbers did not fit into the panel (tried to record it in slow motion from my phone). I deleted the font in the code, and added the standard font from the library. Now, everything works expect there is some minor bugs with some of the letters like degrees on NAV page. Will update this post if I find any suitable font for this display. Short update: Did not find any solution on the font, but found out that this Ver 2.1 SSD1332 display has an active area of that is smaller than the one from Buydisplay. Anyone got any input? Right some good news I've managed to work it with the Ver 2.1 board, I've managed to get it up and running and the list page works only thing is it has a random a on each line don't know why but it's working! So I used wiggles5289 latest script but had to change the pointers again as on current beta it's now Line 1 : 0x4500 Line 2 : 0x451e Line 3 : 0x453c Line 4 : 0x455a Line 5 : 0x4578 Everything else is left the same. Also one thing I did that seems to have sorted it out was move ground to pin 1 on the display. After doing that it works almost perfectly, destination page doesn't work although it might be a DC's bios and latest beta thing as it shows nothing when you inspect the output. Selecting this page will require you to reset the Arduino. External reset switch is recommended if you make the case for it. Edited October 4, 2022 by mike4t5
wiggles5289 Posted November 9, 2022 Author Posted November 9, 2022 On 10/4/2022 at 12:34 PM, mike4t5 said: Right some good news I've managed to work it with the Ver 2.1 board, I've managed to get it up and running and the list page works only thing is it has a random a on each line don't know why but it's working! So I used wiggles5289 latest script but had to change the pointers again as on current beta it's now Line 1 : 0x4500 Line 2 : 0x451e Line 3 : 0x453c Line 4 : 0x455a Line 5 : 0x4578 Everything else is left the same. Also one thing I did that seems to have sorted it out was move ground to pin 1 on the display. After doing that it works almost perfectly, destination page doesn't work although it might be a DC's bios and latest beta thing as it shows nothing when you inspect the output. Selecting this page will require you to reset the Arduino. External reset switch is recommended if you make the case for it. That random A is actually some code to invert the text of certain characters. Im not a good programmer and don't know how to implement it. The U8G2 library isn't the best to do this with, Im trying to look into a temp fix to prevent the character from showing and properly highlighting the text in the future.
RafaPolit Posted November 9, 2022 Posted November 9, 2022 If you take the first 24 characters, it's perfectly safe. You won't have the blinking cursors, which are very useful in many scenarios though. I'm Dragon in the Multiplayer servers.
Ares63 Posted February 1, 2023 Posted February 1, 2023 (edited) Il 9/11/2022 at 19:09, wiggles5289 ha scritto: That random A is actually some code to invert the text of certain characters. Im not a good programmer and don't know how to implement it. The U8G2 library isn't the best to do this with, Im trying to look into a temp fix to prevent the character from showing and properly highlighting the text in the future. It is not a random char at the end of the record there are 4 bitmaps byte each bit it is the corresponding column position char status if is 0 in normal if is 1 it is in reverse thi is the best solution i find to do that with a small record increasing and without to change to much in DCS-BIOS lua side ... i'm agree with @RafaPolit reverse field are very usefull to understand that you are input field and when blinking that something is wrong Edited February 1, 2023 by Ares63
Mverick1971 Posted February 24, 2023 Posted February 24, 2023 Need help cant get the code to board got the Arduino Nano 33 BLE And the 3.12 OLED SPI ver 1.0 Seven pins got it connecten to Arduine COM port 4 for code but got error C:\Users\John_\Desktop\F-16_ICP__UFC__5237602\ded-main\ded-main\DED\DED.ino:62:10: fatal error: er_oled.h: No such file or directory #include "er_oled.h" ^~~~~~~~~~~ compilation terminated. Multiple libraries were found for "DcsBios.h" Used: C:\Users\John_\Documents\Arduino\libraries\dcs-bios-arduino-library-0.3.8 Not used: C:\Users\John_\Documents\Arduino\libraries\dcs-bios-arduino-library-0.2.11 exit status 1 Compilation error: er_oled.h: No such file or directory this is the total code ??? /* DED v1.15 Implemented interrupt method to switch mode. * DED v1.1 Added antenna symbols that replace the radio channels during radio operation in F-18 mode. * Changed LIST and MISC detection method as just checking the first row wasn't robust enough. * DED v1.0 Created by James Storey in May 2022, github.com/jg-storey/ded * Arduino code to display F-16 Data Entry Display and F-18 Upfront Controls information from DCS-BIOS * on a ER-OLEDM028-1 2.8" 256x64 OLED display from BuyDisplay.com * https://www.buydisplay.com/yellow-2-8-inch-arduino-raspberry-pi-oled-display-module-256x64-spi * Tested with DCS-BIOS v0.10.0 * https://github.com/dcs-bios/dcs-bios/releases * * A toggle switch (i.e. not a pushbutton) wired between pin D2 and GND allows the user to select between the F-16 and F-18 modes. * If a switch is not connected, the mode defaults to the F-16. * The selected mode activates after disconnecting and connecting to the Arduino in the DCS-BIOS Hub, or by resetting the Arduino. * There is probably a better way to change modes using an interrupt. * * The F-18 display also includes a fuel reading and a master arm indicator. * There is still some space to add other items in both modes. * * Known issues. The DEST page in the LIST menu comes up blank. This appears to be an issue with DCS-BIOS. * When entering data between the highlighted asterisks the field does not highlight. I haven't figured out an efficient way to do this yet. */ /* Tell DCS-BIOS to use a serial connection and use interrupt-driven communication. The main program will be interrupted to prioritize processing incoming data. This should work on any Arduino that has an ATMega328 controller (Uno, Pro Mini, many others). */ #define DCSBIOS_IRQ_SERIAL #include "DcsBios.h" /*************************************************** //Web: http://www.buydisplay.com EastRising Technology Co.,LTD Examples for ER-OLEDM28-1 Display is Hardward SPI 4-Wire SPI Interface Tested and worked with: Works with Arduino 1.6.0 IDE Test OK : Arduino DUE,Arduino mega2560,Arduino UNO Board ****************************************************/ /* Note:The module needs to be jumpered to an SPI interface. R19,R23 Short and R18,R20 Open Unused signal pin Recommended to connect to GND == Hardware connection == OLED => Arduino *1. GND -> GND *2. VCC -> 3.3 *4. SCL -> SCK (D13) *5. SDI -> MOSI (D11) *14. DC -> D9 *15. RES -> D8 *16. CS -> D10 */ #include "er_oled.h" volatile boolean f16 = true; // flag to display F-16 DED volatile boolean f18 = false; // flag to display F-18 UFC //boolean isList = false; //flag to indicate if we are on the LIST or MISC DED pages const int buttonPin = 2; //Toggle switch to change modes //variables to keep track of the timing of recent interrupts unsigned long button_time = 0; unsigned long last_button_time = 0; //F-16 DCS BIOS Functions void onDedLine1Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,0,newValue,0); } } DcsBios::StringBuffer<29> dedLine1Buffer(0x4500, onDedLine1Change); void onDedLine2Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,13,newValue,0); //Highlight numbers if we are on the LIST or MISC pages if(newValue[0]=='1' && (newValue[1]=='D' || newValue[1]=='C')){ //Highlight the menu numbers er_oled_string(0,13,"1",1); er_oled_string(6*8,13,"2",1); er_oled_string(12*8,13,"3",1); er_oled_string(18*8,13,"R",1); } } } DcsBios::StringBuffer<29> dedLine2Buffer(0x451e, onDedLine2Change); void onDedLine3Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,26,newValue,0); if(newValue[0]=='4' && (newValue[1]=='N' || newValue[1]=='I')){ er_oled_string(0,26,"4",1); er_oled_string(6*8,26,"5",1); er_oled_string(12*8,26,"6",1); er_oled_string(18*8,26,"E",1); } } } DcsBios::StringBuffer<29> dedLine3Buffer(0x453c, onDedLine3Change); void onDedLine4Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,39,newValue,0); if(newValue[0]=='7' && (newValue[1]=='C' || newValue[1]=='D')){ er_oled_string(0,39,"7",1); er_oled_string(6*8,39,"8",1); er_oled_string(12*8,39,"9",1); er_oled_string(18*8,39,"0",1); } } } DcsBios::StringBuffer<29> dedLine4Buffer(0x455a, onDedLine4Change); void onDedLine5Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,52,newValue,0); } } DcsBios::StringBuffer<29> dedLine5Buffer(0x4578, onDedLine5Change); // F-18 DCS BIOS Functions void onUfcComm1DisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(0*8,52,newValue,0); } } DcsBios::StringBuffer<2> ufcComm1DisplayBuffer(0x7424, onUfcComm1DisplayChange); void onUfcComm2DisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(5*8,52,newValue,0); } } DcsBios::StringBuffer<2> ufcComm2DisplayBuffer(0x7426, onUfcComm2DisplayChange); void onUfcOptionCueing1Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,0,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing1Buffer(0x7428, onUfcOptionCueing1Change); void onUfcOptionCueing2Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,13,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing2Buffer(0x742a, onUfcOptionCueing2Change); void onUfcOptionCueing3Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,26,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing3Buffer(0x742c, onUfcOptionCueing3Change); void onUfcOptionCueing4Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,39,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing4Buffer(0x742e, onUfcOptionCueing4Change); void onUfcOptionCueing5Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,52,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing5Buffer(0x7430, onUfcOptionCueing5Change); void onUfcOptionDisplay1Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,0,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay1Buffer(0x7432, onUfcOptionDisplay1Change); void onUfcOptionDisplay2Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,13,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay2Buffer(0x7436, onUfcOptionDisplay2Change); void onUfcOptionDisplay3Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,26,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay3Buffer(0x743a, onUfcOptionDisplay3Change); void onUfcOptionDisplay4Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,39,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay4Buffer(0x743e, onUfcOptionDisplay4Change); void onUfcOptionDisplay5Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,52,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay5Buffer(0x7442, onUfcOptionDisplay5Change); void onUfcScratchpadNumberDisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(3*8,0,newValue,0); } } DcsBios::StringBuffer<8> ufcScratchpadNumberDisplayBuffer(0x7446, onUfcScratchpadNumberDisplayChange); void onUfcScratchpadString1DisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(0*8,0,newValue,0); } } DcsBios::StringBuffer<2> ufcScratchpadString1DisplayBuffer(0x744e, onUfcScratchpadString1DisplayChange); void onUfcScratchpadString2DisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(2*8,0,newValue,0); } } DcsBios::StringBuffer<2> ufcScratchpadString2DisplayBuffer(0x7450, onUfcScratchpadString2DisplayChange); void onIfeiFuelUpChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(20*8,26,newValue,0); } } DcsBios::StringBuffer<6> ifeiFuelUpBuffer(0x748a, onIfeiFuelUpChange); void onMasterModeAaLtChange(unsigned int newValue) { /* your code here */ } DcsBios::IntegerBuffer masterModeAaLtBuffer(0x740c, 0x0200, 9, onMasterModeAaLtChange); void onMasterArmSwChange(unsigned int newValue) { /* your code here */ if(f18){ if(newValue){ er_oled_string(20*8,0," ARM ",1); }else{ er_oled_string(20*8,0," SAFE ",0); } } } DcsBios::IntegerBuffer masterArmSwBuffer(0x740c, 0x2000, 13, onMasterArmSwChange); void splashScreen(){ er_oled_clear(); er_oled_string(12*8,13,"DED V1.15",1); er_oled_string(4*8,26,"GITHUB.COM/JG-STOREY/DED",0); if(f16){ er_oled_string(11*8,52,"F-16 MODE",0); } else if(f18){ er_oled_string(11*8,52,"F/A-18 MODE",0); } } void button_ISR(){ button_time = millis(); //check to see if increment() was called in the last 250 milliseconds if (button_time - last_button_time > 250){ f16 = digitalRead(buttonPin); f18 = !f16; splashScreen(); er_oled_clear(); last_button_time = button_time; } } void setup() { //set D2 as a switch to select F-16 or F-18 displays. If unconnected it defaults to F-16. pinMode(buttonPin, INPUT_PULLUP); f16 = digitalRead(buttonPin); f18 = !f16; /* initialize the display */ er_oled_begin(); splashScreen(); delay(2000); er_oled_clear(); attachInterrupt(digitalPinToInterrupt(buttonPin), button_ISR, CHANGE); DcsBios::setup(); } void loop() { DcsBios::loop(); } null pins connected like in code please can some one help i dont know anything programming with arduino ?? or can some one write me a code that works ???
wiggles5289 Posted February 25, 2023 Author Posted February 25, 2023 5 hours ago, Mverick1971 said: Need help cant get the code to board got the Arduino Nano 33 BLE And the 3.12 OLED SPI ver 1.0 Seven pins got it connecten to Arduine COM port 4 for code but got error C:\Users\John_\Desktop\F-16_ICP__UFC__5237602\ded-main\ded-main\DED\DED.ino:62:10: fatal error: er_oled.h: No such file or directory #include "er_oled.h" ^~~~~~~~~~~ compilation terminated. Multiple libraries were found for "DcsBios.h" Used: C:\Users\John_\Documents\Arduino\libraries\dcs-bios-arduino-library-0.3.8 Not used: C:\Users\John_\Documents\Arduino\libraries\dcs-bios-arduino-library-0.2.11 exit status 1 Compilation error: er_oled.h: No such file or directory this is the total code ??? /* DED v1.15 Implemented interrupt method to switch mode. * DED v1.1 Added antenna symbols that replace the radio channels during radio operation in F-18 mode. * Changed LIST and MISC detection method as just checking the first row wasn't robust enough. * DED v1.0 Created by James Storey in May 2022, github.com/jg-storey/ded * Arduino code to display F-16 Data Entry Display and F-18 Upfront Controls information from DCS-BIOS * on a ER-OLEDM028-1 2.8" 256x64 OLED display from BuyDisplay.com * https://www.buydisplay.com/yellow-2-8-inch-arduino-raspberry-pi-oled-display-module-256x64-spi * Tested with DCS-BIOS v0.10.0 * https://github.com/dcs-bios/dcs-bios/releases * * A toggle switch (i.e. not a pushbutton) wired between pin D2 and GND allows the user to select between the F-16 and F-18 modes. * If a switch is not connected, the mode defaults to the F-16. * The selected mode activates after disconnecting and connecting to the Arduino in the DCS-BIOS Hub, or by resetting the Arduino. * There is probably a better way to change modes using an interrupt. * * The F-18 display also includes a fuel reading and a master arm indicator. * There is still some space to add other items in both modes. * * Known issues. The DEST page in the LIST menu comes up blank. This appears to be an issue with DCS-BIOS. * When entering data between the highlighted asterisks the field does not highlight. I haven't figured out an efficient way to do this yet. */ /* Tell DCS-BIOS to use a serial connection and use interrupt-driven communication. The main program will be interrupted to prioritize processing incoming data. This should work on any Arduino that has an ATMega328 controller (Uno, Pro Mini, many others). */ #define DCSBIOS_IRQ_SERIAL #include "DcsBios.h" /*************************************************** //Web: http://www.buydisplay.com EastRising Technology Co.,LTD Examples for ER-OLEDM28-1 Display is Hardward SPI 4-Wire SPI Interface Tested and worked with: Works with Arduino 1.6.0 IDE Test OK : Arduino DUE,Arduino mega2560,Arduino UNO Board ****************************************************/ /* Note:The module needs to be jumpered to an SPI interface. R19,R23 Short and R18,R20 Open Unused signal pin Recommended to connect to GND == Hardware connection == OLED => Arduino *1. GND -> GND *2. VCC -> 3.3 *4. SCL -> SCK (D13) *5. SDI -> MOSI (D11) *14. DC -> D9 *15. RES -> D8 *16. CS -> D10 */ #include "er_oled.h" volatile boolean f16 = true; // flag to display F-16 DED volatile boolean f18 = false; // flag to display F-18 UFC //boolean isList = false; //flag to indicate if we are on the LIST or MISC DED pages const int buttonPin = 2; //Toggle switch to change modes //variables to keep track of the timing of recent interrupts unsigned long button_time = 0; unsigned long last_button_time = 0; //F-16 DCS BIOS Functions void onDedLine1Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,0,newValue,0); } } DcsBios::StringBuffer<29> dedLine1Buffer(0x4500, onDedLine1Change); void onDedLine2Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,13,newValue,0); //Highlight numbers if we are on the LIST or MISC pages if(newValue[0]=='1' && (newValue[1]=='D' || newValue[1]=='C')){ //Highlight the menu numbers er_oled_string(0,13,"1",1); er_oled_string(6*8,13,"2",1); er_oled_string(12*8,13,"3",1); er_oled_string(18*8,13,"R",1); } } } DcsBios::StringBuffer<29> dedLine2Buffer(0x451e, onDedLine2Change); void onDedLine3Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,26,newValue,0); if(newValue[0]=='4' && (newValue[1]=='N' || newValue[1]=='I')){ er_oled_string(0,26,"4",1); er_oled_string(6*8,26,"5",1); er_oled_string(12*8,26,"6",1); er_oled_string(18*8,26,"E",1); } } } DcsBios::StringBuffer<29> dedLine3Buffer(0x453c, onDedLine3Change); void onDedLine4Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,39,newValue,0); if(newValue[0]=='7' && (newValue[1]=='C' || newValue[1]=='D')){ er_oled_string(0,39,"7",1); er_oled_string(6*8,39,"8",1); er_oled_string(12*8,39,"9",1); er_oled_string(18*8,39,"0",1); } } } DcsBios::StringBuffer<29> dedLine4Buffer(0x455a, onDedLine4Change); void onDedLine5Change(char* newValue) { /* your code here */ if(f16){ er_oled_dedstring(0,52,newValue,0); } } DcsBios::StringBuffer<29> dedLine5Buffer(0x4578, onDedLine5Change); // F-18 DCS BIOS Functions void onUfcComm1DisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(0*8,52,newValue,0); } } DcsBios::StringBuffer<2> ufcComm1DisplayBuffer(0x7424, onUfcComm1DisplayChange); void onUfcComm2DisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(5*8,52,newValue,0); } } DcsBios::StringBuffer<2> ufcComm2DisplayBuffer(0x7426, onUfcComm2DisplayChange); void onUfcOptionCueing1Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,0,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing1Buffer(0x7428, onUfcOptionCueing1Change); void onUfcOptionCueing2Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,13,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing2Buffer(0x742a, onUfcOptionCueing2Change); void onUfcOptionCueing3Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,26,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing3Buffer(0x742c, onUfcOptionCueing3Change); void onUfcOptionCueing4Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,39,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing4Buffer(0x742e, onUfcOptionCueing4Change); void onUfcOptionCueing5Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(12*8,52,newValue,0); } } DcsBios::StringBuffer<1> ufcOptionCueing5Buffer(0x7430, onUfcOptionCueing5Change); void onUfcOptionDisplay1Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,0,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay1Buffer(0x7432, onUfcOptionDisplay1Change); void onUfcOptionDisplay2Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,13,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay2Buffer(0x7436, onUfcOptionDisplay2Change); void onUfcOptionDisplay3Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,26,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay3Buffer(0x743a, onUfcOptionDisplay3Change); void onUfcOptionDisplay4Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,39,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay4Buffer(0x743e, onUfcOptionDisplay4Change); void onUfcOptionDisplay5Change(char* newValue) { /* your code here */ if(f18){ er_oled_string(13*8,52,newValue,0); } } DcsBios::StringBuffer<4> ufcOptionDisplay5Buffer(0x7442, onUfcOptionDisplay5Change); void onUfcScratchpadNumberDisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(3*8,0,newValue,0); } } DcsBios::StringBuffer<8> ufcScratchpadNumberDisplayBuffer(0x7446, onUfcScratchpadNumberDisplayChange); void onUfcScratchpadString1DisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(0*8,0,newValue,0); } } DcsBios::StringBuffer<2> ufcScratchpadString1DisplayBuffer(0x744e, onUfcScratchpadString1DisplayChange); void onUfcScratchpadString2DisplayChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(2*8,0,newValue,0); } } DcsBios::StringBuffer<2> ufcScratchpadString2DisplayBuffer(0x7450, onUfcScratchpadString2DisplayChange); void onIfeiFuelUpChange(char* newValue) { /* your code here */ if(f18){ er_oled_string(20*8,26,newValue,0); } } DcsBios::StringBuffer<6> ifeiFuelUpBuffer(0x748a, onIfeiFuelUpChange); void onMasterModeAaLtChange(unsigned int newValue) { /* your code here */ } DcsBios::IntegerBuffer masterModeAaLtBuffer(0x740c, 0x0200, 9, onMasterModeAaLtChange); void onMasterArmSwChange(unsigned int newValue) { /* your code here */ if(f18){ if(newValue){ er_oled_string(20*8,0," ARM ",1); }else{ er_oled_string(20*8,0," SAFE ",0); } } } DcsBios::IntegerBuffer masterArmSwBuffer(0x740c, 0x2000, 13, onMasterArmSwChange); void splashScreen(){ er_oled_clear(); er_oled_string(12*8,13,"DED V1.15",1); er_oled_string(4*8,26,"GITHUB.COM/JG-STOREY/DED",0); if(f16){ er_oled_string(11*8,52,"F-16 MODE",0); } else if(f18){ er_oled_string(11*8,52,"F/A-18 MODE",0); } } void button_ISR(){ button_time = millis(); //check to see if increment() was called in the last 250 milliseconds if (button_time - last_button_time > 250){ f16 = digitalRead(buttonPin); f18 = !f16; splashScreen(); er_oled_clear(); last_button_time = button_time; } } void setup() { //set D2 as a switch to select F-16 or F-18 displays. If unconnected it defaults to F-16. pinMode(buttonPin, INPUT_PULLUP); f16 = digitalRead(buttonPin); f18 = !f16; /* initialize the display */ er_oled_begin(); splashScreen(); delay(2000); er_oled_clear(); attachInterrupt(digitalPinToInterrupt(buttonPin), button_ISR, CHANGE); DcsBios::setup(); } void loop() { DcsBios::loop(); } null pins connected like in code please can some one help i dont know anything programming with arduino ?? or can some one write me a code that works ??? Thats a different DED code from my own. But from what I have seen, looks like you are missing the EROLED library. That should be included into the sketch folder from the example he provided.
Mverick1971 Posted February 26, 2023 Posted February 26, 2023 so i have to find the EROLED library add it and then its supposed to be fixed ???
Vinc_Vega Posted February 26, 2023 Posted February 26, 2023 Do not use the "er_oled.h" library from East Rising, as it can only be used with their own examples. Try to start with adafruits gfx library or use the u8g2 library for your display. Regards, Vinc Regards, Vinc real life: Royal Bavarian Airforce online: VJS-GermanKnights.de [sIGPIC][/sIGPIC]
JackFlash Posted February 27, 2023 Posted February 27, 2023 I am really struggling with this. I use this display with an Arduino Uno: https://www.alibaba.com/product-detail/RTS-5-5-25664-256-64_62263543892.html?spm=a2700.galleryofferlist.normal_offer.d_title.6078564eiq0g8T I have tried the code from the first post. All libs included. Pinout like this OLED ARDUINO 1 GND 2 3.3 V 4 D13 5 D11 14 D9 15 D8 16 D10 No life what so ever in the screen. I did plug it into 5V at first. Might that have damaged the screen? My latest project, the Multi Function Button Box can be found at Kickstarter.
Krysnic Posted February 27, 2023 Posted February 27, 2023 25 minutes ago, JackFlash said: I am really struggling with this. I use this display with an Arduino Uno: https://www.alibaba.com/product-detail/RTS-5-5-25664-256-64_62263543892.html?spm=a2700.galleryofferlist.normal_offer.d_title.6078564eiq0g8T I have tried the code from the first post. All libs included. Pinout like this OLED ARDUINO 1 GND 2 3.3 V 4 D13 5 D11 14 D9 15 D8 16 D10 No life what so ever in the screen. I did plug it into 5V at first. Might that have damaged the screen? I don't know what connection it is 3 or 4 spi. You must solder the jumpers depending on the connection. CPU i7-4790k/ zotac GTX1080/ ОЗУ 16Gb/ Philips 40" 3840x2160/ джойстик BRD-N(v. №4) + педали BRD-F2 restyling + WW2-DVik Throttle(MMJoy2)/ TrackIR5 pro/ https://cults3d.com/ru/polzovateli/abelnaitrod/tvoreniya
Vinc_Vega Posted February 28, 2023 Posted February 28, 2023 (edited) OLEDs don't have backlight. If it were a LCD you may have a chance to see anything by connecting the backlight LED pins to power. Regards, Vinc Edited February 28, 2023 by Vinc_Vega Regards, Vinc real life: Royal Bavarian Airforce online: VJS-GermanKnights.de [sIGPIC][/sIGPIC]
JackFlash Posted February 28, 2023 Posted February 28, 2023 Thanks everyone. It was the soldering I was missing just like @Krysnicsaid. Works like a charm! My latest project, the Multi Function Button Box can be found at Kickstarter.
Ghost117 Posted March 5, 2023 Posted March 5, 2023 Hello, (Electronics and coding noob here) I'm also using an ER-OLEDM032-1 connected to an Arduino Mega and using the code above. It works great but besides some formatting preferences as I want the text to cover the whole width of the screen, the refresh time when changing DED pages seems slow( like one second to load a page). Could some code tweaking bump up the refresh rate or is it a limitation of the Arduino's processing power? Thanks in advance!
wiggles5289 Posted March 16, 2023 Author Posted March 16, 2023 On 3/5/2023 at 3:38 PM, Ghost117 said: Hello, (Electronics and coding noob here) I'm also using an ER-OLEDM032-1 connected to an Arduino Mega and using the code above. It works great but besides some formatting preferences as I want the text to cover the whole width of the screen, the refresh time when changing DED pages seems slow( like one second to load a page). Could some code tweaking bump up the refresh rate or is it a limitation of the Arduino's processing power? Thanks in advance! Its a problem with how fast the code updates with the stream from the computer. Its a limitation of the Arduino coupled with a code issue. I will eventually have an update to add a refresh rate option and inverse the characters once I can grasp a method to flip the inverted text with my library. 1
JohnnyChicago Posted April 14, 2023 Posted April 14, 2023 Hi. Iwant to switch from an Arduino Nano to a ESP32 for my DED. But i am stuck connecting my SSD1322 to my ESP32. Can someone help me to connect this Oled (4SPI) please ? ESP-32 NodeMCU Developmentboard Pinout Diagram amazon.pdf
Vinc_Vega Posted April 15, 2023 Posted April 15, 2023 (edited) Hi JohnnyChicaco I don't have the display but would start by connecting it to the ESP32's hardware SPI bus. You may read out the SPI in use at the serial monitor by the loading the below code (taken from ->here<-) Spoiler /* Rui Santos Complete project details at https://RandomNerdTutorials.com/esp32-spi-communication-arduino/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. */ //Find the default SPI pins for your board //Make sure you have the right board selected in Tools > Boards void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial.print("MOSI: "); Serial.println(MOSI); Serial.print("MISO: "); Serial.println(MISO); Serial.print("SCK: "); Serial.println(SCK); Serial.print("SS: "); Serial.println(SS); } void loop() { // put your main code here, to run repeatedly: } For me the sketch returns as follows for an 30 and 38 pin ESP32 devboard MOSI: 23 MISO: 19 SCK: 18 SS: 5 No further data for your display available, I therefore used a pic found on ebay to decifer the pins D0 and D1. If that doesn't work you may flip the connections. D0 (CLK / SCLK / SCK) D1 (DIN / MOSI) CS (SS) The pins for RES (RST) and D/C (DC) have to be defined by yourself. Connect GND and VCC as usual. Regards, Vinc Edited April 15, 2023 by Vinc_Vega 1 Regards, Vinc real life: Royal Bavarian Airforce online: VJS-GermanKnights.de [sIGPIC][/sIGPIC]
JohnnyChicago Posted April 15, 2023 Posted April 15, 2023 yes ... success !! Oled is working with all Demo sketches. But The F-16 DED sketch is not working : Error : In file included from c:\Users\claud\OneDrive\Documents\Arduino\libraries\DCS-BIOS_FP-Fork\src/internal/Servos.h:6, from c:\Users\claud\OneDrive\Documents\Arduino\libraries\DCS-BIOS_FP-Fork\src/DcsBios.h:126, from C:\Users\claud\OneDrive\Documents\Arduino\F16_DED_ESP32_OLED1322\F16_DED_ESP32_OLED1322.ino:8: C:\Users\claud\AppData\Local\Arduino15\libraries\Servo\src/Servo.h:77:2: error: #error "This library only supports boards with an AVR, SAM, SAMD, NRF52 or STM32F4 processor." #error "This library only supports boards with an AVR, SAM, SAMD, NRF52 or STM32F4 processor." ^~~~~ exit status 1 Compilation error: exit status 1
Vinc_Vega Posted April 16, 2023 Posted April 16, 2023 Hi Johnny, "Servos.h" compiling error! As I wrote in the sketchbook repository, you have to include the AnalogWrite library for the ESP32 if you want to use it with DcsBios. https://www.arduino.cc/reference/en/libraries/esp32-analogwrite/ #define DCSBIOS_DEFAULT_SERIAL #include "analogWrite.h" //to be used with the ESP32 chip https://www.arduino.cc/reference/en/libraries/esp32-analogwrite/ #include "DcsBios.h" Regards, Vinc 1 Regards, Vinc real life: Royal Bavarian Airforce online: VJS-GermanKnights.de [sIGPIC][/sIGPIC]
JohnnyChicago Posted April 16, 2023 Posted April 16, 2023 (edited) Library installed, still get the same error #define DCSBIOS_DEFAULT_SERIAL #include "analogWrite.h" #include "DcsBios.h" //#include <Arduino.h> #include <U8g2lib.h> #include <U8glib.h> #include <SPI.h> Edited April 16, 2023 by JohnnyChicago
Vinc_Vega Posted April 17, 2023 Posted April 17, 2023 (edited) Solved, Under ->Preferences, Espressif Systems's esp32 Version 1.0.6 in the ->Additional Board Manager has to be used by introducing the following URL: https://dl.espressif.com/dl/package_esp32_index.json Regards, Vinc Edited April 17, 2023 by Vinc_Vega 1 Regards, Vinc real life: Royal Bavarian Airforce online: VJS-GermanKnights.de [sIGPIC][/sIGPIC]
JohnnyChicago Posted April 17, 2023 Posted April 17, 2023 Yes ... thanks again Vinc!!! However the DED Sketch does not work because of the U8G Library is not compatible under ESP32 Boards.
Vinc_Vega Posted July 18, 2023 Posted July 18, 2023 (edited) Update: A while ago JohnnyChicago and me developed code, working with the ESP32 board and the U8g2lib library, running at an 256x64 pixels SH1122 display. We implemented a newly created font, compatible with the U8g2lib library and included inverted characters. So items automatically are highlighted for different menus. However, the developer mostly did not apply the inversion logic to the asterisk (*) so we decided to use only the inverted character inside the fonts file. Most of the code is commented so you may alter it if necessary. Spoiler //F-16 DED for DCS BIOS using 256x64 ER-OLED032-1G from BuyDisplay.com //Final code by JohnnyChicago,a whole lotta font cred to Fusion's wife, and Wiggles5289 on the DCS Forums // adapted by Vinc_Vega to work exclusively with the u8g2 library, new font with inverted chars added, // inverted chars are original ASCII code byte + 100, interprete steering bits (bytes 26 - 29 of each DED line) and plot inverted chars, // unfortunately at the time not all inverted chars are covered by the steering bits (mostly the inverted asterics (*) is missing and therefore is displayed always inveted) #define DCSBIOS_DEFAULT_SERIAL #include "analogWrite.h" //to use the ESP32 chip with DcsBios https://www.arduino.cc/reference/en/libraries/esp32-analogwrite/ #include "DcsBios.h" #include <SPI.h> #include <U8g2lib.h> U8G2_SH1122_256X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 5, /* dc=*/ 21, /* reset=*/ 22); // Enable U8G2_16BIT in u8g2.h // ---------------------------------------------------------------------------------------- // Declaration of the variables // ---------------------------------------------------------------------------------------- String(line1); String(line2); String(line3); String(line4); String(line5); // create a string object for each line to manipulate the content const byte x = 28; // cursor x is always 28 (first char of a line to print) for a 256x64 display const byte y = 13; // cursor y is according to the line number: y = (line number * y) -1) -> first line print at y = 12 // ---------------------------------------------------------------------------------------- // costume F-16 DED font including inversed chars for the u8g2 library // ---------------------------------------------------------------------------------------- /* Fontname: DEDFontNewInv_01 Copyright: Vinc_Vega Glyphs: 142/195 BBX Build Mode: 0 */ const uint8_t u8g2_font_DEDFontNewInv[1755] U8G2_FONT_SECTION("u8g2_font_DEDFontNewInv") = "\216\0\3\4\4\4\3\5\5\10\14\0\377\11\376\11\0\1h\2\315\6\276 \5\0\334\30!\7\222\207" "\30L\4\42\14E\255\30\42$\42AB!\0#\17\226\205\70A\261\230\4\305\213IP,\0$\5" "\0\334\30%\17\226\205\30c!A$br!\12\11\33&\20\226\205XC%\242b##E!&" "#\1'\10B\256\30$\42\0(\12\224\206X\42Er\33\22)\14\224\206\30BcB\62\225\10\1" "*\20\270|\30\17$%Q\310\252\221D)y(+\13f\215X\202BL\202B\0,\10B\207\30" "$\42\0-\6&\235\30\14.\6\42\207\30\4/\12v\215\270\201br\14\5\60\15\226\205Xb$" "Bt\22!\23\2\61\12\224\206XA\42CrA\62\14\226\205\70$H\202\42*\202\14\63\15\226\205" "\30\214bb\243D($\0\64\14\226\205\30\42\362\13\233\240\24\0\65\14\226\205\30\216%\206D($" "\0\66\15\226\205\70$\210%HD($\0\67\13\226\205\30\214br\224\10\0\70\16\226\205\70$H" "($BD($\0\71\16\226\205\70$HD(\205\42%$\0:\7b\227\30\204\4;\11\202\207" "\30\204$\42\0<\11\226\205\230br\225\3=\10f\215\30\354\240\14>\12\226\205\30\242r\223#\0" "\77\17\226\205\70$HbCc\342`\202B\0@\20\226\205\70$g\202%#!#!($\0A" "\15\226\205Xb$HD\17AD\2B\15\226\205\30%H'%BD-\0C\14\226\205\70$H" "\204\62\241\220\0D\13\226\205\30E%\362_T\0E\13\226\205\30\216DD\202\202\14F\13\226\205\30" "\216DD\202\62\2G\14\226\205\70$H\204\42\225P\12H\13\226\205\30B\224\36\202h\22I\11\226" "\205\30L\202rbJ\13\226\205\30L\202r\42\32\3K\17\226\205\30B$(DcD%\42E\2" "L\11\226\205\30\202\362\221\1M\13\226\205\30\201C\17At\22N\15\226\205\30aD%%$\225\250" "\5O\13\226\205\70$HtB!\1P\14\226\205\30%HD-\202\22\1Q\13\226\205\70$H\264" " \221\12R\15\226\205\30%HD'%\62\21\11S\15\226\205\70$\210E\205\202($\0T\12\226" "\205\30L\202\362\11\0U\13\226\205\30B\364\11\205\4\0V\16\226\205\30Bt\22\11\12\242&\4\0" "W\13\226\205\30Btz\10\32\14X\21\226\205\30BD\42AAdbDQ\204\210\4Y\16\226\205" "\30BD\42AAd\202r\2Z\11\226\205\30\214brd[\10\224\206\30JrB\134\7\222\207\30" "\17\3]\10\224\206\30HrR^\14U\246XaC!!\42c\1_\6\26\205\30\6`\10B\257" "\30$\42\0a\15\226\205Xb$\346\20M\310\204\0o\7\63\265\30$\4{\14\226\205X\202\362d" "B&\4\0|\7\222\207\30\17\3}\14\226\205Xb$F\202\362\4\0~\13F\225\70b$\42d" "\42\0\204\10\270|\30\377\320\0\205\13\270|\30K\366\344d\264\0\206\20\270|\30IACA$\42" "#\42\17\37\14\207\26\270|\30*\42$\42\303#\42$\42$\42\303#\42$\42\12\210\5\0\334\30" "\211\22\270|\30i%!\322\202\352\24&\42\22R\226\0\212\23\270|\30k\244CGe!BaB" "\42\303c!\11\213\14\270|\30JF'&\17\37\20\214\14\270|\30LeDv:\63R\215\14\270" "|\30JfGv\42+b\216\20\270|\30\17$%Q\310\252\221D)y(\217\16\270|\30\17L" "F\304\302DF\17\4\220\13\270|\30\77\30\31\235\230\60\221\13\270|\30\37\226\205\37\36\6\222\11\270" "|\30\177\70\62Z\223\14\270|\30\17'Fu\62y\70\224\15\270|\30K\205C\362O\203E\13\225" "\15\270|\30,FeF\66\25\22*\226\20\270|\30\212\303BBF\243\242C\306\302\11\227\15\270|" "\30\311\302F\325\216d\36T\230\22\270|\30IACACACA\303\302E\226\24\231\15\270|\30" "\311\222L\207\215d\36T\232\16\270|\30\212\303B\246\303Br\36T\233\14\270|\30\311\302Fu\262" "\324\0\234\17\270|\30\212\303B\222\7\207\344<\250\0\235\16\270|\30\212\303Br\36\65\32\35T\236" "\15\270|\30\17DF\17GF\17\14\237\16\270|\30\17DF\17GF'&\14\240\12\270|\30M" "u\272S\2\241\15\270|\30\17\312\302\17\303\302\17\2\242\12\270|\30Iw\252S\3\243\17\270|\30" "\212\303BBedENF\13\244\23\270|\30\212\303\42CFbA\42\221D\42\11\17*\245\16\270" "|\30K\205\303Br\226$S\2\246\16\270|\30\251\303BR'\311YT\1\247\16\270|\30\212\303" "B\222l\222<\250\0\250\24\270|\30\251\244CACACACACA\243\242\12\251\14\270|\30" "\311\222\14)Y\26N\252\14\270|\30\311\222\14)\331\324\0\253\21\270|\30\212\303B\222\214\302\204\302" "\204$\217&\254\14\270|\30I\362Y\222\374\224\0\255\14\270|\30\311\302Dv\42\26N\256\14\270|" "\30\311\302Dv\42$c\257\22\270|\30I\222\302D\7\311\12I\207\302\204\204\22\260\12\270|\30I" "\366\263p\2\261\15\270|\30)$B\222%\311\77%\262\24\270|\30)C\262\5\211\5\11\205\11\205" "\11\311i$\1\263\14\270|\30\212\303B\362\237\7\25\264\16\270|\30\251\303Br\26\35\262\324\0\265" "\17\270|\30\212\303B\362)L\224\360(\1\266\17\270|\30\251\303Br\235\24\64$S\2\267\17\270" "|\30\212\303B\246\244FF\302\203\12\270\13\270|\30\311\302D\366i\1\271\13\270|\30I\362\377y" "P\1\272\16\270|\30I\362O#\42\204\204E\13\273\14\270|\30I\362\237%I!I\274\22\270|" "\30I\62\215\210\20\26\25\222\210\14\311\224\0\275\16\270|\30I\62\215\210\20\26\331i\1\276\14\270|" "\30\311\302Fu\62\26N\277\13\270|\30\212\224\354\221P\1\300\11\270|\30K\366\247\5\301\14\270|" "\30\212\204Fv\42$T\302\20\270|\30,f%!DA##\17\17\13\303\10\270|\30\177hN" "\304\14\270|\30KF'&\17\37\16\305\15\270|\30K\205\303\17\313\203E\13\323\13\270|\30i%" "!e\17\77\337\14\270|\30K\366D<X\264\0\340\11\270|\30K\366\247\5\341\14\270|\30K\205" "\303D\366\264\0\342\16\270|\30\37\210\12CD\2\213\36\26\0\0\0\4\377\377\0"; // ---------------------------------------------------------------------------------------- // DCS.BIOS stuff here // ---------------------------------------------------------------------------------------- void onDedLine1Change(char* newValue) { line1 = newValue; } DcsBios::StringBuffer<29> dedLine1Buffer(0x450a, onDedLine1Change); void onDedLine2Change(char* newValue) { line2 = newValue; } DcsBios::StringBuffer<29> dedLine2Buffer(0x4528, onDedLine2Change); void onDedLine3Change(char* newValue) { line3 = newValue; } DcsBios::StringBuffer<29> dedLine3Buffer(0x4546, onDedLine3Change); void onDedLine4Change(char* newValue) { line4 = newValue; } DcsBios::StringBuffer<29> dedLine4Buffer(0x4564, onDedLine4Change); void onDedLine5Change(char* newValue) { line5 = newValue; } DcsBios::StringBuffer<29> dedLine5Buffer(0x4582, onDedLine5Change); // ---------------------------------------------------------------------------------------- // SETUP Section // ---------------------------------------------------------------------------------------- void setup() { DcsBios::setup(); delay(100); // time to setup the display u8g2.begin(); u8g2.clear(); u8g2.setFont(u8g2_font_DEDFontNewInv); } // ---------------------------------------------------------------------------------------- // LOOP Section - Try to keep empty !!! // ---------------------------------------------------------------------------------------- void loop() { DcsBios::loop(); // not all lines are refreshed at the same time, so it sometimes results in missing lines while DED manipulation // therefore, the page buffer method is used to print all lines at once u8g2.firstPage(); do { u8g2.setCursor(x, y-1); u8g2.print(invertChars(line1)); u8g2.setCursor(x, (2 * y) -1); u8g2.print(invertChars(line2)); u8g2.setCursor(x, (3 * y) -1); u8g2.print(invertChars(line3)); u8g2.setCursor(x, (4 * y) -1); u8g2.print(invertChars(line4)); u8g2.setCursor(x, (5 * y) -1); u8g2.print(invertChars(line5)); } while (u8g2.nextPage()); u8g2.updateDisplay(); } // ---------------------------------------------------------------------------------------- // Supporting functions // ---------------------------------------------------------------------------------------- String invertChars(String lineX) { // create a function, applied on each DED line and returning the manipulated string if (lineX.length() > 25) { // look for steering bits only if a line has more than 25 chars for (int j = 0; j < 4; j++) { // go through each of the 4 bytes for (int i = 0; i < 8; i++) { // go through each of the 8 bits per byte if (bitRead(lineX[25 + j], i) == 1) { // start at char number 26 [string index is 25 !!!]; if steering bit equals 1 we found a to be inverted char int inverted = byte(lineX.charAt(j * 8 + i)); // read the byte value of the char from the string object into a local variable lineX.setCharAt(j * 8 + i, inverted + 100); // replace the char by it's inverted version (byte of the char + 100 in the manipulated font) } } } lineX.remove(25, 4); // remove the steering bytes from the string (chars 26 to 29) ... } // ... line is cut to 25 chars, so it passes the next loop without further manipulation (see: if lineX.length > 25) return lineX; // function returns the manipulated line } Regards, Vinc Edited July 22, 2023 by Vinc_Vega 2 2 Regards, Vinc real life: Royal Bavarian Airforce online: VJS-GermanKnights.de [sIGPIC][/sIGPIC]
The LT Posted October 12, 2023 Posted October 12, 2023 Hey guys, I've managed to get the DED going by using a Bluepill STM32 board with a 256x64 SSD1322 display. I am using the following definition. #ifdef DCSBIOS_FOR_STM32 U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ PA2, /* dc=*/ PA1, /* reset=*/ PA0); // Enable U8G2_16BIT in u8g2.h #endif #ifndef DCSBIOS_FOR_STM32 U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ PA2, /* dc=*/ PA1, /* reset=*/ PA0); // Enable U8G2_16BIT in u8g2.h #endif Everything works fine but the screen refresh rate is somewhat lacking. Can I increase the display refresh rate somehow? My controls & seat Main controls: , BRD-N v4 Flightstick (Kreml C5 controller), TM Warthog Throttle (Kreml F3 controller), BRD-F2 Restyling Bf-109 Pedals w. damper, TrackIR5, Gametrix KW-908 (integrated into RAV4 seat) Stick grips: Thrustmaster Warthog Thrustmaster Cougar (x2) Thrustmaster F-16 FLCS BRD KG13 Standby controls: BRD-M2 Mi-8 Pedals (Ruddermaster controller) BRD-N v3 Flightstick w. exch. grip upgrade (Kreml C5 controller) Thrustmaster Cougar Throttle Pilot seat
Recommended Posts