probleme de televersement pour rtc + lcd

Bonjour, je essaie d'afficher la lecture d'un rtc DS3231 avec un afficheur LCD 16x2 I2C .voici le lien de la vidéo
et voici le code

#include <DS3231.h>
#include <LiquidCrystal.h>

DS3231  rtc(SDA, SCL);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
void setup() { 
 rtc.begin();
 lcd.begin(16,2);
}
void loop() { 
 lcd.setCursor(0,0);
 lcd.print("Time:  ");
 lcd.print(rtc.getTimeStr());
 
 lcd.setCursor(0,1);
 lcd.print("Date: ");
 lcd.print(rtc.getDateStr());
 
 delay(1000); 
}

mais sur le lcd il ne m'écrit que time
voyez vous le probleme ?
merci

N’utilisez pas la pin 1 pour l’écran

Commencez avec le port série (à 115200 bauds) pour voir si la RTC fonctionne correctement

 #include <DS3231.h>
DS3231  rtc(SDA, SCL);

void setup() { 
  Serial.begin(115200);
  rtc.begin();
}

void loop() { 
 Serial.print("Time:  ");
 Serial.print(rtc.getTimeStr());
 Serial.print(". Date: ");
 Serial.println(rtc.getDateStr());
 delay(1000); 
}

ok ça m'ecrit ça :

Time:  00:00:15. Dat0
Time:  00:00:42. Date: 01.01.2000
Time:  00:00:43. Date: 01.01.2000
:40. Date: 01.01.2000
Time:  00:00:41. Date: 01.01.2000
Time:  00:00:42. Date: 01.01.2000
Time:  00:00:43. Date: 01.01.2000
Time:  00:00:46. Date: 01.01.2000
Time:  00:00:47. Date: 01.01.2000
Time:  00:00:48. Date: 01.01.2000
Time:  00:00:49. Date: 01.01.2000
Time:  00:00:50. Date: 01.01.2000
Time:  00:00:51. Date: 01.01.2000

comment je peux mettre la vraie date ?

En regardant les exemples de la bibliothèque que vous utilisez (et qu’on ne peut pas deviner, il y en a de nombreuses)

c'est bon j'ai trouvé un code :

///////////////////////////////////////////
// RTC data and time setter              //
//                                       //
// This sample program allows the user   //
// to set the date and time of an RTC    //
// using I2C.                            //
//                                       //
// Codes by:                             //
// eGizmo Mechatronix Central            //
// Taft, Manila, Philippines             //
// http://www.egizmo.com                 //
// April 15, 2013                        //
///////////////////////////////////////////

#include <Wire.h>
const int DS1307 = 0x68; // Address of DS1307 see data sheets
const char* days[] =
{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const char* months[] =
{"January", "February", "March", "April", "May", "June", "July", "August","September", "October", "November", "December"};

// Initializes all values: 
byte second = 0;
byte minute = 0;
byte hour = 0;
byte weekday = 0;
byte monthday = 0;
byte month = 0;
byte year = 0;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  delay(2000); // This delay allows the MCU to read the current date and time.

  Serial.print("The current date and time is: ");
  printTime();
  Serial.println("Please change to newline ending the settings on the lower right of the Serial Monitor");
  Serial.println("Would you like to set the date and time now? Y/N");

  while (!Serial.available()) delay(10);
  if (Serial.read() == 'y' || Serial.read() == 'Y')

  // This set of functions allows the user to change the date and time
  {
    Serial.read();
    setTime();
    Serial.print("The current date and time is now: ");
    printTime();
  }


  Serial.println("Thank you.");
}

// Continuous function for converting bytes to decimals and vice versa
void loop() {
}
byte decToBcd(byte val) {
  return ((val/10*16) + (val%10));
}
byte bcdToDec(byte val) {
  return ((val/16*10) + (val%16));
}


// This set of codes is allows input of data
void setTime() {
  Serial.print("Please enter the current year, 00-99. - ");
  year = readByte();
  Serial.println(year);
  Serial.print("Please enter the current month, 1-12. - ");
  month = readByte();
  Serial.println(months[month-1]);
  Serial.print("Please enter the current day of the month, 1-31. - ");
  monthday = readByte();
  Serial.println(monthday);
  Serial.println("Please enter the current day of the week, 1-7.");
  Serial.print("1 Sun | 2 Mon | 3 Tues | 4 Weds | 5 Thu | 6 Fri | 7 Sat - ");
  weekday = readByte();
  Serial.println(days[weekday-1]);
  Serial.print("Please enter the current hour in 24hr format, 0-23. - ");
  hour = readByte();
  Serial.println(hour);
  Serial.print("Please enter the current minute, 0-59. - ");
  minute = readByte();
  Serial.println(minute);
  second = 0;
  Serial.println("The data has been entered.");

  // The following codes transmits the data to the RTC
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekday));
  Wire.write(decToBcd(monthday));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(byte(0));
  Wire.endTransmission();
  // Ends transmission of data
}


byte readByte() {
  while (!Serial.available()) delay(10);
  byte reading = 0;
  byte incomingByte = Serial.read();
  while (incomingByte != '\n') {
    if (incomingByte >= '0' && incomingByte <= '9')
      reading = reading * 10 + (incomingByte - '0');
    else;
    incomingByte = Serial.read();
  }
  Serial.flush();
  return reading;
}


void printTime() {
  char buffer[3];
  const char* AMPM = 0;
  readTime();
  Serial.print(days[weekday-1]);
  Serial.print(" ");
  Serial.print(months[month-1]);
  Serial.print(" ");
  Serial.print(monthday);
  Serial.print(", 20");
  Serial.print(year);
  Serial.print(" ");
  if (hour > 12) {
    hour -= 12;
    AMPM = " PM";
  }
  else AMPM = " AM";
  Serial.print(hour);
  Serial.print(":");
  sprintf(buffer, "%02d", minute);
  Serial.print(buffer);
  Serial.println(AMPM);
}


void readTime() {
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.endTransmission();
  Wire.requestFrom(DS1307, 7);
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read());
  weekday = bcdToDec(Wire.read());
  monthday = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());
}

mais comment le mettre avec le lcd ?

Lisez des tutos sur les lcd.

En gros il faut dire à quel endroit (ligne, colonne) vous voulez commencer à écrire avec un lcd.setCursor() puis vous faites un lcd.print() comme vous faisiez un Serial.print()

Pourquoi tu veux le mettre avec le lcd?
Ce programme permet de mettre ta rtc à l'heure. Après tu peux utiliser cette rtc avec ton programme précédent.

est-ce que vous pouvez me dire ou on mets le lcd.print svp ?

kamill:
Pourquoi tu veux le mettre avec le lcd?
Ce programme permet de mettre ta rtc à l'heure. Après tu peux utiliser cette rtc avec ton programme précédent.

pour avoir la bonne heure automatiquement

je suis quand meme perdu
pouvez vous m'aider s'il vous plait

Tu mets ta rtc à l'heure avec le programme du post #5. Après tu auras la bonne heure (pour peu que la pile de la rtc soit bonne).

oui c'est ce que j'ai fait et ça avait marché je voulais vous le dire merci

Content que ça ai fonctionné.

et je pense rajouter un support pour le lcd fait en 3d

voici le support que j'imprime sur ce lien

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