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 ?
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:
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é