Jump to content

Shetch tacan A10c dcs bios arduino et carte TM1637


olive47

Recommended Posts


 

 

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

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

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

  • 1 month later...

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

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

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...