Go Down

Topic: Conflit Tiny RTC et MCUFriend tft sreen (Read 709 times) previous topic - next topic

baracuda33

Salut les forumeurs,
Je me permets de réouvrir un topic car je suis bien bloqué sur un projet perso. Je vous explique :
Matériel :
Arduino Uno R3
MCUFriend tft touch screen 2,4" avec un chipset ST7781
Tiny RTC I2C module.


J'ai réalisé mes menus et mes affichages et je m'apprétais à finaliser le tout en soudant les cables menant à la pile RTC et en décommentant les lignes liées a celle ci et la c'est le drame.... En mettant la pile et en utilisant la commande rtc.begin(); mon écran scintille a mort sur les menus, il devient tout blanc. Apparemment le shield utilise une pin I2C comme reset (pin A4), ducoup je suppose que le signal I2C envoyé a la pile RTC provoque des reset en boucle d'ou l'écran blanc.

La question c'est qu'est ce que je dois faire et surtout est-ce que j'ai bien compris le problème. SI quelqu'un pouvez me venir en aide :))

fdufnews

Si ton écran utilise A4 alors tu ne peux pas utiliser en même temps l'I²C.
Une solution serait de supprimer la broche en A4 sur le shield écran ainsi tu récupérerais l'usage de A4 pour l'I²C.
Je suppose que e RESET de l'écran doit être activé une fois au début et ne doit sans doute plus être utilisé par la suite. Du coup tu peux soit connecter le RESET de l'écran au RESET de l'arduino ou à une autre broche digitale et piloter le RESET toi même dans le setup().

baracuda33

Salut, merci de ta réponse,
J'avais vu un truc sur le net du même genre ducoup j'ai fais :
-Plier le pin A4 du shield
-Relier le pin plié à la borne RESET
-Définir A3 en pin de RESET sachant que c'est utilisé qu'au démarrage.

Mais la c'est pareil tout blanc de chez blanc....

fdufnews

Si j'en crois ce que j'ai lu ici et si c'est bien le même écran alors toutes les pin de ta carte son utilisées.
Si tu relies la pin RESET de l'écran au RESET de l'arduino, il n'est pas utile de la relier à une autre pin sinon tu vas faire un RESET de l'arduino en initialisant ton écran.

baracuda33

Ok donc dans le code je laisse A4 en reset? Je vais essayer dès que je rentre. Au début j'avais essayé avec le pin 10 (digital) car utilisé pour la carte SD que je n'utilise pas mais ça ne faisait une fois de plus que des reset. Tu t'y connais un peu avec les écrans MCUFriends? j'ai quelques aux galères dans ma besace.

baracuda33

#5
Aug 25, 2017, 07:34 pm Last Edit: Aug 25, 2017, 07:51 pm by baracuda33
Je viens d'essayer la manipulation, et ça ne marche pas. J'ai plié la pin 4 du shield, j'ai cablé jusqu'au RST de l'arduino et j'ai laissé A4 en reset dans la définition de l'écran dans le code.... Et ça ne marche pas.

En plus la fonction RTC était désactivée dans le programme donc c'est juste l'action de sortir la pin A4 et la mettre sur le Reset qui semble faire dérailler l'écran. Je viens de faire un scanner I2C c'est étrange avec ou sans écran j'ai toujours 2 adresses qui sont donc pour la pile RTC (0 sans rien 2 adresses avec que la pile RTC, 2 adresse avec pile rtc + écan). LEs adresses sont 0x68 et 0x50.

Comment faire pour que le signal I2C soit propre a l'adresse de la pile RTC ou de l'écran.... Car en théorie en I2C ça doit pas être sorcier de mettre plusieurs composants I2C à la suite.

baracuda33

Je penses avoir localisé le problème, et ça vient d'un autre problème que je rencontre je penses :

Mon arduino démarre sur une page d'attente pour régler les paramètres. Lorsque c'est fait j'appui sur un bouton qui me change de page. Chaque fois que je veux modifier l'affichage de la première page je suis obligé de faire un :
myGLCD.Init() car sinon l'écran reste figé..... Or le blanc sur l'écran apparait justement avec la pile RTC lorsque j'effectue un myGLCD.Init(). Je penses qu'en résolvant ce bug je résoudrais celui de la pile RTC. Voici mon code (ps désolé pour le bordel j'ai bidouillé a mort pour essayer de trouver le bug et le code est en foutoir).

Code: [Select]
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>
#include <SPI.h>
#include <MCUFRIEND_kbv.h>
#include <RTClib.h>
#include <Wire.h>
#include <avr/pgmspace.h>

MCUFRIEND_kbv tft;

RTC_DS1307 rtc;

#include <TouchScreen.h>
#define YP A1
#define YM 7
#define XM A2
#define XP 6
UTFTGLUE myGLCD(0x7781, A2, A1, A3, A3, A0);


// Assign human-readable names to some common 16-bit color values:
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF


int dispx, dispy;
bool state = true;

int refresh=0;
int a;
int b = 0;
long lsh = 17;
long lsm = 0;
long csh = 22;
long csm = 0;
long llh = 0;
long llm = 0;
long clh = 2;
long clm = 30;

int h, m, s;


extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];


#define TOUCH_ORIENTATION  LANDSCAPE

TouchScreen myTouch(XP, YP, XM, YM, 300);
TSPoint tp;




void Boutons(int x, int y)
{
  myGLCD.setColor(0, 255, 0);
  myGLCD.drawRect(x, y + 20, x + 40, y - 20);
  myGLCD.drawRect(x + 60, y + 20, x + 100, y - 20);
  myGLCD.drawLine(x + 10, y, x + 30, y);
  myGLCD.drawLine(x + 70, y, x + 90, y);
  myGLCD.drawLine(x + 20, y + 10, x + 20, y - 10);
}


void get_heure(int h, int m, int s)
{
  DateTime now = rtc.now();
  m = int(now.minute());
  h = int(now.hour());
  s = int(now.second());
  Serial.print(h);
  Serial.print("\n");
  Serial.print(m);
  Serial.print("\n");
}


bool menu_parametres()
{
  tp = myTouch.getPoint();
  if (tp.x <= 680 && tp.x >= 400 && tp.y <= 900 && tp.y >= 820 && tp.z >= 50 && state == false)
  {
    return true;
  }
  else
  {
    return false;
  }

}


void detection_boutons()
{
   tp = myTouch.getPoint();
    if (tp.x <= 720 && tp.x >= 630 && tp.y <= 315 && tp.y >= 210 && tp.z > 50)
    {
    if (lsm == 59) {
      if (lsh == 23)
      { lsh = 0;
        lsm = 0;
      }
      else {
        lsh = lsh + 1;
      }
    }
    else {
      lsm = lsm + 1;
    }
    refresh=1;
    }

  if (tp.x <= 720 && tp.x >= 630 && tp.y <= 475 && tp.y >= 370 && tp.z > 50)
  {
    if (csm == 59) {
      if (csh == 23)
      { csh = 0;
        csm = 0;
      }
      else {
        csh = csh + 1;
      }
    }
    else {
      csm = csm + 1;
    }
    refresh=1;
  }


  if (tp.x <= 720 && tp.x >= 630 && tp.y <= 630 && tp.y >= 510 && tp.z > 50)
  {
    if (llm == 59) {
      if (llh == 23)
      { llh = 0;
        llm = 0;
      }
      else {
        llh = llh + 1;
      }
    }
    else {
      llm = llm + 1;
    }
    refresh=1;
  }


  if (tp.x <= 720 && tp.x >= 630 && tp.y <= 790 && tp.y >= 680 && tp.z > 50)
  {
    if (clm == 59) {
      if (clh == 23)
      { clh = 0;
        clm = 0;
      }
      else {
        clh = clh + 1;
      }
    }
    else {
      clm = clm + 1;
    }
    refresh=1;
  }

  if (tp.x <= 860 && tp.x >= 770 && tp.y <= 315 && tp.y >= 210 && tp.z > 50)
  {
    if (lsm == 0) {
      if (lsh == 0)
      { lsh = 23;
        lsm = 59;
      }
      else {
        lsh = lsh - 1;
        lsm = 59;
      }
    }
    else {
      lsm = lsm - 1;
    }
    refresh=1;
  }
  if (tp.x <= 860 && tp.x >= 770 && tp.y <= 475 && tp.y >= 370 && tp.z > 50)
  {
    if (csm == 0) {
      if (csh == 0)
      { csh = 23;
        csm = 59;
      }
      else {
        csh = csh - 1;
        csm = 59;
      }
    }
    else {
      csm = csm - 1;
    }
    refresh=1;
  }
  if (tp.x <= 860 && tp.x >= 770 && tp.y <= 630 && tp.y >= 510 && tp.z > 50)
  {
    if (llm == 0) {
      if (llh == 0)
      { llh = 23;
        llm = 59;
      }
      else {
        llh = llh - 1;
        llm = 59;
      }
    }
    else {
      llm = llm - 1;
    }
    refresh=1;
  }
  if (tp.x <= 860 && tp.x >= 770 && tp.y <= 790 && tp.y >= 680 && tp.z > 50)
  {
    if (clm == 0) {
      if (clh == 0)
      { clh = 23;
        clm = 59;
      }
      else {
        clh = clh - 1;
        clm = 59;
      }
    }
    else {
      clm = clm - 1;
    }
    refresh=1;
  };

  if (tp.x <= 680 && tp.x >= 400 && tp.y <= 900 && tp.y >= 820 && tp.z > 20)
  {
    Serial.print("We Made It !! \n");
    a = 0;
  };
}

void ecran_home()
{
  int c = 17;
  int d = 00;
  //get_heure(h,m,s);
  if (b == 1) //Si on vient de passer à l'écran home depuis l'écran paramètres
  {
    myGLCD.fillScr(0, 0, 0);
    myGLCD.setColor(0, 250, 0);
    myGLCD.setColor(150, 0, 175);
    myGLCD.fillRect(100, 200, 220, 240);
    myGLCD.setColor(255, 255, 255);
    myGLCD.setBackColor(150, 0, 175);
    myGLCD.print("PARAMETRES", 130, 215);
    myGLCD.setBackColor(0, 0, 0);
  };
    myGLCD.setColor(255, 255, 255);
    myGLCD.printNumI(c, 140, 120, 2, "0");
    myGLCD.print(":", 160, 120);
    myGLCD.printNumI(d, 180, 120, 2, "0");
}

void ecran_parametres()
{

  refresh=1;
  a = 1;

  do
  {
    if (refresh==1)
    {
     myGLCD.InitLCD(TOUCH_ORIENTATION);
     myGLCD.fillScr(0, 0, 0);
     Boutons(200, 30);
     Boutons(200, 80);
     Boutons(200, 130);
     Boutons(200, 180);
     myGLCD.setColor(150, 0, 175);
     myGLCD.fillRect(100, 200, 220, 240);
     myGLCD.setColor(255, 255, 255);
     myGLCD.setBackColor(150, 0, 175);
     myGLCD.print("HOME", 148, 215);
     myGLCD.setBackColor(0, 0, 0);
     myGLCD.print("Leve Soleil : ", 20, 30);
     myGLCD.print(":", 155, 30);
     myGLCD.print("Couche Soleil : ", 20, 80);
     myGLCD.print(":", 155, 80);
     myGLCD.print("Leve Lune : ", 20, 130);
     myGLCD.print(":", 155, 130);
     myGLCD.print("Couche Lune : ", 20, 180);
     myGLCD.print(":", 155, 180);
     myGLCD.printNumI(lsh, 140, 30, 2, '0');
     myGLCD.printNumI(lsm, 170, 30, 2, '0');

     myGLCD.printNumI(csh, 140, 80, 2, '0');
     myGLCD.printNumI(csm, 170, 80, 2, '0');

     myGLCD.printNumI(llh, 140, 130, 2, '0');
     myGLCD.printNumI(llm, 170, 130, 2, '0');

     myGLCD.printNumI(clh, 140, 180, 2, '0');
     myGLCD.printNumI(clm, 170, 180, 2, '0');
     refresh=0;
     
    };
    detection_boutons();
    } while (a == 1);
}

void setup() {
  Serial.begin(9600);
  digitalWrite(A0, HIGH);
  pinMode(A0, OUTPUT);
  dispx = myGLCD.getDisplayXSize();
  dispy = myGLCD.getDisplayYSize();
  myGLCD.InitLCD(TOUCH_ORIENTATION);
  myGLCD.clrScr();
 /* rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    DateTime now = rtc.now();
  m = int(now.minute());
  h = int(now.hour());
  s = int(now.second());
  Serial.print(h);
  Serial.print("\n");
  Serial.print(m);
  Serial.print("\n");*/
 }
 
void loop() {
  b = 0;
  Serial.print("depart");
  if (state == true)
  {
    Serial.print("boucle parametres");
    ecran_parametres();
    myGLCD.InitLCD(TOUCH_ORIENTATION);
    myGLCD.clrScr();
    b = 1;
  };
  Serial.print("boucle home");
  ecran_home();
  state = menu_parametres();
  Serial.print(state);
}



D'ailleur au passage si quelqu'un peut m'expliquer comment sortir mes fonctions auxiliaires de mon code principal malgré qu'il y ai des variables globales et des librairies dans tous les sens, je suis preneur.

baracuda33

Up avec une version plus propre du code
Code: [Select]
#include <Adafruit_GFX.h>
#include <UTFTGLUE.h>
#include <SPI.h>
#include <MCUFRIEND_kbv.h>
#include <RTClib.h>
#include <Wire.h>
#include <avr/pgmspace.h>

MCUFRIEND_kbv tft;

RTC_DS1307 rtc;

#include <TouchScreen.h>
#define YP A1
#define YM 7
#define XM A2
#define XP 6
UTFTGLUE myGLCD(0x7781, A2, A1, A3, A3, A0);


// Assign human-readable names to some common 16-bit color values:
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

//Screen width and height
int dispx, dispy;

//boolean allowing settings menu opening
bool state = true;

//Variable allowing to know if menu has to be refresh or not
int refresh=0;

//Token goes to 0 when we need to leave settings menu loop
int a;

//Token to know if previous display was setting or menu (if b=1 it means that home screen was the last displayed so we don't need to refresh it
int b = 0;

//Variable following the differents hours/minutes of setings
//Sun rise
long lsh = 17;
long lsm = 0;
//Sunset
long csh = 22;
long csm = 0;
//Moon rise
long llh = 0;
long llm = 0;
//Moon set
long clh = 2;
long clm = 30;

//Hour, minutes, seconds RTC
int h, m, s;


extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];


#define TOUCH_ORIENTATION  LANDSCAPE

TouchScreen myTouch(XP, YP, XM, YM, 300);
TSPoint tp;



// Void creating + and - butons (used in settings menu)
void Boutons(int x, int y)
{
  myGLCD.setColor(0, 255, 0);
  
  myGLCD.drawRect(x, y + 20, x + 40, y - 20);
  myGLCD.drawRect(x + 60, y + 20, x + 100, y - 20);
  //+
  myGLCD.drawLine(x + 10, y, x + 30, y);
  myGLCD.drawLine(x + 20, y + 10, x + 20, y - 10);
  //-
  myGLCD.drawLine(x + 70, y, x + 90, y);

}

//Get hour from RTC
void get_heure(int h, int m, int s)
{
  DateTime now = rtc.now();
  m = int(now.minute());
  h = int(now.hour());
  s = int(now.second());
  Serial.print(h);
  Serial.print("\n");
  Serial.print(m);
  Serial.print("\n");
}

// Bool allowing to know if touch screen has been pressed on home box
bool menu_parametres()
{
  tp = myTouch.getPoint();
  if (tp.x <= 680 && tp.x >= 400 && tp.y <= 900 && tp.y >= 820 && tp.z >= 50 && state == false)
  {
    return true;
  }
  else
  {
    return false;
  }

}


//Detect wich button has been pressed on touch screen (8 differents buttons)

void detection_boutons()
{
   tp = myTouch.getPoint();
    if (tp.x <= 720 && tp.x >= 630 && tp.y <= 315 && tp.y >= 210 && tp.z > 50)
    {
    if (lsm == 59) {
      if (lsh == 23)
      { lsh = 0;
        lsm = 0;
      }
      else {
        lsh = lsh + 1;
      }
    }
    else {
      lsm = lsm + 1;
    }
    refresh=1;
    }

  if (tp.x <= 720 && tp.x >= 630 && tp.y <= 475 && tp.y >= 370 && tp.z > 50)
  {
    if (csm == 59) {
      if (csh == 23)
      { csh = 0;
        csm = 0;
      }
      else {
        csh = csh + 1;
      }
    }
    else {
      csm = csm + 1;
    }
    refresh=1;
  }


  if (tp.x <= 720 && tp.x >= 630 && tp.y <= 630 && tp.y >= 510 && tp.z > 50)
  {
    if (llm == 59) {
      if (llh == 23)
      { llh = 0;
        llm = 0;
      }
      else {
        llh = llh + 1;
      }
    }
    else {
      llm = llm + 1;
    }
    refresh=1;
  }


  if (tp.x <= 720 && tp.x >= 630 && tp.y <= 790 && tp.y >= 680 && tp.z > 50)
  {
    if (clm == 59) {
      if (clh == 23)
      { clh = 0;
        clm = 0;
      }
      else {
        clh = clh + 1;
      }
    }
    else {
      clm = clm + 1;
    }
    refresh=1;
  }

  if (tp.x <= 860 && tp.x >= 770 && tp.y <= 315 && tp.y >= 210 && tp.z > 50)
  {
    if (lsm == 0) {
      if (lsh == 0)
      { lsh = 23;
        lsm = 59;
      }
      else {
        lsh = lsh - 1;
        lsm = 59;
      }
    }
    else {
      lsm = lsm - 1;
    }
    refresh=1;
  }
  if (tp.x <= 860 && tp.x >= 770 && tp.y <= 475 && tp.y >= 370 && tp.z > 50)
  {
    if (csm == 0) {
      if (csh == 0)
      { csh = 23;
        csm = 59;
      }
      else {
        csh = csh - 1;
        csm = 59;
      }
    }
    else {
      csm = csm - 1;
    }
    refresh=1;
  }
  if (tp.x <= 860 && tp.x >= 770 && tp.y <= 630 && tp.y >= 510 && tp.z > 50)
  {
    if (llm == 0) {
      if (llh == 0)
      { llh = 23;
        llm = 59;
      }
      else {
        llh = llh - 1;
        llm = 59;
      }
    }
    else {
      llm = llm - 1;
    }
    refresh=1;
  }
  if (tp.x <= 860 && tp.x >= 770 && tp.y <= 790 && tp.y >= 680 && tp.z > 50)
  {
    if (clm == 0) {
      if (clh == 0)
      { clh = 23;
        clm = 59;
      }
      else {
        clh = clh - 1;
        clm = 59;
      }
    }
    else {
      clm = clm - 1;
    }
    refresh=1;
  };


  //Button to go back to home menu
  if (tp.x <= 680 && tp.x >= 400 && tp.y <= 900 && tp.y >= 820 && tp.z > 20)
  {
    Serial.print("We Made It !! \n"); //Just a serial print to let me know if all is ok
    a = 0; // a=0 allows to leave do while loop
  };
}


//Home screen

void ecran_home()
{
  //get_heure(h,m,s);    //Can't use it for the moment
  if (b == 1) // If we come from settings menu we have to display everything again.
  {
    myGLCD.fillScr(0, 0, 0);
    myGLCD.setColor(0, 250, 0);
    myGLCD.setColor(150, 0, 175);
    myGLCD.fillRect(100, 200, 220, 240);
    myGLCD.setColor(255, 255, 255);
    myGLCD.setBackColor(150, 0, 175);
    myGLCD.print("PARAMETRES", 130, 215);
    myGLCD.setBackColor(0, 0, 0);
  };
    myGLCD.setColor(255, 255, 255);
    myGLCD.printNumI(17, 140, 120, 2, "0");  //Supposed to be h
    myGLCD.print(":", 160, 120);
    myGLCD.printNumI(4, 180, 120, 2, "0");   //Supposed to be m
}


// Settings screen

void ecran_parametres()
{

  refresh=1;
  a = 1; //a is now 1 to let know in home menu that we come from settings screen

  do
  {
    if (refresh==1)
    {

     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ///////////////The Damn bug force the us of init and clear screen to modify the display..../////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      
     myGLCD.InitLCD(TOUCH_ORIENTATION);
     myGLCD.fillScr(0, 0, 0);


     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////


     //Drawing the 4 lines of buttons + and -
     Boutons(200, 30);
     Boutons(200, 80);
     Boutons(200, 130);
     Boutons(200, 180);

     //Drawing home button
     myGLCD.setColor(150, 0, 175);
     myGLCD.fillRect(100, 200, 220, 240);
     myGLCD.setColor(255, 255, 255);
     myGLCD.setBackColor(150, 0, 175);
     myGLCD.print("HOME", 148, 215);
     myGLCD.setBackColor(0, 0, 0);

     //Printing the different settings name
     myGLCD.print("Leve Soleil : ", 20, 30);
     myGLCD.print(":", 155, 30);
     myGLCD.print("Couche Soleil : ", 20, 80);
     myGLCD.print(":", 155, 80);
     myGLCD.print("Leve Lune : ", 20, 130);
     myGLCD.print(":", 155, 130);
     myGLCD.print("Couche Lune : ", 20, 180);
     myGLCD.print(":", 155, 180);

     //Printing the different settings value
     myGLCD.printNumI(lsh, 140, 30, 2, '0');
     myGLCD.printNumI(lsm, 170, 30, 2, '0');

     myGLCD.printNumI(csh, 140, 80, 2, '0');
     myGLCD.printNumI(csm, 170, 80, 2, '0');

     myGLCD.printNumI(llh, 140, 130, 2, '0');
     myGLCD.printNumI(llm, 170, 130, 2, '0');

     myGLCD.printNumI(clh, 140, 180, 2, '0');
     myGLCD.printNumI(clm, 170, 180, 2, '0');

     //Make refresh to 0
     refresh=0;
    
    };

    //If a button is pressed refresh goes to 1. And then all the display is refreshed. Because of the bug i can't modify just a line...
    detection_boutons();
    } while (a == 1);
}

baracuda33

Et la fin du code :
Code: [Select]
void setup() {
  //Init serial for diagnostics
  Serial.begin(9600);

  //Init wire and RTC lib // Can't use it because of the init bug...
  /*Wire.begin();
  rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  DateTime now = rtc.now();
  
  //Serial test on RTC
  m = int(now.minute());
  h = int(now.hour());
  s = int(now.second());
  Serial.print(h);
  Serial.print("\n");
  Serial.print(m);
  Serial.print("\n");*/

  //Initialising LCD
  pinMode(A0, OUTPUT);
  digitalWrite(A0, HIGH);
  myGLCD.InitLCD(TOUCH_ORIENTATION);
  myGLCD.clrScr();

  dispx = myGLCD.getDisplayXSize();
  dispy = myGLCD.getDisplayYSize();

 }
 
void loop() {
  b = 0;
  Serial.print("depart");

  //If we need to go to settings
  if (state == true)
  {
    Serial.print("boucle parametres");
    ecran_parametres();
    myGLCD.InitLCD(TOUCH_ORIENTATION);
    myGLCD.clrScr();
    b = 1;
  };
  Serial.print("boucle home");
  ecran_home();

  //Test if settings button is pressed while home screen is displayed
  state = menu_parametres();
  Serial.print(state);
}




On voit bien ou ça merde avec le problème de l'initialisation.Le bug avec RTC intervient au moment de l'initialisation du LCD Donc le premier menu est ok est dès qu'on change bam c'est le drame

fdufnews

Je serais curieux de savoir combien il reste de RAM libre à l'exécution de ton code?

baracuda33

Le croquis utilise 19840 octets (61%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
Les variables globales utilisent 713 octets (34%) de mémoire dynamique, ce qui laisse 1335 octets pour les variables locales. Le maximum est de 2048 octets.

fdufnews

Oui mais ça c'est les variables globales donc connues à la compilation. Les librairies peuvent allouer dynamiquement des tampons il faudrait faire afficher la taille mémoire à la fin du setup() les librairies ont généralement réalisés l'allocation de leurs buffer de travail. Voir là par exemple

baracuda33

Tu penses que mon bug viendrait d'un manque de mémoire d'allocation? J'ai fais des essais avec un code très très court juste l'affichage de l'heure sur l'écran et ça ne marche pas non plus j'ai le même problème. Je penses que c'est un soucis hardware, vu que le pin LCD_RST du shield est sur un pin SDA par lequel passe également le signal de la pile RTC.

J'utilise pas de resistance pull up et je n'y connais rien la dedans :(

Go Up