Ja to próbowałem na LCD:
DcsBios::Int16Buffer fuelQty10000(0x10ce);
DcsBios::Int16Buffer fuelQty1000(0x10d0);
DcsBios::Int16Buffer fuelQty100(0x10d2);
void setup() {
DcsBios::setup();
lcd.begin(20, 4);
lcd.clear();
}
void loop() {
DcsBios::loop();
if (fuelQty10000.hasUpdatedData()) { displayString[0] = mapeo(fuelQty10000.getData()); }
if (fuelQty1000.hasUpdatedData()) { displayString[1] = mapeo(fuelQty1000.getData()); }
if (fuelQty100.hasUpdatedData()) { displayString[2] = mapeo(fuelQty100.getData()); }
lcd.clear();
lcd.setCursor(6, 1);
lcd.print(displayString);
delay (0); //170
}
char mapeo(unsigned int valor){
if (valor < 6553) { return '0'; }
if (valor < 13107) { return '1'; }
if (valor < 19660) { return '2'; }
if (valor < 26214) { return '3'; }
if (valor < 32767) { return '4'; }
if (valor < 39321) { return '5'; }
if (valor < 45874) { return '6'; }
if (valor < 52428) { return '7'; }
if (valor < 58981) { return '8'; }
return '9' ;
}
Pod układem MAX7219 (bilblioteka LedControl) to lepiej działa - poniższy sketch wykorzystuje JoeSim w swoim kokpicie:
LedControl FuelDisplay = LedControl(A0, A1, A2, 1); //3 pierwsze to piny Arduino, ostatnia cyfra to nr wyświetlacza
int val_1 = 0;
int val_2 = 0;
int val_3 = 0;
void setup() {
DcsBios::setup();
FuelDisplay.shutdown(0, false); // turns on display
FuelDisplay.setIntensity(0, 3); // 15 = brightest
void loop() {
DcsBios::loop();
}
// Fuel Quantity Counter 10000
void onFuelQty10000Change(unsigned int newValue1) {
unsigned int value1 = (newValue1 & 0xffff) >> 0;
unsigned int Disp_Digit_1 = map(value1, 0, 65535, 0, 10000);
val_1 = Disp_Digit_1;
if (Disp_Digit_1 > 501)
{val_1 = 1;}
else
{val_1 = 0;}
FuelDisplay.setDigit(0, 4, val_1, false); // Print "100"'s slot
FuelDisplay.setDigit(0, 1, 0, false); // Blank out "1"s slot
FuelDisplay.setDigit(0, 0, 0, false); // Blank out "1"s slot
}
DcsBios::IntegerBuffer fuelQty10000Buffer(0x10ce, 0xffff, 0, onFuelQty10000Change);
// Fuel Quantity Counter 1000
void onFuelQty1000Change(unsigned int newValue2) {
unsigned int value2 = (newValue2 & 0xffff) >> 0;
unsigned int Disp_Digit_2 = map(value2, 0, 65535, 0, 1000);
val_2 = Disp_Digit_2;
if (val_2 > 900)
{val_2 = 0;}
else if (val_2 > 800)
{val_2 = 9;}
else if (val_2 > 700)
{val_2 = 8;}
else if (val_2 > 600)
{val_2 = 7;}
else if (val_2 > 500)
{val_2 = 6;}
else if (val_2 > 400)
{val_2 = 5;}
else if (val_2 > 300)
{val_2 = 4;}
else if (val_2 > 200)
{val_2 = 3;}
else if (val_2 > 100)
{val_2 = 2;}
else if (val_2 > 1)
{val_2 = 1;}
else
{val_2 = 0;}
FuelDisplay.setDigit(0, 3, val_2, false); // Print "100"'s slot
}
DcsBios::IntegerBuffer fuelQty1000Buffer(0x10d0, 0xffff, 0, onFuelQty1000Change);
// Fuel Quantity Counter 100
void onFuelQty100Change(unsigned int newValue3) {
unsigned int value3 = (newValue3 & 0xffff) >> 0;
unsigned int Disp_Digit_3 = map(value3, 0, 65535, 0, 100);
val_3 = Disp_Digit_3;
if (val_3 > 90)
{val_3 = 0;}
else if (val_3 > 80)
{val_3 = 9;}
else if (val_3 > 70)
{val_3 = 8;}
else if (val_3 > 60)
{val_3 = 7;}
else if (val_3 > 50)
{val_3 = 6;}
else if (val_3 > 40)
{val_3 = 5;}
else if (val_3 > 30)
{val_3 = 4;}
else if (val_3 > 20)
{val_3 = 3;}
else if (val_3 > 10)
{val_3 = 2;}
else
{val_3 = 1;}
FuelDisplay.setDigit(0, 2, val_3, false); // Print "100"'s slot
}
DcsBios::IntegerBuffer fuelQty100Buffer(0x10d2, 0xffff, 0, onFuelQty100Change);