[bug] LCD + Carte SD = caractères bizarres

Hellow,

Je suis nouveau sur le forum, donc bonjour a tous :slight_smile:

Je vais attaquer le vif du sujet : J’ai un Ecran LCD (Nokia 5110), un lecteur SD, et un kit RTC, un peu comme sur ce topic là :

Les trois fonctionnent individuellement très bien avec les librairies conseillées, donc :
Ecran → Adafruit_PCD8544.h et Adafruit_GFX.h
SD → SD.h et SPI.h
Et le kit RTC n’est pas trop important car il n’a pas d’influence sur le problème que je rencontre.

#include <SD.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Wire.h>
#include "RTClib.h"




Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
File myFile;
int trolol = 10000;
String prout = "testouille";
void setup()
{
  Serial.begin(9600);
  display.begin();
  display.setContrast(50);
  display.clearDisplay();
  
  Serial.print("Initializing SD card...");
  SD.begin(10);

//  if (!SD.begin(10)) {
//   Serial.println("initialization failed!");
//    return;
//  }
  Serial.println("initialization done.");
 
 Serial.println(trolol);
 Serial.println(prout);
    
   
 myFile = SD.open("heures.txt", FILE_WRITE);
    
if(SD.exists("heures.txt")) {
    Serial.println("ce fichier existe");
  } else{ 
    Serial.println("ce fichier existe pas");
}
  

 
myFile.close();


}

void loop()
{
display.clearDisplay();
display.println(trolol);
display.println(prout);
display.display();
  
}

(Oui, je débug a coup de prout et de trolol)
Donc avec ça le serial me dit :

Initializing SD card...initialization done.
10000
testouille
ce fichier existe

Jusque là, aucun problème me direz-vous :slight_smile:
Sauf que sur l’écran, ce qui se passe est assez déroutant…

Voilà… Et là, c’est le résultat le plus positif que j’ai réussi a avoir puisque le serial n’est pas bugué, en changeant l’ordre des lignes (qui normalement peuvent être changées, jsuis pas idiot, enfin jpense pas), le serial peut se retrouvé complètement parasité de signes que je connaissais pas (comme sur la photo), le setup de répète en boucle avec des symboles spéciaux bizarres, ou encore, ça vide tous les Strings tout simplement, j’ai jamais eu affaire a un bug de ce type dans toute ma courte vie :o
Par contre si j’enlève tout c’qui est relatif a la carte SD, ça fonctionne, sauf que j’ai besoin de la carte SD moi…

A priori il ne s’agit pas d’un problème de SPI puisque que j’en utilise deux différents (le 4 pour l’écran et le 10 pour la SD).
Je viens donc vous demander de l’aide, même si j’ai peu (très peu) d’espoir de trouver une solution rationnelle a ça… Mais je garde le moral d’avoir un coup de chance :slight_smile:

J’ai pensé a un truc pour contourner le problème mais je ne sais pas comment faire en c++ : ça serait de dupliquer l’objet String (c’est bien un objet ?) et de m’en servir dans mon code, quitte a laissé la vraie fonction String buguée.

Merci a vous ! :slight_smile:

Bonjour,

Est-ce que l’exemple “hello world” de base marche avec l’écran (sans RTC, carte SD ou autre) ?

Yup Hello world marche, de plus si je fais display.println("hello !"); ça fonctionne correctement, par contre String test = "hello !"; display.println(test); n'affiche rien, c'est vraiment les Strings qui sont plantés ...
Je me renseigne depuis tout a l'heure, il y aurait peut être un problème au niveau du port bus/SPI ? j'ai un peu du mal a comprendre mais vu que ça marche individuellement mais pas ensemble peut être que c'est lié ^^

Les String c'est la merde, mais de là à faire planter un programme aussi simple ...

Niveau câblage ça dit quoi ?
Montre tes deux codes de test avec "Hello !" (sans RTC, SD, ou autre).

Alors le truc c’est que sans les trucs de la carte SD ça fonctionne bien justement ^^’

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
String hello = "hello world !"; 

void setup()   {
  
Serial.begin(9600);
Serial.println(hello);

  display.begin();
  display.setContrast(60);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  

}


void loop() {

display.clearDisplay();
//code 1 :
display.println(hello);
//code 2: 
//display.println("hello world !");
display.display();
}

C’est quand j’ajoute les librairies de la carte SD que ça se met a planter :slight_smile:

niveau cablage :



(avec les pins dans l’ordre : [GND] [MISO] [SCK] [MOSI]

 [5V] [3.3V] {[GND]} )

Mentalement tu fais un ptit mix des deux ;)

En fait mon vrai programme est clairement plus complexe, mais j'ai viré tout ce qu'était inutile pour l'exemple, et ça bug quand meme :(

Il te reste quoi comme mémoire avec toutes les librairies ?
http://playground.arduino.cc/Code/AvailableMemory

environ 10000 octets ^^ ça me donne l'espace restant a chaque transfert et j'ai l'oeil dessus :wink:

Si ça ne marche plus quand la librairie SD est chargée c'est que tu manques de mémoire RAM.
Tu va devoir faire le ménage dans le code, utiliser des librairie moins gourmandes, ou passer sur une Mega2560.

matruck:
environ 10000 octets ^^ ça me donne l'espace restant a chaque transfert et j'ai l'oeil dessus :wink:

Mémoire RAM et mémoire Flash c'est pas du tout la même chose.
Tu as 2048 octets de mémoire RAM et ~28K octets de mémoire flash sur une UNO.
Ce que t'affiches à la compilation l'ide c'est la mémoire flash.