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;}