Problème avec lib SD.h et ecran oled

Bonjour
Quand je met la partie Sd avec SD.h... dans le moniteur j'ai Erreur de communication avec le chipset
Quelqu'un peut me dire comment je peut faire ?

#include "TinyGPS++.h"

#include <SoftwareSerial.h>

// OLED
#include <SPI.h>
#include <Wire.h>

#include <Adafruit_SSD1306.h>


#define nombreDePixelsEnLargeur 128         // Taille de l'écran OLED, en pixel, au niveau de sa largeur
#define nombreDePixelsEnHauteur 64          // Taille de l'écran OLED, en pixel, au niveau de sa hauteur
#define brocheResetOLED         -1          // Reset de l'OLED partagé avec l'Arduino (d'où la valeur à -1, et non un numéro de pin)
#define adresseI2CecranOLED     0x3C        // Adresse de "mon" écran OLED sur le bus i2c (généralement égal à 0x3C ou 0x3D)

Adafruit_SSD1306 ecranOLED(nombreDePixelsEnLargeur, nombreDePixelsEnHauteur, &Wire, brocheResetOLED);

//Broche de la carte sd Mosi Miso sur le nano en d11 et d12, Sck sur D13 du nano 
const int chipSelect = 10;// pin CS

//Pin du gps
static const int RXPin = 4, TXPin = 5;
static const uint32_t GPSBaud = 9600;

// The TinyGPSPlus object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

// Carte SD
#include <SD.h>
File monFichier;
int compteur = 0;
const int maxcompteur = 20; // 20 mises à jour du GPS sont nécessaire pour produire un enregistrement sur la carte SD

void setup()
{
   Serial.begin(115200);
    // initialisation de l'écran OLED
  if(!ecranOLED.begin(SSD1306_SWITCHCAPVCC, adresseI2CecranOLED)){
    Serial.println(F("Erreur de communication avec le chipset SSD1306… arrêt du programme."));
    while(1);                                             // Arrêt du programme (boucle infinie)
  }

  byte tailleDeCaractere = 2; // Taille des caractères (1:1, puis 2:1, puis 3:1)

  //config ecran
  boolean bCouleurInverse = false;
    ecranOLED.clearDisplay();                                   // Effaçage de l'intégralité du buffer
    ecranOLED.setTextSize(tailleDeCaractere);                   // Taille des caractères (1:1, puis 2:1, puis 3:1)
    ecranOLED.setCursor(0, 0);                                  // Déplacement du curseur en position (0,0), c'est à dire dans l'angle supérieur gauche
    
   
     ecranOLED.println("Console GPS");
     ecranOLED.display();
}


void loop()
{

}

j'ai essayer avec la lib u8g2 mais simplement en le televerser = 110% mémoire pleine.
en mettant tout mon programme avec Adafruit_SSD1306, je suis à 98% mais ne fonctionne pas avec le lib SD
l'arduino est un nano... quelqu'un connait une lib hyper légère pour le oled ?

Est-ce bien la bonne adresse. A vérifier avec I2Cscanner.

oui c'est bien la bonne adresse, en mettant l'exemple Adafruit, ou si j'enlève la partie du sd ça fonctionne

Pas surprenant, la librairie d'Adafruit utilise plus de la moitié de la mémoire RAM pour loger son buffer d'image. Si tu ajoutes à ça le buffer créé par la librairie SD il ne doit pas rester grand chose.
Si tu n'affiches que du texte il y a ça:

il y a aussi

avec le lib SSD1306Ascii = 68% et pas de pb avec le SD.
merci :slight_smile:

bon j'ai encore un problème et comprend pas.
si je téléverse mon prog gps = l'écran est noir...sans rien débrancher, je téléverse un exemple de la lib = écran fonctionne.
Toujours sans rien débrancher: je re-téléverse le prog gps et la c'est bon.
Je débranche et rebranche = écran noir.
J'ai fait la même chose avec l'exemple = écran fonctionne
je ne vois vraiment pas ce qui cloche une idée ?
prog complet

#include "TinyGPS++.h"

#include <SoftwareSerial.h>

// OLED
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

// 0X3C+SA0 - 0x3C or 0x3D
#define I2C_ADDRESS 0x3C

// Define proper RST_PIN if required.
#define RST_PIN -1

SSD1306AsciiWire oled;

//Broche de la carte sd Mosi Miso sur le nano en d11 et d12, Sck sur D13 du nano 
const int chipSelect = 10;// pin sur CS


//Pin du gps
static const int RXPin = 4, TXPin = 5;
static const uint32_t GPSBaud = 9600;

// The TinyGPSPlus object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);

// Pour arreter le module gps avec un transistor
const int gpsPin = 8;

// Carte SD
#include <SD.h>
File monFichier;
int compteur = 0;
const int maxcompteur = 20; // 20 mises à jour du GPS sont nécessaire pour produire un enregistrement sur la carte SD

void setup()
{
   Serial.begin(115200);
  Wire.begin();
  Wire.setClock(400000L);

#if RST_PIN >= 0
  oled.begin(&SH1106_128x64, I2C_ADDRESS, RST_PIN);
#else // RST_PIN >= 0
  oled.begin(&SH1106_128x64, I2C_ADDRESS);
#endif // RST_PIN >= 0

  oled.setFont(Adafruit5x7);

  uint32_t m = micros();
    oled.clear();
  oled.println("Demarrage");
    
    pinMode(gpsPin, OUTPUT);
  digitalWrite(gpsPin, HIGH); //lancer le gps
  
/* exemple grandeur ecriture
  oled.set2X();
  oled.println("2X demo");
  oled.set1X();
  oled.print("\nmicros: ");
  oled.print(micros() - m);
 */

  oled.clear();
  oled.println("Informations :");


  // initialisation du lecteur de carte SD
  if (!SD.begin(chipSelect)) {  
   oled.print("Echec SD");
    while (1); // on arrete tout
  } else 
  oled.print("Carte SD OK  ");
  
  // initialisation de la communication série avec le module GPS
  ss.begin(GPSBaud);
   delay(2000);
}

void loop()
{
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS dtected: check wiring."));

  oled.clear();
  oled.println("Informations :");
  oled.println("Gps Non detecte :");
  oled.println("Verifier Fil");
    while(true);
  }
}

void displayInfo()
{
  Serial.print(F("Location: ")); 
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
    oled.clear();
    oled.println(F("Localisation: "));  
    oled.print(gps.location.lat(), 6);
    oled.print(F(","));
    oled.print(gps.location.lng(), 6);
  }
  else
  {
    Serial.print(F("INVALID"));
    oled.print("PB localisation");
  }

 
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());

    oled.print(gps.date.month());
    oled.print(F("/"));
    oled.print(gps.date.day());
    oled.print(F("/"));
    oled.print(gps.date.year());
  }
  else
  {
    Serial.print(F("INVALID"));
    oled.clear();
    oled.print("Date Non valide");
  }

  Serial.print(F(" "));
  oled.print(" ");
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));

    oled.print(gps.time.hour());
    oled.print(F(":"));
    oled.print(gps.date.year());
    
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));

    oled.print(gps.time.minute());
    oled.print(F(":"));
    
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));

    oled.print(gps.time.second());
    oled.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
    oled.print(gps.time.centisecond());

  }
  else
  {
    Serial.print(F("INVALID"));
    oled.print(F("Temps non valide "));
  }

  Serial.println();
  oled.println();

    // enregistrement sur carte SD

  if ((gps.location.isValid()) && (compteur > maxcompteur)) {
    compteur = 0;
    // ouverture (ou création) du fichier "TRAJET.CSV")
    monFichier = SD.open("TRAJET.CSV", FILE_WRITE);
    // si l'ouverture a réussi, on écrit à l'intérieur
    if (monFichier) {
      monFichier.print(gps.location.lat(),6);
      monFichier.print(",");
      monFichier.print(gps.location.lng(),6);
      monFichier.print(",");
      monFichier.println(gps.time.value());
      // on referme le fichier
      monFichier.close();
      oled.print("Enregistrement SD ok");
    }
    
  }

compteur++;
}

sur ne module Neo-6m est qu'il y a une led qui s'allume quand il fonctionne ?
car actuellement j'ai No GPS dtected: check wiring. est ce la reception ou problème de branchement ?
je n'ai pas branché sur le Neo 6m le rx et tx sur le D1 et D0 du Nano mais sur D4 et D5...
Idem pour l'écran oled SCL sur A5 et SDA sur A4
Est ce la raison ? avant tout déboudé

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.