J'ai réalisé pas mal d'électronique via arduino pour le M2000
Je veux changer l'affichage de 7 segments et passer sur écran oled concernant l'affichage des gauges DETOT du fuel.
Ce qui me pose problème c'est l'affichage des centaines. D'après les codes sur le 2000, pour afficher le nombres, il faut écrire chaque chiffres par son propre codes. Millier, centaine, dizaine et l'unité qui toujours à 0.
Bref pour la dizaine il s'incrémente très bien. En revanche la centaine dès la mise en route du programme in n'apparait pas. Il ne s'affiche que sur une très courte durée environ 5/10 de seconde lorsque qu'il change de centaine et disparait.
Si je ne mets pas le clearDisplay, il s'affiche mais le reste des chiffres s'incrémente sur lui même, donc pas lisible.
Je ne comprends pas pourquoi la dizaine fonctionne bien mais le reste non?
Un sachant qui pourrait m'éclairer
Cordialement
#define DCSBIOS_DEFAULT_SERIAL
#include <DcsBios.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(OLED_RESET);
/**** essai afficheur Oled 0.91 Conso fuel *10 DETOT display M2000 ****/
void onFuelDetotTensChange(unsigned int FuelDetotTensValue) {
unsigned int FuelDetotTens;
if (FuelDetotTensValue == 0){FuelDetotTens=0;}
else if (FuelDetotTensValue == 6553){FuelDetotTens=1;}
else if (FuelDetotTensValue == 13107){FuelDetotTens=2;}
else if (FuelDetotTensValue == 19660){FuelDetotTens=3;}
else if (FuelDetotTensValue == 26214){FuelDetotTens=4;}
else if (FuelDetotTensValue == 32767){FuelDetotTens=5;}
else if (FuelDetotTensValue == 39321){FuelDetotTens=6;}
else if (FuelDetotTensValue == 45874){FuelDetotTens=7;}
else if (FuelDetotTensValue == 52428){FuelDetotTens=8;}
else if (FuelDetotTensValue == 58981){FuelDetotTens=9;}
else if (FuelDetotTensValue == 65535){FuelDetotTens=0;}
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(65,10);
display.println(FuelDetotTens);
display.setCursor(85,10);
display.println("0");
display.display();
}
DcsBios::IntegerBuffer fuelDetotTensBuffer(0x726c, 0xffff, 0, onFuelDetotTensChange);
/**** essai afficheur Oled 0.91 Conso fuel *100 DETOT display M2000 ****/
void onFuelDetotCentsChange(unsigned int FuelDetotCentsValue) {
unsigned int FuelDetotCents;
if (FuelDetotCentsValue == 0){FuelDetotCents=0;}
else if (FuelDetotCentsValue == 6553){FuelDetotCents=1;}
else if (FuelDetotCentsValue == 13107){FuelDetotCents=2;}
else if (FuelDetotCentsValue == 19660){FuelDetotCents=3;}
else if (FuelDetotCentsValue == 26214){FuelDetotCents=4;}
else if (FuelDetotCentsValue == 32767){FuelDetotCents=5;}
else if (FuelDetotCentsValue == 39321){FuelDetotCents=6;}
else if (FuelDetotCentsValue == 45874){FuelDetotCents=7;}
else if (FuelDetotCentsValue == 52428){FuelDetotCents=8;}
else if (FuelDetotCentsValue == 58981){FuelDetotCents=9;}
else if (FuelDetotCentsValue == 65535){FuelDetotCents=0;}
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(35,10);
display.println(FuelDetotCents);
display.display();
}
DcsBios::IntegerBuffer fuelDetotCentsBuffer(0x726a, 0xffff, 0, onFuelDetotCentsChange);
void setup() {
DcsBios::setup();
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Clear the buffer
display.clearDisplay();
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
display.display();
}
void loop() {
DcsBios::loop();
}