Affichage LCD Horloge DS1307 - Français - Arduino Forum
Maybe your like
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 ! ![]()
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....
lesept April 26, 2018, 8:51am 3La 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.
Benoit75016 April 27, 2018, 7:45pm 4Ok 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); } Benoit75016 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 '{' tokenJ'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 ! ![]()
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);
lesept April 27, 2018, 8:48pm 7Ensuite, tout ce qui est après // Horlogesemble en dehors des fonctions. Il faut le déplacer quelque part... Dans la loop ?
Benoit75016 April 27, 2018, 10:01pm 8Merci, 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 !
lesept April 28, 2018, 7:22am 9Dans 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...
Benoit75016 April 28, 2018, 12:07pm 10J'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.
lesept April 28, 2018, 12:13pm 11Je 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 ?
Benoit75016 April 28, 2018, 12:26pm 12EDIT : C'est bon tout est réglé merci mille fois !
Related topics
| 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 |
Tag » Arduino Horloge Lcd I2c
-
Probleme D'afficheur LCD I2C Avec Horloge RTC - Arduino Forum
-
Stabiliser L'afffichage D'un écran LCD I2c - Français - Arduino Forum
-
[GUIDE] Arduino Piloter Un Afficheur LCD 16x2 I2C
-
Module Horloge DS1302 / DS1307 Arduino (RTC)
-
Arduino - L'horloge En Temps Réel - Editions ENI
-
L'horloge Temps Réel DS1307 | Arduino-passion
-
Gérer Un écran LCD Par La Connexion I2C D'une Arduino - AranaCorp
-
Une Horloge Pour Votre Arduino (Real Time Clock)
-
Comment Utiliser LCD 1602 I2C Ou LCD2004 Avec Arduino - YouTube
-
1-48 Sur 424 Résultats Pour "I2c Lcd Arduino" - Amazon
-
Aihasd 2PCS 1602 écran LCD Bleu IIC/i2C Module D'horloge En ...
-
Comment Ajouter Et Test, L'écran LCD Pour Votre Projet Arduino ...
-
I2c Arduino Display - Achat En Ligne | Aliexpress