Bonjour Assistance Technique

Bonjour
J'ai demandé à une personne de me programmer l'enregistrement des heures avec la date des micro-coupure du courant électrique. L'horloge est déprogrammée et je n'arrive pas a la mettre à l'heure ?

Quelqu'un aurait il une piste de travail SVP
/*Compteur d'incidents
*thermV1.ino (octobre 2017)
//Brochage pour Arduino Uno ou Nano

// DS3231 grand modele**Arduino
GND---------------> 0V //+++
VCC---------------> +5V //+++
SDA---------------> A4
SCL---------------> A5
SQW/INT-----------> D2
32K---------------> NC

LCD : I2C (connecteur jaune)
Rouge : +5V
Noir : 0V
blanc --------------->SDA A4
vert ----------------> SCL A5

Lecteur CarteSD LC Studio
GND---------------> 0V
MISO--------------> D12
SCK---------------> D13
MOSI--------------> D11
CS----------------> D4
+5v---------------> +5V
+3.3v-------------> NC

*/

// librairies
#include <Wire.h>
#include <LCD.h>
#include <DS3231.h>// Librairie pour utiliser le module RTC
#include <SD.h>
#include <avr/eeprom.h>//cette libraiire est par défaut dans l'IDE arduino

#include <LiquidCrystal_I2C.h> // cette librairie doit être téléchargée sur le site :
//https://bitbucket.org/fmalpartida/new-liquidcrystal
#define I2C_ADDR 0x27 // <<adresse du module I2C à vérifier avec un scanner I2C
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
int n=1;
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

DS3231 clock;
RTCDateTime dt;
int seconde, mn, i;
char print_date[16];
File file;
int compteur;
int flag1=0;
//______________________________________________
struct mem /* permet la mise en mémoire eeprom
de constantes de types divers sans se préoccuper des adresses*/
{
int Mem1;
int Mem2;
int Mem3;
int Mem4;
int Mem5;
int Mem6;
int Mem7;
};

mem user1mem;
int memSize = sizeof(mem);//determine the length of the mem objects.

void setup() {
lcd.begin (16,2); // pour un lcd 2 lignes 16 colonnes

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH); // LOW pour éteindrebacklight
lcd.home ();

Serial.begin(9600);//demarre la communication série

lcd.clear();
pinMode(2,INPUT);// pin d'interruption
attachInterrupt(0,incident,RISING);
//---------------------------------------------------
//Initialisation DS3231
clock.begin();
//-----------------
//Mise à l'heure du DS3231
// La ligne suivante met le RTC a l'heure du PC.(decommenter)
//clock.setDateTime(DATE, TIME);//************************************
//-----------------
dt = clock.getDateTime();
// lecture du contenu de l'eeprom intégrée l'atmel 328P
eeprom_read_block((void*)&user1mem, (void*)0, memSize);
lcd.begin(16, 2);

//Laisser en sortie pin 10 sinon SD ne fonctionnera pas
pinMode(10, OUTPUT); // pin 53 si carte Mega
digitalWrite(10, HIGH);
//-----------------
//led controle
pinMode (5, OUTPUT);
mn = dt.minute;
seconde = dt.second;
//Initialisation carte SD
if (!SD.begin(4)) {
digitalWrite(13, HIGH);
delay(150);
return;

}

}

void loop() {
// lit le contenu de l'eeprom
eeprom_read_block((void*)&user1mem, (void*)0, memSize);
compteur=user1mem.Mem6;
if (compteur==0)
{
afficher_apres_raz();}

   if (flag1==1)// si il y a eu une interruption
      
      { delay(100);
        detachInterrupt(0);
       dt = clock.getDateTime();
      
       compteur=compteur + 1;

       user1mem.Mem1 = dt.day;
        user1mem.Mem2 = dt.month;
        user1mem.Mem3 = dt.year;
        user1mem.Mem4 = dt.hour;
        user1mem.Mem5 = dt.minute;
        user1mem.Mem6 = compteur;
    
 // écriture  en mémoire
       eeprom_write_block((const void*)&user1mem, (void*)0, memSize); 
        
      //  Serial.print("mise en memoire effectuee");
       delay(100);
        eeprom_read_block((void*)&user1mem, (void*)0, memSize);
       afficher_mem();
      enregistrer();
      attachInterrupt(0,incident,RISING);
      flag1=0;}

while (flag1==0)
      {delay(100);
      
      
      if (compteur==0)
             {afficher_apres_raz();}
             

          
         
     else 
           {afficher_mem();}

}

}  

void afficher_mem()
{ eeprom_read_block((void*)&user1mem, (void*)0, memSize);
lcd.clear();
lcd.setCursor(0,1);
lcd.print(user1mem.Mem1); lcd.print("/");
lcd.print(user1mem.Mem2), lcd.print("/");
lcd.print(user1mem.Mem3);
lcd.setCursor(11,1);
lcd.print(user1mem.Mem4), lcd.print(":");
lcd.print(user1mem.Mem5);
lcd.setCursor(0,0);
compteur=user1mem.Mem6;
lcd.print(user1mem.Mem6);
if (compteur==1)
{lcd.print("er incident: ");}
else
{lcd.print("eme incident: ");}

}

void afficher_apres_raz()
{ dt = clock.getDateTime();

lcd.clear();

lcd.setCursor(0,1);

lcd.print(dt.day); lcd.print("/");
lcd.print(dt.month), lcd.print("/");
lcd.print(dt.year);
lcd.setCursor(11,1);
lcd.print(dt.hour), lcd.print(":");
lcd.print(dt.minute);
lcd.setCursor(0,0);
lcd.print(compteur);
lcd.print(" incident ");

}

void enregistrer()
{delay(100);
file = SD.open("test.csv", FILE_WRITE);

/* Ajoute l'entête CSV si le fichier est vid */
if (file.size() == 0) {
file.println(F(" incident ; date ; heure "));
file.flush();
}
// Si le fichier s'est ouvert normalement, écrire dans celui-ci:
if (file) {
file.print(user1mem.Mem6); file.print(" ; ");
file.print(user1mem.Mem1); file.print(" / ");
file.print(user1mem.Mem2); file.print(" / ");
file.print(user1mem.Mem3); file.print(" ; ");
file.print(user1mem.Mem4); file.print(" : ");
file.println(user1mem.Mem5);

  delay(10);

// Fermer le fichier:
file.close(); 

} else {
for (int i = 0; i < 25; i++)
{
digitalWrite(13, HIGH);
delay(75);
digitalWrite(13, LOW);
delay(400);}
}
}
void incident()
{//met à 1 le flag d'interruption

flag1=1;}

Bonjour et bienvenue,

Merci de prendre quelques minutes pour lire "Les bonnes pratiques du forum francophone" et les appliquer.

En particulier, la mise en forme du code avec des balises en cliquant sur l'icône <code/>

Il y a une section commentée qui pourrait être pertinente

On pourra vous en dire plus une fois que la forme du premier post aura été corrigée. Merci.

Merci je vais essayer. Bonne journée

Merci d'éditer votre premier post en utilisant le :pencil2: dans la barre d'outil juste sous votre post et rajoutez les balises de de code (c'est difficilement lisible tel quel) :

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l'icône <code/> dans la barre d'outils pour indiquer que c'est du code

(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

il serait bon de (re)lire les recommandations listées dans "Les bonnes pratiques du Forum Francophone” et de faire votre part du boulot pour conserver notre forum agréable à lire.

MERCI D'AVANCE... (et dernier rappel)

Le terme assistace technique se veut peut etre drole, mais c’est raté.

Ici il n’y a que des bénévoles. Un bénévole est en droit de demander un peu plus de considération.

et surtout on demande un titre parlant et descriptif du problème rencontré..

bref...