Arduino Mini + Carte SD + LCD + GPS = Plantage?!

Bonjour bonjour!

Alors voila, je viens vous exposer un problème qui me fait m'arracher les cheveux depuis quelques temps.

Je cherche à faire un traceur GPS a base d'Arduino mini.
En gros le principe est simple, le GPS envoie une trame, celle-ci est enregistrée sur un fichier TXT de la carte SD et les donnée de cette même trame sont décortiquées pour étres affichées sur un ecran LCD.
Voila ce que ca donne (Oui alors désolé, je suis encore novice en codage, c'est peut-ètre pas super clair ce que je fait):

#include <SoftwareSerial.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <TinyGPS.h>
#include <SD.h>

SoftwareSerial ss(8, 9); //ss(TX, RX)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

File sdfile;
TinyGPS gps;
Sd2Card card;
SdVolume volume;
SdFile root;

const int chipSelect = 10; 
static char filename[13];
static bool fileOpened = false;



bool openSDFile()
{
    // open log file
    for (unsigned int index = 0; index < 65535; index++) 
    {
        char filename[16];
        sprintf(filename, "GPS%05d.TXT", index);
        display.clearDisplay();  
        display.println("Nouvelle trace");
        display.println(filename);
        display.display();
        if (!SD.exists(filename)) 
        {
            sdfile = SD.open(filename, FILE_WRITE);
            if (sdfile) 
            {
                display.print("ajoutee!"); 
                display.display();
                delay(2000);
                return true;
            }
            display.print("Impossible de creer un fichier");
            display.display();
            break;
        }
    }
    return false;
}





void setup()
{
  Serial.begin(115200); 
  ss.begin(9600);          
  
  pinMode(10, OUTPUT);
  
  display.begin(); //initialisation ecran
  display.setContrast(50);
  display.display(); // shw splashscreen
  delay(1000);
  display.clearDisplay();   // clears the screen and buffer
  
  if (!card.init(SPI_HALF_SPEED, chipSelect)) 
  {
      display.clearDisplay();      
      display.println("Carte SD      introuvable");
      display.display(); 
      delay(3000);
      return;
   } 
   else 
   {
        display.clearDisplay();   
        display.println(" "); 
        display.println("Carte SD OK."); 
        display.display(); 
        delay(2000); 
         
        if (SD.begin(10)) 
        {
            fileOpened = openSDFile();
        } 
        // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
        if (!volume.init(card)) 
        {
             display.println("Partition FAT introuvable");
             display.display();  // shw splashscreen
             delay(3000);
             return;
         }
    }
}


void loop()
{  
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;
  static int byteCount = 0;
  static unsigned long lastTime = 0;
  static unsigned int recDataKB = 0;
  
  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
       char c = ss.read(); 
       if (fileOpened) 
       {
         sdfile.write(c);
         if (++byteCount >= 1024) 
         {
              // flush to file every 1KB
              sdfile.flush();
              byteCount = 0;
              recDataKB++;
         }
       }    
       if (gps.encode(c)) // Did a new valid sentence come in?
             newData = true;
    }

  }

   

  if (newData)
    {
    float flat, flon;    
    unsigned long age;
    gps.f_get_position(&flat, &flon,  &age);
   
    display.clearDisplay();  
    display.setTextSize(1);
    display.setTextColor(BLACK);
    display.setCursor(0,0);
    display.print("Lat:");
    display.println(flat);
    display.print("Lon: ");
    display.println(flon);
    display.display(); 
    }
}

le code marche très bien avec une Arduino Mega. Seulement voila impossible de le faire fonctionner correctement sur une Mini Pro 3.3v 8MHz.

Soit le code se fige au moment de créer un nouveau fichier sur la carte SD (dans la fonction OpenSDfile) soit il m'affiche "Impossible de creer un fichier"
Donc la je me dit, c'est la carte SD qui déconne ou même la fonction OpenSDfile... (chose étonnante car elle marche très bien sur la Mega)

J'ai donc essayer d'enlever tout ce qui gérait l'ecran LCD pour ne laisser que la carte SD qui enregistre la trame du GPS, ce qui donne a peu près ceci:

#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <SD.h>

SoftwareSerial ss(8, 9); //ss(TX, RX)

TinyGPS gps;
File sdfile;
Sd2Card card;
SdVolume volume;
SdFile root;

const int chipSelect = 10; 
static char filename[13];
static bool fileOpened = false;



bool openSDFile()
{
    // open log file
    for (unsigned int index = 0; index < 65535; index++) 
    {
        char filename[16];
        sprintf(filename, "GPS%05d.TXT", index);
        Serial.print("Nouvelle trace");
        Serial.println(filename);
        if (!SD.exists(filename)) 
        {
            sdfile = SD.open(filename, FILE_WRITE);
            if (sdfile) 
            {
                Serial.print("ajoutee!"); 
                delay(2000);
                return true;
            }
            Serial.print("Impossible de creer un fichier");
            break;
        }
    }
    return false;
}





void setup()
{
  Serial.begin(115200); 
  ss.begin(9600);          
  
  pinMode(10, OUTPUT);
 
  if (!card.init(SPI_HALF_SPEED, chipSelect)) 
  {
      Serial.print("Carte SD      introuvable");
      delay(3000);
      return;
   } 
   else 
   {       
        Serial.print("Carte SD OK.");  
        delay(2000); 
         
        if (SD.begin(10)) 
        {
            fileOpened = openSDFile();
        } 
        // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
        if (!volume.init(card)) 
        {
             Serial.print("Partition FAT introuvable");
             delay(3000);
             return;
        }
    }
}


void loop()
{  
  bool newData = false;
  unsigned long chars;
  unsigned short sentences, failed;
  static int byteCount = 0;
  static unsigned long lastTime = 0;
  static unsigned int recDataKB = 0;
  
  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
       char c = ss.read(); 
       if (fileOpened) 
       {
         sdfile.write(c);
         if (++byteCount >= 1024) 
         {
              // flush to file every 1KB
              sdfile.flush();
              byteCount = 0;
              recDataKB++;
         }
       }    
       if (gps.encode(c)) // Did a new valid sentence come in?
             newData = true;
    }

  }
  
}

Et la, ca marche. J'ai bien ma trame qui s'enregistre sur la carte et je peux voir dans la console qu'il arrive bien a passer la fonction OpenSDfile.

Donc la je me dit, c'est l'affichage sur l'ecran LCD qui déconne

Donc j'essaye cette fois ci le code sans enregistrement sur carte SD mais avec l'affichage:

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

SoftwareSerial ss(8, 9); //ss(TX, RX)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
TinyGPS gps;



void setup()
{
  Serial.begin(115200); 
  ss.begin(9600);          
 
  display.begin(); //initialisation ecran
  display.setContrast(50);
  display.display(); // shw splashscreen
  delay(1000);
  display.clearDisplay();   // clears the screen and buffer
  
}

void loop()
{  
  bool newData = false;
  
  // For one second we parse GPS data and report some key values
  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
       char c = ss.read();                  
       if (gps.encode(c)) // Did a new valid sentence come in?
             newData = true;
    }

  }

   

  if (newData)
    {
    float flat, flon;    
    unsigned long age;
    gps.f_get_position(&flat, &flon,  &age);
   
    display.clearDisplay();  
    display.setTextSize(1);
    display.setTextColor(BLACK);
    display.setCursor(0,0);
    display.print("Lat:");
    display.println(flat);
    display.print("Lon: ");
    display.println(flon);
    display.display(); 
    }
}

Et la, bha bien sur ca marche....
Du coup, je sais plus trop quoi me dire...
D'autant plus que ca marche avec la Mega. Vous pensez que ce puisse être la Mini que est trop lente (8MHz contre 16 pour la Mega il me semble)
J'arrive vraiment a rien, je vois pas ou j'ai faux =(
Pour info, le GPS est configuré en 9600bauds et envoie une trame par seconde (1Hz).

En esperant que vous pourrez m'aider.

Merci!!

D'autant plus que ca marche avec la Mega. Vous pensez que ce puisse être la Mini que est trop lente (8MHz contre 16 pour la Mega il me semble)

Ou alors la mémoire saturée.
La Mini c'est un ATmega 328 au mieux donc c'est 2K de RAM
La Mega c'est un ATmega 2560 donc c'est 8K de RAM

Sachant que les librairies d'affichage et de gestion de SD sont assez gourmandes en mémoire.
Moi je vérifierais la mémoire disponible avant de me poser plus de questions. Arduino Playground - HomePage

Bonjour,

La librairie SD laisse ~680 octets de RAM libre sur une carte Arduino classique.
Alors avec la lib LCD et GPS il est quasi sûr et certain que la RAM disponible passe dans le négatif :wink:

En plus tu as des chaines de caractères en RAM ("blabla") et non en flash (F("blabla")) donc ça aggrave encore les choses.

Le lecteur de carte SD utilise le port SPI, well habituellement.

Ce que j'ai besoin de savoir, est-ce que ton lcd est du type TFT?

Si c'est le cas, est-ce que tu le fais fonctionner sur n'importe quel pin digital ou sur le port spi particulièrement. La nouvelle version de l'IDE de Arduino offre des exemples pour faire fonctionner l'affichage sur le port SPI ce qui offre l'avantage de couper sur certaine bibliothèque. Qui sait tu pourrais sauver quelques octet et réussir à faire fonctionner ton truc.

Autrement, plus radicale, si tu planifies ne faire que de texte avec ton affichage, tu pourrais également manuellement aller couper dans le gras les fonctions graphiques de l'affichage dans ta bibliothèque. Dans ce cas là tu pourrais également trouver quelques octets.

Une autre solution de plus c'est de te trouver une bibliothèque pour carte SD plus légère, où tout les fonctions ne seront pas présentent dans la bibliothèque.

Je crois que ça résume pas mal tes options.

bonjour!

La librairie SD laisse ~680 octets de RAM libre sur une carte Arduino classique.
Alors avec la lib LCD et GPS il est quasi sûr et certain que la RAM disponible passe dans le négatif

Effectivement: pour le code GPS+SD j'obtient 631o de libre. Pour celui avec GPS+LCD je suis à 895 de libre.

Et pour le GPS+SD+LCD, pas moyen de savoir, ca plante au moment de passer sur la fonction MemoryFree, mais en enlevant deux ou trois truc dans la fonction loop, j'arrive à lire 70o de libre. Donc vous devez avoir raison, je suis surement dans le négatif...

C'est donc l'ATmega 328 qui me limite? Donc en gros, pas moyen de trouver une petite carte Arduino plus puissante? Même la UNO fonctionne avec le 328 il me semble...

Donc du coup, apparement vous dites que je peux essayer de gratter sur les librairies?

Ce que j'ai besoin de savoir, est-ce que ton lcd est du type TFT?

Si c'est le cas, est-ce que tu le fais fonctionner sur n'importe quel pin digital ou sur le port spi particulièrement.

Le port SPI c'est bien celui sur les pin 10/11/12/13? si c'est ca je m'en sert deja pour la carte SD.
Voila ce que j'ai comme écran:
http://www.adafruit.com/products/338&usg=ALkJrhhO02vNc5jGoPK0LytV73ykEZlyQg
Et je le branche sur les pin indiqué dans l'exemple fourni avec la librairie, à savoir:

pin 7 - Serial clock out (SCLK)
pin 6 - Serial data out (DIN)
pin 5 - Data/Command select (D/C)
pin 4 - LCD chip select (CS)
pin 3 - LCD reset (RST)

Sinon, je voulait a la base changer d'ecran pour un Oled à liaison I2C:
http://www.adafruit.com/products/326&usg=ALkJrhh6L3lRqewPv8ebBy2-g5htnqJgPQ

Mais je ne sais pas si ca peut arranger les choses ou si au contraire, ca va encore plus me diminuer la place dispo?

Une autre solution de plus c'est de te trouver une bibliothèque pour carte SD plus légère, où tout les fonctions ne seront pas présentent dans la bibliothèque.

Bon ben je vais regarder à ça, mais sinon je peux pas modifier la bibliothèque moi même et retirer a la main les fonctionne dont je ne me sert pas?

Je crois que ça résume pas mal tes options.

Ben merci! j'avais un peu peur que ma seul solution soit de changer de carte Arduino...

Le port SPI c'est bien celui sur les pin 10/11/12/13? si c'est ca je m'en sert deja pour la carte SD.

Tu peux brancher plus qu'un truc sur le Port SPI. Tous tes devices vont partager les pins 11, 12 et 13. C'est juste que le CS (pin 10 dans le cas de ta Carte SD) ne sera pas le même.

Moi perso, je branche Facilement la carte SD(Pin 10 ) un émetteur/récepteur NRF24(pin 9 et 8 ) et un Enc28(pin 7)

L'important c'est que tous tes esclaves ne parlent pas au maître en même temps. c'est pourquoi il y a les pin CS(chip select) ou SS(slave select).

Je t'invite à te documenter un peu sur le port SPI pour en tirer un max.

Alors assez facilement, si tu regardes l’exemple de l'IDE, http://arduino.cc/en/Tutorial/TFTPong, tu peux brancher ta carte SD et ton écran. C'est juste que les pins ne porterons pas les noms usuels.

Plutot que:                                       Utilise: 
pin 7 -       Serial clock out (SCLK)             ->Pin 13(SCLK)
pin 6 -       Serial data out (DIN)               ->Pin 11(MOSI)
pin 5 -       Data/Command select (D/C)
pin 4 -       LCD chip select (CS)
pin 3 -       LCD reset (RST)

La pin 12(MISO) dans ce cas n'est pas utilisée dans le cas de l'écran tft car c'est un output seulement.

Une chose est certaine, c'est que si tu opères ton écran en mode SPI, il va rouler pas mal plus vite et tu économiseras sur les librairies, et sur les pins disponible.

J’espère que ça aide un peu.

LeDahu:
C'est donc l'ATmega 328 qui me limite? Donc en gros, pas moyen de trouver une petite carte Arduino plus puissante? Même la UNO fonctionne avec le 328 il me semble...

Bah si la Mega ...

Bah si la Mega ...

Je crois que ce qu'il veut avant tout, c'est que ce soit tout petit, le pourquoi du mini, Alors que la Méga est énorme. :wink: La mini a le format d'une puce alors que les Arduinos style Uno et Méga, well tu comprends ce que je veux dire.

L'autre truc que tu pourrais essayer, c'est de te trouver une mini 16mhz. Il en pleut sur le marché et à prix plus que raisonnable. Je ne sais pas si ton problème est celui de la vitesse mais plus ton Arduino peut faire d’opération à la seconde, mieux c'est.

Merci Frédéric_Plante, j'ai a peu près compris le principe, mais je dois me planter quelque part étant donné que ca m'affiche n'importe quoi.

Sii j'ai bien compris, dans mon code la définition de l'écran:

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

devient donc

Adafruit_PCD8544 display = Adafruit_PCD8544(13, 11, 5, 4, 3);

et donc je branche les pin 13 et 11 en commun avec la SD, c'est ça?

Mais est ce que je dois définir la pin 4 (CS) en sortie? (comme on le fait pour la pin 10 pour la carte SD)
Et est ce que je dois definir la librairie "SPI"?

J'ai donc essayer, j'ai remplacé les pin 7 et 6 par 13 et 11:
J'obtient bien l'affichage si je lance le code d'exemple de la librairie de l'écran LCD, mais régulièrement elle "saute" (des carrés noirs viennent s'ajouter à l'affichage et l'image s'affiche mal).

Si je lance mon code initial, ca reste bloqué à l'initialisation de l'écran.
Le truc, c'est que ca reste aussi bloqué à ce niveau si je lance le code GPS+LCD (sans SD) (le 3eme code de mon premier post) alors que ce code marche bien si je branche l'ecran comme je le faisait au début....
Donc je suppose que je me suis planté quelque part...?

L'autre truc que tu pourrais essayer, c'est de te trouver une mini 16mhz. Il en pleut sur le marché et à prix plus que raisonnable. Je ne sais pas si ton problème est celui de la vitesse mais plus ton Arduino peut faire d’opération à la seconde, mieux c'est.

Oui, mais je crois que ces carte n'existent que en 5v. Et comme tu l'a bien dit, je cherche à ce que se soit le plus petit possible.
Et tout ce que je branche sur l'arduino fonctionne en 3v, donc si je prend une 5v, je serait obliger de placer (et surtout de câbler!)en plus des buffers.
Mais bon disons que si c'est la seul solution, c'est ce que je ferait.

Sii j'ai bien compris, dans mon code la définition de l'écran:

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

devient donc

Adafruit_PCD8544 display = Adafruit_PCD8544(13, 11, 5, 4, 3);

et donc je branche les pin 13 et 11 en commun avec la SD, c'est ça?

T'as partiellement raison. Et ton questionnement suivant:

Si je lance mon code initial, ca reste bloqué à l'initialisation de l'écran.
Le truc, c'est que ca reste aussi bloqué à ce niveau si je lance le code GPS+LCD (sans SD) (le 3eme code de mon premier post) alors que ce code marche bien si je branche l'ecran comme je le faisait au début....
Donc je suppose que je me suis planté quelque part...?

Est totalement justifié. La librairie Adafruit_PCD8544 n'exploite pas le port SPI, alors c'est totalement certain qu'il y aura conflit avec ta librairie SDCard.

Je te renvois vers un autre example de l'IDE qui utilise la carte SD pour envoyer une image dans l'écran tft.

http://arduino.cc/en/Tutorial/TFTBitmapLogo

comme on peut voir:

Code
To use the screen you must first include the SPI and TFT libraries. You also need to include the SD library to read the image from the card.

#include <SD.h>

#include <SPI.h>
#include <TFT.h>

Ou si tu préfères, l'IDE fournit la librairies SD et la librairie TFT je te conseille d'utiliser ceux-ci

Ensuite, ils disent ceci:

#define sd_cs  4
#define lcd_cs 10
#define dc     9
#define rst    8  

TFT TFTscreen = TFT(cs, dc, rst);

En d'autres termes, tu n'auras pas besoin de déclarer ce qui se passe aux pin 11,12 et 13, puisque que c'est la librairies SPI qui s'occupe de tout ça. Cependant, tu es totalement libre de changer les CS de ta carte SD et de ton écran pour que ça reflète tes besoins hardware. Tu n'as qu'à ajuster les lignes de code plus haut pour qu'elle représentent la réalité.

Ne lâche pas chef, t'auras probablement à ajuster un peu ton code d'origine, mais j'ai bonne espoir, tu sembles être un acharné. :wink:

Finalement, si je peux me permettre une recommandation, fais le tour du nouveau site d’exemple Arduino, http://arduino.cc/en/Tutorial/HomePage c'est bourré de plus d'astuce que tu peux imaginer. On est rendu loin des exemples de base

Si il y a d'autre soucie, fais moi signe.

Frédéric_Plante:

Bah si la Mega ...

Je crois que ce qu'il veut avant tout, c'est que ce soit tout petit, le pourquoi du mini, Alors que la Méga est énorme. :wink: La mini a le format d'une puce alors que les Arduinos style Uno et Méga, well tu comprends ce que je veux dire.

L'autre truc que tu pourrais essayer, c'est de te trouver une mini 16mhz. Il en pleut sur le marché et à prix plus que raisonnable. Je ne sais pas si ton problème est celui de la vitesse mais plus ton Arduino peut faire d’opération à la seconde, mieux c'est.

Il faut passer à la "concurrence" alors, teensy 3 par exemple. Avec 16k de RAM et un MCU 32-bits il devrait être content :smiley: et je pense qu'il devrait trouver toutes les librairies nécessaires

EDIT : GPS et SD semblent OK, il n'y a que l'écran qui semblent n'est pas mentionner, mais vu que la librairie Arduino utilise des fonctions basiques, il se peut qu'elle fonctionne sans modif Teensyduino: Using Arduino Libraries with Teensy USB development board

Ouais je seconde pour ce que est du Teensy 3 et comme on peut voir ici:

http://www.pjrc.com/teensy/index.html

Le truc roule sur 3,3volts Ça pourrait être une bonne solution en soit.

il n'y a que l'écran qui semblent n'est pas mentionner,

Ça importe peu, j'ai vue des gens qui roulait sous la Librairie UTFT. Et UTFT a pas mal mis la main à la pâte pour toucher à tout les écrans sur le marché, dont ceux qui roulent sous PCD8544.

Donc ouais...

Et pour ce qui est du GPS, on voit qu'il y a 3 ports série. Dans le fond un gps c'est pas mal indépendant comme module, suffis de le brancher sur un port série et d'écouter ce qu'il raconte. Alors je ne crois pas que ce serait un problème de toute façon.

Et Il y a un SPI alors la carte SD peut facilement rouler en effet. Mais dans tous les cas, le comment créer une bibliothèque SD est sur-documenté sur le net alors...

Bon ca y est, j'ai enfin réussi a télécharger l'IDE Arduino 1.0.5 pour avoir accès a la librairie TFT.
Du coup j'ai pus avoir accès aux exemples fournis avec et je dois avouer que ca aide pas mal à comprendre... Malheureusement, je n'arrive toujours pas à faire fonctionner mon écran.

Pour voir d'ou venait le problème, j'ai d'abords chargé ce premier programme (que l'ecran, sans SD): http://arduino.cc/en/Tutorial/TFTDisplayText
Voila pour le branchement que je fait:

Ecran LCD => Arduino
RST => 8
CS => 10
DC => 9
Din => 11
Clk => 13

Et j'obtient un ecran tout noir, c'est tout.

J'ai aussi essayer les autres codes (avec carte SD) donc un adaptant le branchement. Et cette fois ci, il y a carrement rien qui ne s'affiche...

Mais du coup, quand tu disait:

Ce que j'ai besoin de savoir, est-ce que ton lcd est du type TFT?

Bha... en faite je sais pas. Je crois pas finalement.
Parce que le problème a l'air de venir de là, non?

Et j'obtient un ecran tout noir, c'est tout.

Je ne peux m’empêcher de te demander si t'as branché ta DEL de fond d'écran(back light)???

http://www.adafruit.com/products/338http://www.adafruit.com/products/338

Si c'Est ton écran ou équivalent, ne perds plus ton temps c'est pas tft.

Sérieux, quand on considère que l’exemple qui utilise la carte SD et l'écran pour faire loader une image de la carte SD, ce qui est assez pesant comme procédé, pèse 24k et que t'as 30k sur la mini, Et que l’exemple du software serial ne pese que 4k Je pense que ça veut dire qu'en théorie pognes toi un écrans tft tu vas¸ être capable de tout runné si tu fais ta propre routine de gps pour analiser les phrase nmea.

Mais va falloir que tu grattes en masse.

Alors je dirais simplement, ne perd pas espoirs mais change d'écran.

Sans vouloir faire de pub, j'ai fait fonctionner la librairies officielle Arduino ces écrans là:

http://www.aliexpress.com/item/Factory-direct-sale-1-8-Serial-128X160-SPI-TFT-LCD-Module-Display-PCB-Adapter-with-SD/932024750.html

Je ne te dis pas d'acheter là ou ceux là. Mais bon ça te donnes une idée.

Salut!

Si c'Est ton écran ou équivalent, ne perds plus ton temps c'est pas tft.

Oui c'est bien mon ecran et effectivement, je me suis rendu compte qu'il n'était pas TFT;

Sérieux, quand on considère que l’exemple qui utilise la carte SD et l'écran pour faire loader une image de la carte SD, ce qui est assez pesant comme procédé, pèse 24k et que t'as 30k sur la mini,

Ouai mais de toutes facon c'est pas cette mémoire ci qui pose problème, si? C'est pas plutot la RAM?
Parceque pour la mémoire de 30k, lorsque je compile le gros sketch qui plante, ca m'affiche encore 27k sur 30k. Donc la dessus je suis encore bon??

Alors je dirais simplement, ne perd pas espoirs mais change d'écran.

Mouai mais la consommation d'un ecran comme le mien se compte en uA il me semble. Alors que pour un TFT il ca tourne à une 40aine de mA je crois... mais bon si je ne trouve pas d'autre solution...

J'ai changé la librairie SD que j'utilisait pour la SDfat. Elle est beaucoup plus complète au niveau des fonctions mais soit disant plus légère pour la RAM; Effectivement, en compilant le sketch SD+GPS (sans écran)avec la libraire SDfat je gagne 50o de mémoire RAM. Mais je sais pas si c'est vraiment significatif... En tout cas, ce n'est pas suffisant pour que j'arrive a lancer le programme SD+GPS+LCD.

Sinon,je pense que je vais en faite changer de carte arduino.
Etant donné que je vais devoir faire mon propre circuit imprimé, je me demande si j'ai pas plus rapide d'acheter directement juste un µControler avec plus de RAM et de fabriquer directement ma propre "arduino", en plus, ca ferait un vrai gain de place!
J'espère juste que je pourrait téléverser mon programme tel qu'il est directement sur un autre µC (sans avoir a tout recoder, en gardant les mêmes librairies)
Je vais me renseigner la dessus. Vous pensez que c'est une bonne idée, et ya un µC a privilégier? Ou au moins, une idée de la RAM que je devrait prendre?

En tout cas merci à vous, je pense que vous m'avez fait faire le tour de toutes les options qui s'offrent a moi!