Note de ce sujet :
  • Moyenne : 5 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Code OLED 128*64
@ChrisChris, juste par curiosité, quel est le problème ou la raison qui te force à vouloir utiliser une V11 plutôt que la 13.02 et y appliquer les modifs de Raphaël de la première page de ce fil ?
Répondre
(Hier, 12:35 PM)Mike a écrit : @ChrisChris, juste par curiosité, quel est le problème ou la raison qui te force à vouloir utiliser une V11 plutôt que la 13.02 et y appliquer les modifs de Raphaël de la première page de ce fil 

la v11.20 => +1500h sans problème, très stable, pas besoin des conditions température sonde, etc...
la v12 => pas testée
la v13 et 13.01=> la curiosité. Résultats : plantage au bout de quelques minutes, grosse lenteur accès interface, retour à la v11.20 tout est OK.
RobotDyn 40A + NF-A4x10. CE 3000w th méca. UxIx2 . Kit PV pnp 2 kW + OpenDtu. Maisonette + affichage routeur v11.20 (Merci André, Raphael591, Lolo69)
Répondre
@Chris
ci-dessous le fichier OLED avec les fonctions de la V13 mais qui se se compile avec une V11_20

Pour compiler n'oublie pas de passer le partition Scheme à NO FS
mais avant penses mettre les numeros de GPIO de tes boutons en ligne 45-46.


Code :
/***********************************
Version Modifiée par Lolo69 en prenant la version OLED originelle de Raphael pour les nouvelles fonctions qui tournent avec le routeur Version>12
et réadaptée pour la version routeur V11

AFFICHAGE SUR SSD1306/SH110X
*************************************/

//Choisir son écran ICI ************************
#define USE_SSD1306 1 //Pour les écrans SSD1306
//#define USE_SH110X 1 //Pour les écrans SH1106
//Le reste du code ne devrait s'adapter à la compilation
//Voir pour modifier les pin (gpio) écran et bouton
//Choix ecran *************************************

#include <Adafruit_GFX.h>

#define OLED_BLACK 0
#define OLED_WHITE 1
#define OLED_INVERSE 2

//Pour SSD1306
#if(USE_SSD1306)
  #include <Adafruit_SSD1306.h>
#endif

//Pour écran SH110X
#if(USE_SH110X)
  #include <Adafruit_SH110X.h>
#endif


#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
// Définir les broches SDA et SCL personalisées pour écran
#define SDA_PIN 26 //26
#define SCL_PIN 25 //25
bool OLED_on = false; //Si problème avec l'écran, les procédures sont ignorées

//*******BOUTON OLED***********/
//Changement état gérer dans boucle affichage, déconseillé dans l'interruption.
//gestion de la latence du bouton
volatile unsigned long button_time = 0;
int btn_latence = 250; // Latence en ms
volatile bool OledState=true; //Statut oled On/Off (Mettre à la valeur désiré au démarrage)
volatile bool OledChange=true; //Changement sur bouton, true = applique le statut OledState (affichage oui/non)
int pinBtnOled = 0; //Indiquer ici le pin du bouton pour gérer l'écran/capteur de présence
int ModeBtnOled = 0; // 0 = bouton poussoir (on/off sur écran), 1 = capteur présence ou bouton poussoir pour allumage on (off automatique)
unsigned long DureeAffichage = 40000; //Durée affichage 40 secondes
//******BOUTON OLED ***********/

int MATERIEL_ROUTAGE=-1; //Pour la recherche TRIAC OU RELAIS

#if USE_SSD1306
  Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#endif

//Pour écran SH110X
#if USE_SH110X
  Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#endif

const unsigned char bitmap_Sun[] PROGMEM = {
  0x10,0x84, // ...#....#....#..
  0x08,0x08, // ....#.......#...
  0x01,0xC0, // .......###......
  0x07,0xF0, // .....#######....
  0x0F,0xF8, // ....#########...
  0x6F,0xFB, // .##.#########.##
  0x0F,0xF8, // ....#########...
  0x07,0xF0, // .....#######....
  0x11,0xC4, // ...#...###...#..
  0x20,0x02, // ..#...........#.
};

const unsigned char bitmap_Off[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x1F,0xF8, // ...##########...
  0x1F,0xF8, // ...##########...
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
};

const unsigned char bitmap_Signal1[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x40,0x00, // .#..............
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal2[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x04,0x00, // .....#..........
  0x0C,0x00, // ....##..........
  0x1C,0x00, // ...###..........
  0x5C,0x00, // .#.###..........
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal3[] PROGMEM = {
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x00, // ................
  0x00,0x40, // .........#......
  0x00,0xC0, // ........##......
  0x01,0xC0, // .......###......
  0x05,0xC0, // .....#.###......
  0x0D,0xC0, // ....##.###......
  0x1D,0xC0, // ...###.###......
  0x5D,0xC0, // .#.###.###......
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal4[] PROGMEM = {
  0x00,0x04, // .............#..
  0x00,0x0C, // ............##..
  0x00,0x1C, // ...........###..
  0x00,0x1C, // ...........###..
  0x00,0x5C, // .........#.###..
  0x00,0xDC, // ........##.###..
  0x01,0xDC, // .......###.###..
  0x05,0xDC, // .....#.###.###..
  0x0D,0xDC, // ....##.###.###..
  0x1D,0xDC, // ...###.###.###..
  0x5D,0xDC, // .#.###.###.###..
  0xDD,0xDC  // ##.###.###.###..
};

const unsigned char bitmap_Signal0[] PROGMEM = {
  0x03,0xE0, // ......#####.....
  0x1F,0xFC, // ...###########..
  0x3E,0x3E, // ..#####...#####.
  0x38,0x7E, // ..###....######.
  0x71,0xF7, // .###...#####.###
  0x73,0xC7, // .###..####...###
  0x77,0x87, // .###.####....###
  0x3F,0x0E, // ..######....###.
  0x3E,0x1E, // ..#####....####.
  0x1F,0xFC, // ...###########..
  0x03,0xE0, // ......#####.....
};

const unsigned char bitmap_Logo[] PROGMEM = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x03,0xC1,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x3F,0xC0,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0xFF,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x01,0xFE,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x07,0xF8,0x00,0x03,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x0F,0xF0,0x60,0x61,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x3F,0xC0,0xE0,0x60,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x7F,0x80,0xE0,0x60,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFE,0x00,0xE0,0x60,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xFC,0x00,0xE0,0x60,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF8,0x00,0xE0,0x60,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF0,0x00,0xE0,0x60,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xE0,0x60,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xE0,0x60,0x00,0x7C,0x03,0xFE,0x0E,0x07,0xF1,0xFF,0x8F,0xF0,0x00,
  0x01,0xE0,0x00,0x60,0x60,0x00,0x7C,0x03,0xFF,0x1E,0x0F,0xF9,0xFF,0x8F,0xF8,0x00,
  0x01,0xE0,0x00,0x00,0x00,0x00,0x7C,0x03,0xFE,0x3E,0x0F,0xFC,0xFF,0x8F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x3E,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x03,0xFF,0xFC,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0xF8,0x06,0x0F,0xFC,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0E,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x01,0xFF,0xF8,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x03,0x00,0x06,0x0C,0x1C,0x18,0x0C,0x18,0x00,
  0x01,0xE0,0x00,0x7F,0xE0,0x00,0x7C,0x03,0x00,0x0F,0x0C,0x1C,0x18,0x0E,0x38,0x00,
  0x01,0xE0,0x00,0x3F,0xC0,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x1C,0x18,0x0F,0xF8,0x00,
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x03,0x00,0x3F,0x8C,0x0C,0x18,0x0F,0xF0,0x00,
  0x01,0xE0,0x00,0x0F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x06,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x1F,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x7F,0xC0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0xFF,0xF0,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x01,0xFF,0xFC,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x0F,0xFE,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x00,0x03,0xFF,0x80,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xE0,0x0F,0xE0,0xFF,0xC0,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF0,0x7F,0x80,0x3F,0xF1,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x01,0xF9,0xFF,0x00,0x1F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFF,0xFC,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xFF,0xF8,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x7F,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x1F,0xC0,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

int cligSun = 0;
int BoucleOled = 0;

//Initialisation
void InitSSD(){
   //OLED init
  Wire.begin(SDA_PIN, SCL_PIN);

  //FORCE RESET DE L'ECRAN SI PIN PARTICULIER POUR RESET
  if(OLED_RESET != -1) {
    pinMode (OLED_RESET, OUTPUT);
    digitalWrite(OLED_RESET, HIGH);
    digitalWrite(OLED_RESET, LOW);
    delay(100);
  }
  #if USE_SSD1306
    delay(250);
    if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
      Serial.println("OLED SSD1306 init failed");
    }
    else {
        //Allumer l'écran.
       
        display.ssd1306_command(SSD1306_DISPLAYON);
        //oled_command(SH110X_DISPLAYON); //SH110X
        OledLogo();
        display.setCursor(70,50);
        display.print(F("Init..."));
        display.display();
        OLED_on=true;
    }
  #endif

  #if USE_SH110X
    delay(250); // wait for the OLED to power up
    if (!display.begin(SCREEN_ADDRESS, true)) { //Pour SH110X
      Serial.println("OLED SH110X init failed");
    }
    else {
      //Allumer l'écran.
      // ?
      OledLogo();
      display.setCursor(70,50);
      display.print(F("Init..."));
      display.display();
      OLED_on=true;
    }
  #endif

  //Partie gestion bouton
  if(pinBtnOled > 0) {
    pinMode(pinBtnOled, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(pinBtnOled), OledBouton, RISING) ;
  }
}

//Procédure boucle des écrans
void OledAffiche(){
  if(OLED_on==false) {
    return;
  }
  if(ModeBtnOled==1 && OledState==true) {
    //Contrôle durée d'affichage
    if(button_time-btn_latence+DureeAffichage < millis()) {
      //Durée affichage dépassé, on éteint
      OledState=false;
      OledChange=true;
    }
  }
  if (OledChange) {
    OledChange=false; //Changement traité
    if(OledState) {
      //Allumer écran
      #if USE_SSD1306
        display.ssd1306_command(SSD1306_DISPLAYON);
      #endif
      #if USE_SH110X
        // ?
      #endif
      BoucleOled=0; //reprise début boucle écran
    }
    else {
      //Eteindre écran
      #if USE_SSD1306
        display.ssd1306_command(SSD1306_DISPLAYOFF);
      #endif
      #if USE_SH110X
        // ?, pas trouvé la commande pour off
        display.clearDisplay();
        display.display();
      #endif
      return;
    }
  }
  if(MATERIEL_ROUTAGE == -1) {
    //Recherche matériel
     for (int i = 0; i < NbActions; i++) {
        if(LesActions[i].Actif != 0 && MATERIEL_ROUTAGE == -1 ) MATERIEL_ROUTAGE=i;
     }
  }
  if (BoucleOled <= 10 ) {
      //Ecran 1
      display.clearDisplay();
      BarreEtatDroite();
      Ecran1();
      display.display();
      BoucleOled++;
  }
  else if (BoucleOled <= 14 ) {
      //Ecran 2
      display.clearDisplay();
      Ecran2();
      display.display();
      BoucleOled++;
  }
   else if (BoucleOled <= 18 ) {
      //Ecran 3
      display.clearDisplay();
      Ecran3();
      display.display();
      BoucleOled++;
  }
  else if (BoucleOled <= 20 ) {
      OledLogo();
      BoucleOled++;
  }
  else {
    BoucleOled=0;
  }
}

//contenue écran 1
void Ecran1(){
  if(OLED_on==false || !OledState) {
    return;
  }
  display.setTextSize(1);
  display.setTextColor(OLED_WHITE);
  //WIFI
  display.setCursor(0,1);
  if (WiFi.status() == WL_CONNECTED) {
    display.print(WiFi.localIP().toString());
  }
  else {
    (WiFi.getMode() == WIFI_STA)==false ? display.print(WiFi.softAPIP().toString()) :  display.print(F("Pas de wifi !"));
  }

  //Ligne de séparation
  display.drawLine(0,13,128,13,OLED_WHITE);

  //Puissance sonde maison
  display.setCursor(0,16);
  display.println(F("Puissance"));
  display.setCursor(0,29);
  display.setTextSize(2);
  display.print(int(PuissanceS_M - PuissanceI_M));

  display.setTextSize(1);
  //Ouverture du triac/ssr
  int Ouv = -1;
  if(MATERIEL_ROUTAGE != -1) {
    Ouv = 100 - Retard[MATERIEL_ROUTAGE];
  }
  if(Ouv>0) {
    //Icone clignote, signale le routage
    if(cligSun==0) {
      display.drawBitmap(92, 0, bitmap_Sun , 16, 10, OLED_WHITE);
      cligSun=1;
    }
    else {
      cligSun=0;
      display.drawBitmap(92, 0, bitmap_Off , 16, 10, OLED_WHITE);
    }
  }
  else {
    //Pas de triac/relais...
  }
  display.setCursor(0,38);
  if(Ouv == -1) {
    display.setCursor(72,16);
    display.print(F("Ouv")); //Triac erreur
    display.drawRect(60, 16, 10, 33, OLED_WHITE);
    display.setCursor(82,30);
    display.print(F(" !"));
  }
  else {
    //Affiche jauge Triac/Relais
    display.setCursor(72,16);
    display.print(F("Ouv"));
    display.drawRect(60, 16, 10, 33, OLED_WHITE);
    float t = (float(33)/100)*Ouv;
    display.fillRect(60+2, 16+(33-int(t)), 10-4 , int(t), OLED_WHITE);
    display.setTextSize(2);
    display.setCursor(73,29);
    display.print(Ouv);
    display.setTextSize(1);
  }

  // Affichage de la température canal 0
  if (TemperatureValide > 0){
    display.setCursor(0, 57);
    display.print(F("T "));
    display.print(int(temperature));
  }
  else
  {
    display.setCursor(0, 57);
    display.print(F("V"));
    display.print(Version);
  }

  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+"h";
  display.setCursor(108-(durOn.length()*6),57);
  display.print(durOn);
}

//barre d'action affiché en ecran 1
void BarreEtatDroite() { /*Affiche une barre d'état WIFI et mode action*/
   if(OLED_on==false || !OledState) {
    return;
  }
  display.setTextSize(1);
  display.setTextColor(OLED_WHITE);
  display.drawLine(110,13,110,64,OLED_WHITE); //Ligne séparatrice à droite
  //Niveau Wifi
  if (WiFi.status() == WL_CONNECTED) {
    //Icone niveau connection
    int NivSignal = int(WiFi.RSSI()) ;
    if (NivSignal<-80) {display.drawBitmap(112, 0, bitmap_Signal1 , 16, 12, OLED_WHITE); }
    else if(NivSignal<-60) {display.drawBitmap(112, 0, bitmap_Signal2 , 16, 12, OLED_WHITE); }
    else if(NivSignal<-45) {display.drawBitmap(112, 0, bitmap_Signal3 , 16, 12, OLED_WHITE); }
    else if(NivSignal<-30) {display.drawBitmap(112, 0, bitmap_Signal4 , 16, 12, OLED_WHITE); }
  }
  else {
    (WiFi.getMode() == WIFI_STA)==false ? display.drawBitmap(112, 0, bitmap_Signal0 , 16, 11, OLED_WHITE) : display.drawBitmap(112, 0, bitmap_Signal0 , 16, 11, OLED_WHITE);
  }
  //Mode en cours du Triac/ssr...
  int Mode = 0;
  float laTemperature = -120;
  if (TemperatureValide > 0) {  //La température de ce canal est valide
    laTemperature = temperature;
  }
  if (MATERIEL_ROUTAGE != -1) Mode = LesActions[MATERIEL_ROUTAGE].TypeEnCours(HeureCouranteDeci, laTemperature, LTARFbin);
  display.setCursor(115,17);
  display.setTextColor(OLED_WHITE);
  if(Mode!=1){
    display.print(F("OF"));
  }
  else {
    display.fillRect(114,16,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("OF"));
  }

  display.setCursor(115,29);
  display.setTextColor(OLED_WHITE);
  if(Mode!=2){
    display.print(F("ON"));
  }
  else {
    display.fillRect(114,28,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("ON"));
  }

  display.setCursor(115,41);
  display.setTextColor(OLED_WHITE);
  if(Mode!=3){
    display.print(F("PW"));
  }
  else {
    display.fillRect(114,40,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("PW"));
  }

  display.setCursor(115,53);
  display.setTextColor(OLED_WHITE);
  if(Mode!=4){
    display.print(F("TR"));
  }
  else {
    display.fillRect(114,52,13,10,OLED_WHITE);
    display.setTextColor(OLED_BLACK);
    display.print(F("TR"));
  }
  display.setTextColor(OLED_WHITE);
}

//Ecran 2
void Ecran2() {
  if(OLED_on==false || !OledState){
    return;
  }
  display.setCursor(0,0);
  display.setTextSize(2);
  display.setTextColor(OLED_WHITE);
  display.println(F("Injectee"));
  display.println(F("jour"));
  display.print(EnergieJour_M_Injectee);
  display.print(F(" Wh"));
  display.setTextSize(1);
  //Affichage de la version installée
  display.setCursor(0,55);
  display.print(F("V "));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+" h";
  display.setCursor(128-(durOn.length()*6),55);
  display.print(durOn);
}

//Ecran 3
void Ecran3() {
  if(OLED_on==false || !OledState){
    return;
  }
  display.setCursor(0,0);
  display.setTextSize(2);
  display.setTextColor(OLED_WHITE);
  float H = 0;
  //if(MATERIEL_ROUTAGE != -1 ) H = LesActions[MATERIEL_ROUTAGE].H_Ouvre;
  display.println(F("Heure"));
  display.println(F("router"));
  display.print(H);
  display.println(F("h"));


  display.setTextSize(1);
  //Affichage de la version installée
  display.setCursor(0,57);
  display.print(F("V"));
  display.print(Version);
  //Affichage durée de fonctionnement ESP32
  int T = int(millis() / 1000);
  float DureeOn = float(T) / 3600;
  String durOn=String(DureeOn)+"h";
  display.setCursor(128-(durOn.length()*6),57);
  display.print(durOn);
}

//Affichage du logo
void OledLogo() {
  display.clearDisplay();
  display.setCursor(0,0);
  display.drawBitmap(0, 0, bitmap_Logo , 128, 68, OLED_WHITE);
  display.setCursor(70,50);
  display.print(F("V "));
  display.print(Version);
  display.display();
}

//Gestion du bouton
void OledBouton() {

   switch (ModeBtnOled)
   {
   case 0 :
      //Gestion bouton poussoir (allume/éteint)
      if (button_time > millis()) break;
      OledState = !OledState; // inverse l’état de la variable
      button_time = millis() + btn_latence;
      OledChange=true;
    break;
 
   case 1 :
      //Capteur ou bouton avec extinction auto (allume)
      if (button_time > millis()) break; //on garde la notion de latence
      if (OledState == false) {
        OledState = true; // inverse l’état de la variable
        button_time = millis() + btn_latence;
        OledChange=true;
      }
    break;

   default:
    break;
    }

}
Voilà tu me diras si ca passe
Répondre
(Hier, 03:26 PM)Lolo69 a écrit : @Chris
ci-dessous le fichier OLED avec les fonctions de la V13 mais qui se se compile avec une V11_20

Pour compiler n'oublie pas de passer le partition Scheme à NO FS
mais avant penses mettre les numeros de GPIO de tes boutons en ligne 45-46.
Voilà tu me diras si ca passe

Un grand MERCI Lolo69,

ça fonctionne, l'écran se met bien en veille et se réveille bien avec le bouton poussoir. L'affichage est Ok sur les 3 écrans d'informations et le logo.
L'accés à linterface de ce routeur (de test) fonctionne parfaitement, pas de lenteur. Je vais ajouter un ssr et créer des actions.
Une fois les tests validés, je l'installe sur le routeur ECS.

PS : le week-end ne commence pas le mercredi Tongue
RobotDyn 40A + NF-A4x10. CE 3000w th méca. UxIx2 . Kit PV pnp 2 kW + OpenDtu. Maisonette + affichage routeur v11.20 (Merci André, Raphael591, Lolo69)
Répondre
Lol pendant la pause on fait plein de trucs
Répondre
(Hier, 10:56 PM)Lolo69 a écrit : Lol pendant la pause on fait plein de trucs

@Lolo69

Bonjour, j'ai testé avec un ssr, tout fonctionne au niveau de l'affichage, mode auto (via action), forçage, ouverture, puissances, etc... les infos à l'écran suivent et s'affichent correctement => Parfait Lolo69  Smile
Par contre en veille, l'affichage s'allume pendant 5 secondes, toutes les 45 secondes sur le logo F1ATB. Je n'ai pas souvenir de cette enjolivure. Est-ce normal (dans le code d'origine de Raphael591) ou bug?
J'abuse encore un peu de tes compétences et de ton week-end Wink . Merci d'avance
RobotDyn 40A + NF-A4x10. CE 3000w th méca. UxIx2 . Kit PV pnp 2 kW + OpenDtu. Maisonette + affichage routeur v11.20 (Merci André, Raphael591, Lolo69)
Répondre
(Il y a 6 heures)ChrisChris a écrit :
(Hier, 10:56 PM)Lolo69 a écrit : Lol pendant la pause on fait plein de trucs

@Lolo69

Bonjour, j'ai testé avec un ssr, tout fonctionne au niveau de l'affichage, mode auto (via action), forçage, ouverture, puissances, etc... les infos à l'écran suivent et s'affichent correctement => Parfait Lolo69  Smile
Par contre en veille, l'affichage s'allume pendant 5 secondes, toutes les 45 secondes sur le logo F1ATB. Je n'ai pas souvenir de cette enjolivure. Est-ce normal (dans le code d'origine de Raphael591) ou bug?
J'abuse encore un peu de tes compétences et de ton week-end Wink . Merci d'avance

Je n ai pas décortiqué tout le code , Raphael qui l’a réalisé sera largement plus performant que moi pour y répondre et ca permet de rendre à Cesar ce qui lui appartient.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)