olive47 Posted March 16, 2021 Share Posted March 16, 2021 help. mega 2560 card. TM1637 4 DIGITS. My code does not work #define DCSBIOS_IRQ_SERIAL #include "DcsBios.h" #include <TM1637TinyDisplay.h> #include <LedControl.h> char Digit0 = ""; // Déclarer une nouvelle variable de caractère globale char Digit1 = ""; char Digit2 = ""; char Digit3 = ""; int TACAN_power = 0; //FIRST - 4 DIGIT 7 SEGMENT DISPLAY- tacan // Module connection pins (Digital Pins) #define CLK 2 #define DIO 3 TM1637TinyDisplay display(CLK, DIO); //set up the 4-Digit Display DcsBios::Switch2Pos tacanTestBtn("TACAN_TEST_BTN", 23); DcsBios::LED tacanTest(0x10da, 0x0400, 13); DcsBios::PotentiometerEWMA<5, 128, 5> tacanVol("TACAN_VOL", A0); const byte tacanModePins[5] = {4, 5, 6, 7, 8}; DcsBios::SwitchMultiPos tacanMode("TACAN_MODE", tacanModePins, 5); DcsBios::Switch2Pos tacanXy("TACAN_XY", 22); DcsBios::RotaryEncoder tacan10("TACAN_10", "DEC", "INC", 9, 10); DcsBios::RotaryEncoder tacan1("TACAN_1", "DEC", "INC", 11, 12); void setup() { display.setBrightness(7); DcsBios::setup(); } void onTacan10Change(unsigned int newValue) { display.showNumberDec(newValue); } DcsBios::IntegerBuffer tacan10Buffer(0x1158, 0x0f00, 12, onTacan10Change); void onTacan1Change(unsigned int newValue) { display.showNumberDec(newValue); } DcsBios::IntegerBuffer tacan1Buffer(0x1158, 0xf000, 9, onTacan1Change); void onTacanChannelChange (char * newValue){ display.showNumberDec(newValue); } DcsBios :: StringBuffer <4> tacanChannelBuffer (0x1162, onTacanChannelChange); void loop() { DcsBios::loop(); Link to comment Share on other sites More sharing options...
gardnerjr Posted March 18, 2021 Share Posted March 18, 2021 help us help you. what is it doing? what is it not doing? things i see, without having this device or anything to actually try this. you're calling the same `showNumberDec` in 3 places, once when the 1 changes, once when the 10's place changes, and to the *pointer* value of the letter change? and all 3 of them are setting the full contents of the display? from a quick scan of GitHub - jasonacox/TM1637TinyDisplay: Arduino library to display numbers and text on a 4-digit 7-segment TM1637 display module. i'm presuming you want something like this in the 10 change, to only set the first segment of the display // showNumber( value, leadingZero, width, segment) display.showNumber(newValue, false, 1, 0); // set 10's place to 0th (first) digit this in the 1 change, to only set the second segment display.showNumber(newValue, false, 1, 1); // set 1's place to second digit then this in the channel change to only set the 3rd segment (nothing sets the 4th segment) display.showString(newValue, 1, 2); // show the string part in just the 3rd digit Link to comment Share on other sites More sharing options...
olive47 Posted March 18, 2021 Author Share Posted March 18, 2021 Link to comment Share on other sites More sharing options...
olive47 Posted March 18, 2021 Author Share Posted March 18, 2021 you are a champion in advance thanks to you. the 2 and 3 digits work. except that on the 2nd digit when I pass the 0 the first must display 1. and it remains at 0 a new code void setup() { display.setBrightness(7); DcsBios::setup(); } void onTacan10Change(unsigned int newValue) { display.showNumber(newValue,false,1,1);// set 1's place to second 2digit } DcsBios::IntegerBuffer tacan10Buffer(0x1158, 0x0f00, 8, onTacan10Change); void onTacan1Change(unsigned int newValue) { display.showNumber(newValue,false,1,2);// set 10's place to 0th (first) digit } DcsBios::IntegerBuffer tacan1Buffer(0x1158, 0xff00, 12, onTacan1Change); void onTacanXyChange(unsigned int newValue) { display.showString (newValue, 1, 3); // affiche la partie chaîne en seulement le 4ème chiffre } DcsBios::IntegerBuffer tacanXyBuffer(0x1168, 0x000f, 0, onTacanXyChange); // TACAN Channel void onTacanChannelChange(char* newValue) { TACAN = newValue; // Store incoming char string to a new string variable name Digit0 = TACAN.charAt(0); // grab individual char value at that specific index in the string Digit1 = TACAN.charAt(1); Digit2 = TACAN.charAt(2); Digit3 = TACAN.charAt(3); if (TACAN_power == 0) { } DcsBios::StringBuffer<4> tacanChannelBuffer(0x1162, onTacanChannelChange); } void loop() { DcsBios::loop(); } Link to comment Share on other sites More sharing options...
olive47 Posted March 19, 2021 Author Share Posted March 19, 2021 Mon problèm B335E7BB-90CC-42B1-8508-60A70794B603.MOV Link to comment Share on other sites More sharing options...
Deadman Posted March 21, 2021 Share Posted March 21, 2021 Hansolo fixed all problems with the TACAN panel Check his thread https://www.shapeways.com/shops/a-10c-warthog-supplies https://forum.dcs.world/topic/133818-deadmans-cockpit-base-plans/#comment-133824 CNCs and Laser engravers are great but they can't do squat with out a precise set of plans. Link to comment Share on other sites More sharing options...
olive47 Posted May 3, 2021 Author Share Posted May 3, 2021 RESOLUT /* Tell DCS-BIOS to use a serial connection and use interrupt-driven communication. The main program will be interrupted to prioritize processing incoming data. TACAN with 7 seg Display and TM1637 This sketch sets the Pro Mini as a Slave to the RS-485 Bus for the right console. NOTE: #defines are to be placed before the #includes */ #define DCSBIOS_IRQ_SERIAL #include "DcsBios.h" #include <TM1637TinyDisplay.h> #include <LedControl.h> String TACAN = ""; // Declare global new string variable char Digit0 = ""; // Declare global new character variable char Digit1 = "";// Declare global new character variable char Digit2 = "";// Declare global new character variable char Digit3 = "";// Declare global new character variable int TACAN_power = 0; int Tacan_ingame1; // hold value from DCS for ones int Tacan_ingame10; // hold value from DCS for tens int Tacan_ingame100; // hold value from DCS for hundreds //FIRST - 4 DIGIT 7 SEGMENT DISPLAY- tacan // Module connection pins (Digital Pins) #define CLK 2 #define DIO 3 TM1637TinyDisplay display (CLK, DIO); //set up the 4-Digit Display DcsBios::Switch2Pos tacanTestBtn("TACAN_TEST_BTN", 23); DcsBios::LED tacanTest(0x10da, 0x0400, 13); DcsBios::PotentiometerEWMA<5, 128, 5> tacanVol("TACAN_VOL", A0); const byte tacanModePins[5] = {4, 5, 6, 7, 8}; DcsBios::SwitchMultiPos tacanMode("TACAN_MODE", tacanModePins, 5); DcsBios::Switch2Pos tacanXy("TACAN_XY", 22); DcsBios::RotaryEncoder tacan10("TACAN_10", "DEC", "INC", 9, 10); DcsBios::RotaryEncoder tacan1("TACAN_1", "DEC", "INC", 11, 12); void onTacan10Change(unsigned int newValue) { display.showNumber(newValue, true,2, 0); } DcsBios::IntegerBuffer tacan10Buffer(0x1158, 0x0f00, 8, onTacan10Change); void onTacan1Change(unsigned int newValue) { display.showNumber(newValue, false,1, 2); } DcsBios::IntegerBuffer tacan1Buffer(0x1158, 0xf000, 12, onTacan1Change); // Canal TACAN void onTacanChannelChange (char * newValue) { Digit0 = TACAN.charAt (0); // récupère une valeur de caractère individuelle à cet index spécifique dans la chaîne Digit1 = TACAN.charAt (1); Digit2 = TACAN.charAt (2); Digit3 = TACAN.charAt (3); if (TACAN_power == 0) display.showString(newValue, 4, 0); } DcsBios :: StringBuffer <4> tacanChannelBuffer (0x1162, onTacanChannelChange); void onTacanModeChange(unsigned int newValue) { if (newValue == 0){ display.setBrightness(0, false);} else {display.setBrightness(15, true);} } DcsBios::IntegerBuffer tacanModeBuffer(0x1168, 0x000e, 1, onTacanModeChange); DcsBios::ActionButton tacanXyToggle("TACAN_XY", "TOGGLE", 22); void setup(){ display.clear(); DcsBios::setup(); } void loop() { DcsBios::loop(); } Link to comment Share on other sites More sharing options...
olive47 Posted May 10, 2021 Author Share Posted May 10, 2021 Après avoir rèsolu le tacan, je m attaque a l ILS. TM1637 6 DIGITS . MON tm1637 AFFICHE 801.53 ALORS QUE SUR dcs L I LS AFFICHE 108.35. MERCI . #define DCSBIOS_IRQ_SERIAL #include "DcsBios.h" #include <TM1637TinyDisplay.h> #include <LedControl.h> String Ils = ""; // Declare global new string variable char Digit0 = ""; // Declare global new character variable char Digit1 = "";// Declare global new character variable char Digit2 = "";// Declare global new character variable char Digit3 = "";// 0 char Digit4 = "";// Declare global new character variable char Digit5 = "";// Declare global new character variable int Ils_power = 1; //FIRST - 6 DIGIT 7 SEGMENT DISPLAY-Ils // Module connection pins (Digital Pins) #define CLK 2 #define DIO 3 TM1637TinyDisplay display (CLK, DIO); //set up the 6-Digit Display DcsBios::PotentiometerEWMA<5, 128, 5> ilsVol("ILS_VOL", A0); DcsBios::Switch2Pos ilsPwr("ILS_PWR", 4); DcsBios::RotaryEncoder ilsMhz("ILS_MHZ", "DEC", "INC", 5, 6); DcsBios::RotaryEncoder ilsKhz("ILS_KHZ", "DEC", "INC", 7, 8); //ILS // DCS-Bios Code // Appel DCS-Bios Khz avec A10C.lua void onIlsMhzChange(char* newValue) { display.showString(newValue, 3, 0); } DcsBios::StringBuffer<3> ilsMhzStrBuffer(0x116e, onIlsMhzChange); void onIlsKhzChange(char* newValue){ display.showString(newValue, 2, 4); } DcsBios::StringBuffer<2> ilsKhzStrBuffer(0x1172, onIlsKhzChange); // Canal Ils void onIlsFrequencySChange(char* newValue) { display.showString(newValue, 0, 6); } DcsBios::StringBuffer<6> ilsFrequencySBuffer(0x12d8, onIlsFrequencySChange); void onIlsPwrChange(unsigned int newValue) { if (newValue == 0) { display.setBrightness(0, false ); } else { display.setBrightness(15, true); } } DcsBios::IntegerBuffer ilsPwrBuffer(0x1168, 0x0010, 4, onIlsPwrChange); void setup() { display.clear(); DcsBios::setup(); } void loop(){ DcsBios::loop(); } Link to comment Share on other sites More sharing options...
Recommended Posts