Affichage LCD Horloge DS1307 - Français - Arduino Forum

Affichage LCD horloge DS1307 International Français April 25, 2018, 12:34am 1

Bonsoir, je dois actuellement programmer une horloge avec un affichage lcd, j'ai réussi à avoir le programme de l'horloge mais je n'arrive pas à afficher l'information sur le lcd. J'aimerais bien avoir un peu de votre aide, je ne sais vraiment pas par ou commencer, sachez que je débute en programmation ^^ . L'horloge est le DS1307, je vous met le programme en code ci-dessous.

Programme :

#define DS1307_H #define DS1307_H /** Adresse I2C du module RTC DS1307 */ const uint8_t DS1307_ADDRESS = 0x68; /** Adresse du registre de contrôle du module RTC DS1307 */ const uint8_t DS1307_CTRL_REGISTER = 0x07; /** Adresse et taille de la NVRAM du module RTC DS1307 */ const uint8_t DS1307_NVRAM_BASE = 0x08; const uint8_t DS1307_NVRAM_SIZE = 56; /** Structure contenant les informations de date et heure en provenance ou à destination du module RTC */ typedef struct {   uint8_t seconds; /**!< Secondes 00 - 59 */   uint8_t minutes; /**!< Minutes 00 - 59 */   uint8_t hours;  /**!< Heures 00 - 23 (format 24h), 01 - 12 (format 12h) */   uint8_t is_pm; /**!< Vaut 1 si l'heure est en format 12h et qu'il est l'aprés midi, sinon 0 */   uint8_t day_of_week;  /**!< Jour de la semaine 01 - 07, 1 = lundi, 2 = mardi, etc.  */   uint8_t days; /**!< Jours 01 - 31 */   uint8_t months;  /**!< Mois 01 - 12 */   uint8_t year;  /**!< Année au format yy (exemple : 16 = 2016) */ } DateTime_t; /** Mode de fonctionnement pour la broche SQW */ typedef enum {   SQW_1_HZ = 0, /**!< Signal à 1Hz sur la broche SQW */   SQW_4096_HZ,  /**!< Signal à 4096Hz sur la broche SQW */   SQW_8192_HZ,  /**!< Signal à 8192Hz sur la broche SQW */   SQW_32768_HZ, /**!< Signal à 32768Hz sur la broche SQW */   SQW_DC /**!< Broche SQW toujours à LOW ou HIGH */ } DS1307_Mode_t; /* Dépendances */ #include <Wire.h> #include "DS1307.h" #include <LiquidCrystal.h> /* Rétro-compatibilité avec Arduino 1.x et antérieur */ #if ARDUINO >= 100 #define Wire_write(x) Wire.write(x) #define Wire_read() Wire.read() #else #define Wire_write(x) Wire.send(x) #define Wire_read() Wire.receive() #endif /** Fonction de conversion BCD -> decimal */ byte bcd_to_decimal(byte bcd) {   return (bcd / 16 * 10) + (bcd % 16); } /** Fonction de conversion decimal -> BCD */ byte decimal_to_bcd(byte decimal) {   return (decimal / 10 * 16) + (decimal % 10); } /** * Fonction récupérant l'heure et la date courante à partir du module RTC. * Place les valeurs lues dans la structure passée en argument (par pointeur). * N.B. Retourne 1 si le module RTC est arrêté (plus de batterie, horloge arrêtée manuellement, etc.), 0 le reste du temps. */ byte read_current_datetime(DateTime_t *datetime) {     /* Début de la transaction I2C */   Wire.beginTransmission(DS1307_ADDRESS);   Wire_write((byte) 0); // Lecture mémoire à l'adresse 0x00   Wire.endTransmission(); // Fin de la transaction I2C   /* Lit 7 octets depuis la mémoire du module RTC */   Wire.requestFrom(DS1307_ADDRESS, (byte) 7);   byte raw_seconds = Wire_read();   datetime->seconds = bcd_to_decimal(raw_seconds);   datetime->minutes = bcd_to_decimal(Wire_read());   byte raw_hours = Wire_read();   if (raw_hours & 64) { // Format 12h     datetime->hours = bcd_to_decimal(raw_hours & 31);     datetime->is_pm = raw_hours & 32;   } else { // Format 24h     datetime->hours = bcd_to_decimal(raw_hours & 63);     datetime->is_pm = 0;   }   datetime->day_of_week = bcd_to_decimal(Wire_read());   datetime->days = bcd_to_decimal(Wire_read());   datetime->months = bcd_to_decimal(Wire_read());   datetime->year = bcd_to_decimal(Wire_read());     /* Si le bit 7 des secondes == 1 : le module RTC est arrêté */   return raw_seconds & 128; } /** * Fonction ajustant l'heure et la date courante du module RTC à partir des informations fournies. * N.B. Redémarre l'horloge du module RTC si nécessaire. */ void adjust_current_datetime(DateTime_t *datetime) {     /* Début de la transaction I2C */   Wire.beginTransmission(DS1307_ADDRESS);   Wire_write((byte) 0); // Ecriture mémoire à l'adresse 0x00   Wire_write(decimal_to_bcd(datetime->seconds) & 127); // CH = 0   Wire_write(decimal_to_bcd(datetime->minutes));   Wire_write(decimal_to_bcd(datetime->hours) & 63); // Mode 24h   Wire_write(decimal_to_bcd(datetime->day_of_week));   Wire_write(decimal_to_bcd(datetime->days));   Wire_write(decimal_to_bcd(datetime->months));   Wire_write(decimal_to_bcd(datetime->year));   Wire.endTransmission(); // Fin de transaction I2C } void setup() {/* Initialise le port série */   Serial.begin(115200);     /* Initialise le port I2C */   Wire.begin();     /* Vérifie si le module RTC est initialisé */   DateTime_t now;   if (read_current_datetime(&now)) {     Serial.println(F("L'horloge du module RTC n'est pas active !"));         // Reconfiguration avec une date et heure en dure (pour l'exemple)     now.seconds = 0;     now.minutes = 0;     now.hours = 12; // 12h 0min 0sec     now.is_pm = 0;     now.day_of_week = 4;     now.days = 1;     now.months = 12;     now.year = 16; // 1 dec 2016     adjust_current_datetime(&now);   } } void loop() {   // put your main code here, to run repeatedly:   /* Lit la date et heure courante */   DateTime_t now;   if (read_current_datetime(&now)) {     Serial.println(F("L'horloge du module RTC n'est pas active !"));   }     /* Affiche la date et heure courante */   Serial.print(F("Date : "));   Serial.print(now.days);   Serial.print(F("/"));   Serial.print(now.months);   Serial.print(F("/"));   Serial.print(now.year + 2000);   Serial.print(F("  Heure : "));   Serial.print(now.hours);   Serial.print(F(":"));   Serial.print(now.minutes);   Serial.print(F(":"));   Serial.println(now.seconds);     /* Rafraichissement une fois par seconde */   delay(1000); }

Merci encore si vous savez comment procéder ! :slight_smile:

April 25, 2018, 3:30am 2

Bonjour, il n'y a rien dans ce sketch qui indique à l'arduino qu'un lcd y est connecté.

Quel type de lcd est utilisé? interface série? parallèle.

Mn moteur de recherche me retourne exactement 15 500 000 résults avec les mots clé "lcd arduino". Et exactement 17100 résultats avec les mots clé "lcd ds1307 arduino".

reste plus qu'à choisir....

April 26, 2018, 8:51am 3

La bibliothèque LiquidCrystal est présentée ici. Il ly a des exemples qui montrent comment déclarer un LCD : essaye par exemple "Hello World!" et s'il fonctionne bien, tu peux t'en inspirer pour ton code.

April 27, 2018, 7:45pm 4

Ok merci beaucoup, je vais voir ton lien @lesept. J'ai juste encore un petit problème (excusez moi mais je suis vraiment une bouse en programmation x) ), j'essaie de relier le programme de l'horloge à un autre programme (à un capteur) pour pouvoir avoir l'affichage final sur un seul moniteur série mais j'ai des erreurs qui persistent, je vous met le code ci-dessous.

Programme :

#include <Wire.h> #include <SPI.h> #include "Adafruit_Sensor.h" #include "Adafruit_BME280.h" #include <LiquidCrystal.h> #define BME_SCK 9 #define BME_MISO 8 #define BME_MOSI 7 #define BME_CS 6 #define ALTITUDE 216.0 // Altitude in Sparta, Greece #define DS1307_H #define DS1307_H // Pression au niveau de la mer #define PRESSIONNIVEAUMER_HPA (1013.25) //Adafruit_BME280 bme; // en I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI float temperature; float humidity; float pressure; LiquidCrystal lcd(12,11,5,4,3,2); // HORLOGE /** Adresse I2C du module RTC DS1307 */ const uint8_t DS1307_ADDRESS = 0x68; /** Adresse du registre de contrôle du module RTC DS1307 */ const uint8_t DS1307_CTRL_REGISTER = 0x07; /** Adresse et taille de la NVRAM du module RTC DS1307 */ const uint8_t DS1307_NVRAM_BASE = 0x08; const uint8_t DS1307_NVRAM_SIZE = 56; /** Structure contenant les informations de date et heure en provenance ou à destination du module RTC */ typedef struct {  uint8_t seconds; /**!< Secondes 00 - 59 */  uint8_t minutes; /**!< Minutes 00 - 59 */  uint8_t hours;  /**!< Heures 00 - 23 (format 24h), 01 - 12 (format 12h) */  uint8_t is_pm; /**!< Vaut 1 si l'heure est en format 12h et qu'il est l'aprés midi, sinon 0 */  uint8_t day_of_week;  /**!< Jour de la semaine 01 - 07, 1 = lundi, 2 = mardi, etc.  */  uint8_t days; /**!< Jours 01 - 31 */  uint8_t months;  /**!< Mois 01 - 12 */  uint8_t year;  /**!< Année au format yy (exemple : 16 = 2016) */ } DateTime_t; /** Mode de fonctionnement pour la broche SQW */ typedef enum {  SQW_1_HZ = 0, /**!< Signal à 1Hz sur la broche SQW */  SQW_4096_HZ,  /**!< Signal à 4096Hz sur la broche SQW */  SQW_8192_HZ,  /**!< Signal à 8192Hz sur la broche SQW */  SQW_32768_HZ, /**!< Signal à 32768Hz sur la broche SQW */  SQW_DC /**!< Broche SQW toujours à LOW ou HIGH */ } DS1307_Mode_t; /* Dépendances */ #include <Wire.h> #include "DS1307.h" #include <LiquidCrystal.h> /* Rétro-compatibilité avec Arduino 1.x et antérieur */ #if ARDUINO >= 100 #define Wire_write(x) Wire.write(x) #define Wire_read() Wire.read() #else #define Wire_write(x) Wire.send(x) #define Wire_read() Wire.receive() #endif /** Fonction de conversion BCD -> decimal */ byte bcd_to_decimal(byte bcd) {  return (bcd / 16 * 10) + (bcd % 16); } /** Fonction de conversion decimal -> BCD */ byte decimal_to_bcd(byte decimal) {  return (decimal / 10 * 16) + (decimal % 10); } /** * Fonction récupérant l'heure et la date courante à partir du module RTC. * Place les valeurs lues dans la structure passée en argument (par pointeur). * N.B. Retourne 1 si le module RTC est arrêté (plus de batterie, horloge arrêtée manuellement, etc.), 0 le reste du temps. */ byte read_current_datetime(DateTime_t *datetime) {    /* Début de la transaction I2C */  Wire.beginTransmission(DS1307_ADDRESS);  Wire_write((byte) 0); // Lecture mémoire à l'adresse 0x00  Wire.endTransmission(); // Fin de la transaction I2C  /* Lit 7 octets depuis la mémoire du module RTC */  Wire.requestFrom(DS1307_ADDRESS, (byte) 7);  byte raw_seconds = Wire_read();  datetime->seconds = bcd_to_decimal(raw_seconds);  datetime->minutes = bcd_to_decimal(Wire_read());  byte raw_hours = Wire_read();  if (raw_hours & 64) { // Format 12h    datetime->hours = bcd_to_decimal(raw_hours & 31);    datetime->is_pm = raw_hours & 32;  } else { // Format 24h    datetime->hours = bcd_to_decimal(raw_hours & 63);    datetime->is_pm = 0;  }  datetime->day_of_week = bcd_to_decimal(Wire_read());  datetime->days = bcd_to_decimal(Wire_read());  datetime->months = bcd_to_decimal(Wire_read());  datetime->year = bcd_to_decimal(Wire_read());    /* Si le bit 7 des secondes == 1 : le module RTC est arrêté */  return raw_seconds & 128; } /** * Fonction ajustant l'heure et la date courante du module RTC à partir des informations fournies. * N.B. Redémarre l'horloge du module RTC si nécessaire. */ void adjust_current_datetime(DateTime_t *datetime) {    /* Début de la transaction I2C */  Wire.beginTransmission(DS1307_ADDRESS);  Wire_write((byte) 0); // Ecriture mémoire à l'adresse 0x00  Wire_write(decimal_to_bcd(datetime->seconds) & 127); // CH = 0  Wire_write(decimal_to_bcd(datetime->minutes));  Wire_write(decimal_to_bcd(datetime->hours) & 63); // Mode 24h  Wire_write(decimal_to_bcd(datetime->day_of_week));  Wire_write(decimal_to_bcd(datetime->days));  Wire_write(decimal_to_bcd(datetime->months));  Wire_write(decimal_to_bcd(datetime->year));  Wire.endTransmission(); // Fin de transaction I2C } void setup() {  // put your setup code here, to run once:  Serial.begin(9600);  Serial.println("Test BME280");  Serial.println();  if (!bme.begin()) {      Serial.println("Impossible de trouver un capteur BME280, verifier vos raccordements!");    while (1);  }  lcd.begin(16, 2);  lcd.print("Recherche");  bool status;        // default settings    status = bme.begin(0x76);  //The I2C address of the sensor I use is 0x76    if (!status) {        lcd.clear();        lcd.print("Erreur verifier");        lcd.setCursor(0,1);        lcd.print("connexion");        while (1); // Horloge        /* Initialise le port série */  Serial.begin(115200);    /* Initialise le port I2C */  Wire.begin();    /* Vérifie si le module RTC est initialisé */  DateTime_t now;  if (read_current_datetime(&now)) {    Serial.println(F("L'horloge du module RTC n'est pas active !"));        // Reconfiguration avec une date et heure en dure (pour l'exemple)    now.seconds = 0;    now.minutes = 0;    now.hours = 12; // 12h 0min 0sec    now.is_pm = 0;    now.day_of_week = 4;    now.days = 1;    now.months = 12;    now.year = 16; // 1 dec 2016    adjust_current_datetime(&now);  } } void loop() {  // put your main code here, to run repeatedly:  Serial.print("Temperature = ");  Serial.print(bme.readTemperature()); // Lecture température  Serial.println(" *C");  Serial.print("Pression = ");  Serial.print(bme.readPressure()); // Lecture pression  Serial.println(" Pa");  Serial.print("Altitude approximative = ");  Serial.print(bme.readAltitude(PRESSIONNIVEAUMER_HPA)); // Lecture altitude  Serial.println(" metres");  Serial.print("Humidite = ");  Serial.print(bme.readHumidity()); // Lecture humidité  Serial.println(" %");  Serial.println();  delay(5000); getPressure(); getHumidity(); getTemperature(); lcd.clear(); //Printing Temperature String temperatureString = String(temperature,1); lcd.print("T:"); lcd.print(temperatureString); lcd.print((char)223); lcd.print("F "); //Printing Humidity String humidityString = String(humidity,0); lcd.print("H: "); lcd.print(humidityString); lcd.print("%"); //Printing Pressure lcd.setCursor(0,1); lcd.print("P: "); String pressureString = String(pressure,2); lcd.print(pressureString); lcd.print(" Pa"); } float getTemperature() {  temperature = bme.readTemperature(); } float getHumidity() {  humidity = bme.readHumidity(); } float getPressure() {  pressure = bme.readPressure();  pressure = bme.seaLevelForAltitude(ALTITUDE,pressure);  pressure = pressure/100.0F; } // Horloge  DateTime_t now;  if (read_current_datetime(&now)) {    Serial.println(F("L'horloge du module RTC n'est pas active !"));  }    /* Affiche la date et heure courante */  Serial.print(F("Date : "));  Serial.print(now.days);  Serial.print(F("/"));  Serial.print(now.months);  Serial.print(F("/"));  Serial.print(now.year + 2000);  Serial.print(F("  Heure : "));  Serial.print(now.hours);  Serial.print(F(":"));  Serial.print(now.minutes);  Serial.print(F(":"));  Serial.println(now.seconds);    /* Rafraichissement une fois par seconde */  delay(1000);  } April 27, 2018, 7:50pm 5

(Double post à cause de la limite de caractères ^^)

Les erreurs viennent de "{" mais je ne trouve pas lesquels, je vous met l'erreur ci-dessous :

F:\bmehorloge\bmehorloge\bmehorloge.ino: In function 'void setup()': bmehorloge:177: error: a function-definition is not allowed here before '{' token void loop() {             ^ bmehorloge:227: error: a function-definition is not allowed here before '{' token { ^ bmehorloge:233: error: a function-definition is not allowed here before '{' token { ^ bmehorloge:239: error: a function-definition is not allowed here before '{' token { ^ exit status 1 a function-definition is not allowed here before '{' token

J'ai marqué le programme de l'horloge ajouté par des commentaires "// horloge" pour vous faciliter la tâche ^^, l'erreur vient forcément de la (le programme fonctionnait parfaitement avant), j'ai essayer de toucher un peu à tout mais rien n'y fait..

Merci encore pour votre aide ! :slight_smile:

April 27, 2018, 8:45pm 6

Je suppose que ceci est un bloc auquel il manque une accolade fermante :

    if (!status) {         lcd.clear();         lcd.print("Erreur verifier");         lcd.setCursor(0,1);         lcd.print("connexion");         while (1);

Donc, ajoute un } après le while(1);

April 27, 2018, 8:48pm 7

Ensuite, tout ce qui est après // Horlogesemble en dehors des fonctions. Il faut le déplacer quelque part... Dans la loop ?

April 27, 2018, 10:01pm 8

Merci, c'était comme toujours des erreurs bêtes.. x)

Du coup j'ai une bonne et une mauvaise nouvelle xD, je n'ai plus aucune erreur mais en mettant le programme de l'horloge dans la loop le capteur (le bme280, capteur d'humidité, pression..) n'est plus détecté dans le moniteur série, j'ai peut-être encore fait une gaffe en faisant cette modification. J'ai cherché comment régler ce problème mais rien n'y fait...

Le programme :

#include <Wire.h> #include <SPI.h> #include "Adafruit_Sensor.h" #include "Adafruit_BME280.h" #include <LiquidCrystal.h> #define BME_SCK 9 #define BME_MISO 8 #define BME_MOSI 7 #define BME_CS 6 #define ALTITUDE 216.0 // Altitude in Sparta, Greece #define DS1307_H #define DS1307_H // Pression au niveau de la mer #define PRESSIONNIVEAUMER_HPA (1013.25) //Adafruit_BME280 bme; // en I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI float temperature; float humidity; float pressure; LiquidCrystal lcd(9,8,5,4,3,2); //Horloge /** Adresse I2C du module RTC DS1307 */ const uint8_t DS1307_ADDRESS = 0x68; /** Adresse du registre de contrôle du module RTC DS1307 */ const uint8_t DS1307_CTRL_REGISTER = 0x07; /** Adresse et taille de la NVRAM du module RTC DS1307 */ const uint8_t DS1307_NVRAM_BASE = 0x08; const uint8_t DS1307_NVRAM_SIZE = 56; /** Structure contenant les informations de date et heure en provenance ou à destination du module RTC */ typedef struct {   uint8_t seconds; /**!< Secondes 00 - 59 */   uint8_t minutes; /**!< Minutes 00 - 59 */   uint8_t hours;  /**!< Heures 00 - 23 (format 24h), 01 - 12 (format 12h) */   uint8_t is_pm; /**!< Vaut 1 si l'heure est en format 12h et qu'il est l'aprés midi, sinon 0 */   uint8_t day_of_week;  /**!< Jour de la semaine 01 - 07, 1 = lundi, 2 = mardi, etc.  */   uint8_t days; /**!< Jours 01 - 31 */   uint8_t months;  /**!< Mois 01 - 12 */   uint8_t year;  /**!< Année au format yy (exemple : 16 = 2016) */ } DateTime_t; /** Mode de fonctionnement pour la broche SQW */ typedef enum {   SQW_1_HZ = 0, /**!< Signal à 1Hz sur la broche SQW */   SQW_4096_HZ,  /**!< Signal à 4096Hz sur la broche SQW */   SQW_8192_HZ,  /**!< Signal à 8192Hz sur la broche SQW */   SQW_32768_HZ, /**!< Signal à 32768Hz sur la broche SQW */   SQW_DC /**!< Broche SQW toujours à LOW ou HIGH */ } DS1307_Mode_t; /* Dépendances */ #include "DS1307.h" /* Rétro-compatibilité avec Arduino 1.x et antérieur */ #if ARDUINO >= 100 #define Wire_write(x) Wire.write(x) #define Wire_read() Wire.read() #else #define Wire_write(x) Wire.send(x) #define Wire_read() Wire.receive() #endif /** Fonction de conversion BCD -> decimal */ byte bcd_to_decimal(byte bcd) {   return (bcd / 16 * 10) + (bcd % 16); } /** Fonction de conversion decimal -> BCD */ byte decimal_to_bcd(byte decimal) {   return (decimal / 10 * 16) + (decimal % 10); } /** * Fonction récupérant l'heure et la date courante à partir du module RTC. * Place les valeurs lues dans la structure passée en argument (par pointeur). * N.B. Retourne 1 si le module RTC est arrêté (plus de batterie, horloge arrêtée manuellement, etc.), 0 le reste du temps. */ byte read_current_datetime(DateTime_t *datetime) {     /* Début de la transaction I2C */   Wire.beginTransmission(DS1307_ADDRESS);   Wire_write((byte) 0); // Lecture mémoire à l'adresse 0x00   Wire.endTransmission(); // Fin de la transaction I2C   /* Lit 7 octets depuis la mémoire du module RTC */   Wire.requestFrom(DS1307_ADDRESS, (byte) 7);   byte raw_seconds = Wire_read();   datetime->seconds = bcd_to_decimal(raw_seconds);   datetime->minutes = bcd_to_decimal(Wire_read());   byte raw_hours = Wire_read();   if (raw_hours & 64) { // Format 12h     datetime->hours = bcd_to_decimal(raw_hours & 31);     datetime->is_pm = raw_hours & 32;   } else { // Format 24h     datetime->hours = bcd_to_decimal(raw_hours & 63);     datetime->is_pm = 0;   }   datetime->day_of_week = bcd_to_decimal(Wire_read());   datetime->days = bcd_to_decimal(Wire_read());   datetime->months = bcd_to_decimal(Wire_read());   datetime->year = bcd_to_decimal(Wire_read());     /* Si le bit 7 des secondes == 1 : le module RTC est arrêté */   return raw_seconds & 128; } /** * Fonction ajustant l'heure et la date courante du module RTC à partir des informations fournies. * N.B. Redémarre l'horloge du module RTC si nécessaire. */ void adjust_current_datetime(DateTime_t *datetime) {     /* Début de la transaction I2C */   Wire.beginTransmission(DS1307_ADDRESS);   Wire_write((byte) 0); // Ecriture mémoire à l'adresse 0x00   Wire_write(decimal_to_bcd(datetime->seconds) & 127); // CH = 0   Wire_write(decimal_to_bcd(datetime->minutes));   Wire_write(decimal_to_bcd(datetime->hours) & 63); // Mode 24h   Wire_write(decimal_to_bcd(datetime->day_of_week));   Wire_write(decimal_to_bcd(datetime->days));   Wire_write(decimal_to_bcd(datetime->months));   Wire_write(decimal_to_bcd(datetime->year));   Wire.endTransmission(); // Fin de transaction I2C } void setup() {   //BME 280   Serial.begin(9600);   Serial.println("Test BME280");   Serial.println();   if (!bme.begin()) {      Serial.println("Impossible de trouver un capteur BME280, verifier vos raccordements!");     while (1);   }   lcd.begin(16, 2);   lcd.print("Recherche");   bool status;         // default settings     status = bme.begin(0x76);  //The I2C address of the sensor I use is 0x76     if (!status) {         lcd.clear();         lcd.print("Erreur verifier");         lcd.setCursor(0,1);         lcd.print("connexion");         while (1);     } // Horloge         /* Initialise le port série */   Serial.begin(115200);     /* Initialise le port I2C */   Wire.begin();     /* Vérifie si le module RTC est initialisé */   DateTime_t now;   if (read_current_datetime(&now)) {     Serial.println(F("L'horloge du module RTC n'est pas active !"));         // Reconfiguration avec une date et heure en dure (pour l'exemple)     now.seconds = 0;     now.minutes = 0;     now.hours = 12; // 12h 0min 0sec     now.is_pm = 0;     now.day_of_week = 4;     now.days = 1;     now.months = 12;     now.year = 16; // 1 dec 2016     adjust_current_datetime(&now);   } } void loop() { //BME280   Serial.print("Temperature = ");   Serial.print(bme.readTemperature()); // Lecture température   Serial.println(" *C");   Serial.print("Pression = ");   Serial.print(bme.readPressure()); // Lecture pression   Serial.println(" Pa");   Serial.print("Altitude approximative = ");   Serial.print(bme.readAltitude(PRESSIONNIVEAUMER_HPA)); // Lecture altitude   Serial.println(" metres");   Serial.print("Humidite = ");   Serial.print(bme.readHumidity()); // Lecture humidité   Serial.println(" %");   Serial.println();   delay(5000);   // Horloge   DateTime_t now;   if (read_current_datetime(&now)) {     Serial.println(F("L'horloge du module RTC n'est pas active !"));   }     /* Affiche la date et heure courante */   Serial.print(F("Date : "));   Serial.print(now.days);   Serial.print(F("/"));   Serial.print(now.months);   Serial.print(F("/"));   Serial.print(now.year + 2000);   Serial.print(F("  Heure : "));   Serial.print(now.hours);   Serial.print(F(":"));   Serial.print(now.minutes);   Serial.print(F(":"));   Serial.println(now.seconds);   /* Rafraichissement une fois par seconde */   delay(1000); //Affichage LCD BME280 getPressure(); getHumidity(); getTemperature(); lcd.clear(); //Affichage temperature String temperatureString = String(temperature,1); lcd.print("T:"); lcd.print(temperatureString); lcd.print((char)223); lcd.print("F "); //Affichage humidité String humidityString = String(humidity,0); lcd.print("H: "); lcd.print(humidityString); lcd.print("%"); //Affichage pression lcd.setCursor(0,1); lcd.print("P: "); String pressureString = String(pressure,2); lcd.print(pressureString); lcd.print(" Pa"); } float getTemperature() {   temperature = bme.readTemperature(); } float getHumidity() {   humidity = bme.readHumidity(); } float getPressure() {   pressure = bme.readPressure();   pressure = bme.seaLevelForAltitude(ALTITUDE,pressure);   pressure = pressure/100.0F; }

Merci encore, je ne sais pas ce que je ferais sans vous !

April 28, 2018, 7:22am 9

Dans ton setup, tu initialises le Serial 2 fois, il faut enlever la ligne

        /* Initialise le port série */   Serial.begin(115200);

Et je mettrais ça plutôt au début du setup

/* Initialise le port I2C */   Wire.begin();

D'une manière générale, il faut faire les initialisations avant d'utiliser ce qu'on initialise. Si on n'est pas sûr, autant tout initialiser dès le début et pas au milieu du setup...

April 28, 2018, 12:07pm 10

J'ai essayé de faire comme tu m'a dit mais toujours rien.. Le moniteur série affiche le message d'erreur du bme280 :

Test BME280 Impossible de trouver un capteur BME280, verifier vos raccordements!

Je te remet le code du setup, je ne sais vraiment pas d'ou sa peut venir, je reprécise que le programme du bme fonctionnait parfaitement avant.

void setup() { //Horloge       /* Initialise le port I2C */   Wire.begin();     //BME 280   Serial.begin(9600);   Serial.println("Test BME280");   Serial.println();   if (!bme.begin()) {      Serial.println("Impossible de trouver un capteur BME280, verifier vos raccordements!");     while (1);   } //Affichage LCD BME280   lcd.begin(16, 2);   lcd.print("Recherche");   bool status;         // default settings     status = bme.begin(0x76);  //The I2C address of the sensor I use is 0x76     if (!status) {         lcd.clear();         lcd.print("Erreur verifier");         lcd.setCursor(0,1);         lcd.print("connexion");         while (1);     }

Si tu vois une autre erreur dit moi, merci en tout cas pour ton aide.

April 28, 2018, 12:13pm 11

Je ne vois rien qui justifie que la capteur ne soit pas détecté : est-ce qu'il a déjà fonctionné avant ? As-tu changé quelque chose dans les connexions depuis ?

April 28, 2018, 12:26pm 12

EDIT : C'est bon tout est réglé merci mille fois !

Topic Replies Views Activity
Impossible d'afficher les données du capteur BME280 Français 14 187 October 16, 2025
Aide pour avoir une horloge bien lineaire Français 55 776 December 4, 2024
(Résolu) Erreur de compilation avec uno+ds1307+lcd 1602 I2C Français 7 61 November 25, 2025
Aide à la programation ds1302=ecran2.4 Français 16 1419 July 8, 2022
Horloge RTC et Ecran OLED Français 32 442 August 14, 2025
Unfortunately, your browser is unsupported. Please switch to a supported browser to view rich content, log in and reply.

Tag » Arduino Horloge Lcd I2c