Bonsoir et bonjour à tous,
Depuis une semaine, je besogne à essayer d'absorber l'utilisation correcte et, comme je le souhaite pour mon apprentissage avec le site du zéro, de la RTC DS1307.
Ce que je voudrais obtenir m’apparaissait relativement simple au départ :
- Qu’a chaque ouverture et fermeture de la porte, l’heure, les minutes et secondes soient enregistré. Ce que je n’arrive pas à faire.
Je suppose comme tout débutant que j’ai pris des fausses pistes, c’est pourquoi un peu d’aide me serait donc d’un grand secours.
Cordialement,
Guy.
Ci-après, les résultats de mon programme.
No;Temps;Action;DateTime now;
1 ; 7324 ; fermeture ; Date et heure 2 ; 12574 ; ouverture ; Date et heure ;
3 ; 15008 ; fermeture ; Date et heure 4 ; 17643 ; ouverture ; Date et heure ;
5 ; 20881 ; fermeture ; Date et heure 6 ; 23717 ; ouverture ; Date et heure ;
7 ; 26352 ; fermeture ; Date et heure 8 ; 28383 ; ouverture ; Date et heure ;
9 ; 30011 ; fermeture ; Date et heure 10 ; 31841 ; ouverture ; Date et heure ;
…, et ce que je souhaiterai avec saut de ligne.
No;Temps;Action; Date et heure;
1 ; 7324 ; fermeture ; 19/08/2013 20:10 :01
2 ; 12574 ; ouverture ; 19/08/2013 20:11 :15
3 ; 15008 ; fermeture ; 19/08/2013 20:14 :54
4 ; 17643 ; ouverture ; 19/08/2013 20: 15 :33
5 ; 20881 ; fermeture ; 19/08/2013 20:18 :12
6 ; 23717 ; ouverture ; 19/08/2013 20:19 :48
7 ; 26352 ; fermeture ; 19/08/2013 20:20 :19
8 ; 28383 ; ouverture ; 19/08/2013 20:22 :14
9 ; 30011 ; fermeture ; 19/08/2013 20:23:31
10 ; 31841 ; ouverture ; 19/08/2013 20:31:39
/* Lundi 19 août à 19 h 24
** Étape 2
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4
** DS1307 sur analog 4 et 5
*/
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
RTC_Millis rtc;// Déclaration
const int chipSelect = 4;
const int FERMETURE=0; // constante état de l'ILS
const int OUVERT=1; // constante état de l'ILS
const int ILS=2; //declaration constante de la broche ILS
const int LEDVERT=3; //declaration constante de la broche FERMETURE
const int LEDROUGE=6; //declaration constante de la broche OUVERT
// Déclaration des variables globales
int ETAT_ILS=0; // variable d'état de la porte surveillée
int LAST_ILS; // variable d'etat au passé
int i=1;
// Initialisation des fonctionnalités utilisées
void enregistrer(int etat)
{
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("datalog.txt", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
dataFile.print(i);
dataFile.print(" ; ");
dataFile.print(millis());
dataFile.print(" ; ");
if (etat==1) {
dataFile.print("fermeture");
dataFile.print(" ; ");
dataFile.print(" Date et heure ");
}
else
{
dataFile.print("ouverture");
dataFile.print(" ; ");
dataFile.print(" Date et heure ");
dataFile.println(";");
}
dataFile.close();
i++;
// print to the serial port too:
Serial.println(etat);
}
// if the file isn't open, pop up an error:
else {
Serial.println("erreur ouverture datalog.txt");
}
}
// VI - FONCTION SETUP
// C’est le code d'initialisation. La fonction setup () est exécutée en premier et 1 seule fois, au démarrage du programme
void setup() { // debut de la fonction setup()
pinMode(ILS, INPUT); //met la broche en entrée
pinMode(LEDVERT, OUTPUT); //met la broche 3 en sortie
pinMode(LEDROUGE, OUTPUT); //met la broche 6 en sortie
digitalWrite(ILS, HIGH) ; // activation du pullup de la broche en entrée
// Open serial communications and wait for port to open:
Serial.begin(57600);
rtc.begin(DateTime(__DATE__, __TIME__));/**************/
Serial.print("Initialisation de la carte...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);
if (!SD.begin(chipSelect)) {
Serial.println("Absence de la carte !");
return;
}
Serial.println("carte SD correcte.");
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) {
dataFile.print("No");
dataFile.print(";");
dataFile.print("Temps"); // temps depuis que l'arduino est allumé. Remplacer plus tard avec l'implantation d'une vrai horloge
dataFile.print(";");
dataFile.print("Action");
dataFile.print(";");
dataFile.print("DateTime now");
dataFile.println(";");
dataFile.close();
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.txt");
}
LAST_ILS=ETAT_ILS;
{
rtc.begin(DateTime(__DATE__, __TIME__));
}
} // fin de la fonction setup()
// VII - FONCTION LOOP
// la fonction loop coeur du programme () s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void loop(){ // debut de la fonction loop()
// Instructions à exécuter par le programme principal
ETAT_ILS=digitalRead(ILS); // lit l'état du BP et met la valeur 0/1 dans la variable
if (LAST_ILS!=ETAT_ILS)
{
enregistrer(ETAT_ILS);
}
LAST_ILS=ETAT_ILS;
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println();//saut de ligne
if (ETAT_ILS==FERMETURE){ // si la porte est fermée (c’est-à-dire si la variable état ILS = 0
// Attention à bien utiliser == et non =
digitalWrite(LEDROUGE,0); // allume la LED ROUGE
delay (100);
digitalWrite(LEDVERT,1); // éteint la LED VERT
delay(100);
}
else { // sinon (c’est-à-dire si variable état ILS=1)
digitalWrite(LEDROUGE,1); // éteint la LED ROUGE
delay(100);
digitalWrite(LEDVERT,0); // allume la LED VERT
delay(100);
}
} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
/*
No;Temps;Action;DateTime now;
1 ; 288 ; fermeture ; Date et heure No;Temps;Action;DateTime now;
1 ; 268 ; fermeture ; Date et heure No;Temps;Action;DateTime now;
1 ; 250 ; fermeture ; Date et heure 2 ; 9928 ; ouverture ; Date et heure ;
3 ; 13569 ; fermeture ; Date et heure 4 ; 16822 ; ouverture ; Date et heure ;
5 ; 20664 ; fermeture ; Date et heure 6 ; 23499 ; ouverture ; Date et heure ;
*/