Re : Bouton poussoir et carte sd

Bonsoir à tous,

Comme c'est souvent le cas, le chantier a été plus long que prévu.

J'ai cependant eu le temps de commander à la boutique de Semageek l'horloge  RTC et aujourd'hui  un courriel m'informe que ma commande est partie. Il est donc certain que dans le début de la semaine, je vais pouvoir avec votre aide, commencer à insérer l'horloge temps réel dans le programme pour dater les événements.

Bon dimanche à tous.

Guy.

Re : Bouton poussoir et carte sd

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 ;

*/

28

Re : Bouton poussoir et carte sd

Je regarde ça en rentrant ce soir, mais je vois déjà des erreur de compréhension.
Pour les retours à la ligne, println écrit puis retourne à la ligne, alors que print écrit et laisse le curseur la ou il est.
Rtc.begin(datetime... Etc ça donne l'heure du Pc au module. Si ton module a une pile, tu n'écrit cette ligne qu'une seule fois puis tu la met en commentaire ou tu la supprime. Dans ton code tu la donne plusieurs fois. Tu peux complètement purger ton code de cette ligne, ton module rtc est réglé maintenant !

Re : Bouton poussoir et carte sd

Bonsoir à tous,

L’apprentissage conjoint avec le site du zéro continue.

Je viens de travailler les modifs de : print et println mais le résultat n’est pas merveilleux !

J’ai aussi supprimé Rtc.begin un seul subsiste et l’heure n’est pas synchro avec le PC !

Voici ce qui est inscrit sur la SD :


No;Temps;Action;DateTime now;1 ; 3917 ; fermeture ; 2 ; 7044 ; ouverture ; ;
3 ; 7672 ; fermeture ; 4 ; 10799 ; ouverture ; ;
5 ; 11628 ; fermeture ; 6 ; 14754 ; ouverture ; ;
7 ; 15784 ; fermeture ; 8 ; 18911 ; ouverture ; ;

Et voici ce que cherche à obtenir pour le lire sur un tableur.

No ; Temps ; Action ; Date et heure (après O/F de l’ILS)

1 ; 3917 ; fermeture ; ( à tel jour et telle heure)
2 ; 7044 ; ouverture ; ( à tel jour et telle heure)
3 ; 7672 ; fermeture ;
4 ; 10799 ; ouverture ;
5 ; 11628 ; fermeture ;
6 ; 14754 ; ouverture ;
7 ; 15784 ; fermeture ;
8 ; 18911 ; ouverture ;                   «

Cordialement,

Guy.

/* mardi 20 août à 19 h 11
 
 ** É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.print(";"); 
    dataFile.close();
    dataFile.println();//saut de ligne
  }  
  // 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();//saut de ligne
  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(3000);
  }

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin

30

Re : Bouton poussoir et carte sd

/* mardi 20 août à 19 h 11
 
 ** É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_DS1307 RTC;
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");
    }
    else
    {
      dataFile.print("ouverture");
    }

    dataFile.print(" ; "); 
    dataFile.print(now.day(), DEC);
    dataFile.print('/');
    dataFile.print(now.month(), DEC);
    dataFile.print('/');
    dataFile.print(now.year(), DEC);
    dataFile.print(' ');
    dataFile.print(now.hour(), DEC);
    dataFile.print(':');
    dataFile.print(now.minute(), DEC);
    dataFile.print(':');
    dataFile.print(now.second(), DEC);
    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);
    Wire.begin();
    RTC.begin();
 
  if (! RTC.isrunning()) {
    Serial.println("RTC introuvable!");
    // commenter la ligne suivante quand le bon fonctionnement du module est constaté
    RTC.adjust(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("Heure");
    dataFile.println(";");//saut de ligne
    dataFile.close();
    
  }  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  } 

  LAST_ILS=ETAT_ILS;
} // 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();

  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(3000);
  }

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin

Essai ça pour voir ?

Re : Bouton poussoir et carte sd

Une info à la compilation :

"now" was not declared in this cope

32

Re : Bouton poussoir et carte sd

/* mardi 20 août à 19 h 11
 
 ** É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_DS1307 RTC;
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");
    }
    else
    {
      dataFile.print("ouverture");
    }

    dataFile.print(" ; "); 
    dataFile.print(now.day(), DEC);
    dataFile.print('/');
    dataFile.print(now.month(), DEC);
    dataFile.print('/');
    dataFile.print(now.year(), DEC);
    dataFile.print(' ');
    dataFile.print(now.hour(), DEC);
    dataFile.print(':');
    dataFile.print(now.minute(), DEC);
    dataFile.print(':');
    dataFile.print(now.second(), DEC);
    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);
    Wire.begin();
    RTC.begin();
 
  if (! RTC.isrunning()) {
    Serial.println("RTC introuvable!");
    // commenter la ligne suivante quand le bon fonctionnement du module est constaté
    RTC.adjust(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("Heure");
    dataFile.println(";");//saut de ligne
    dataFile.close();
    
  }  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  } 

  LAST_ILS=ETAT_ILS;
} // 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
DateTime now = RTC.now();
  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;


  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(3000);
  }

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin

La ça doit être bon.

Dernière modification par Rovhell (21-08-2013 06:26:38)

Re : Bouton poussoir et carte sd

re,

la même erreur que ci-dessus :"now" was not declared in this scope

 dataFile.print(" ; "); 
    [b]dataFile.print(now.day(), DEC);[/b]
    dataFile.print('/');
    dataFile.print(now.month(), DEC);
    dataFile.print('/');
    dataFile.print(now.year(), DEC);
    dataFile.print(' ');
    dataFile.print(now.hour(), DEC);
    dataFile.print(':');
    dataFile.print(now.minute(), DEC);
    dataFile.print(':');
    dataFile.print(now.second(), DEC);
    dataFile.println(";")
    dataFile.close();

34

Re : Bouton poussoir et carte sd

J'ai corrigé le dernier code que je t'ai envoyé. Problème de majuscule !

Re : Bouton poussoir et carte sd

Bonjour,

Veuillez m'excuser d'être aussi nul - le site du zéro va compenser ! -, mais :

J'ai corrigé le dernier code que je t'ai envoyé. Problème de majuscule ! m'indique quoi?

Que ce problème de majuscule est corrigé dans le programme précédemment envoyé ?

Mais en ce stech dans le compilateur, j'ai toujours la même indication et je n'ai pas pu déterminer  quellles sont les majuscules.

Cordialement,

Guy.

Le stech actualisé.

/* mercredi 21 août à 09 h 00
 
 ** É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_DS1307 RTC;
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");
    }
    else
    {
      dataFile.print("ouverture");
    }

    dataFile.print(" ; "); 
    dataFile.print(now.day(), DEC);
    dataFile.print('/');
    dataFile.print(now.month(), DEC);
    dataFile.print('/');
    dataFile.print(now.year(), DEC);
    dataFile.print(' ');
    dataFile.print(now.hour(), DEC);
    dataFile.print(':');
    dataFile.print(now.minute(), DEC);
    dataFile.print(':');
    dataFile.print(now.second(), DEC);
    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);
    Wire.begin();
    RTC.begin();
 
  if (! RTC.isrunning()) {
    Serial.println("RTC introuvable!");
    // commenter la ligne suivante quand le bon fonctionnement du module est constaté
    RTC.adjust(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("Heure");
    dataFile.println(";");//saut de ligne
    dataFile.close();
    
  }  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  } 

  LAST_ILS=ETAT_ILS;
} // 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
DateTime now = rtc.now();
  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;


  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(3000);
  }

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin

36

Re : Bouton poussoir et carte sd

Oui le dernier que j'ai posté, je l'ai corrigé. Les majuscules sont très importantes, et il y avait écrit

DateTime now = rtc.now();

Au lieu de

DateTime now = RTC.now();

donc tu peux refaire un copier/coller du dernier code que j'ai posté ou changer toi même cette phrase dans le code que tu as mis ce matin.

Re : Bouton poussoir et carte sd

Re,

J'ai exactement fait - au moins je le pense - ce que vous m'avez indiqué et j'ai vérifié dans les deux sketchs que RTC est en majuscule. A la compilation j'ai toujours ce message ::"now" was not declared in this scope.

Le problème ne viendrait-il pas de mon PC.

38

Re : Bouton poussoir et carte sd

Bon, j'ai testé là, et ce coup-ci ça fonctionne !

/* mardi 20 août à 19 h 11
 
 ** É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_DS1307 RTC;
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 a=1;

// Initialisation des fonctionnalités utilisées

void enregistrer(int etat);

// 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);
    Wire.begin();
    RTC.begin();
 
  if (! RTC.isrunning()) {
    Serial.println("RTC introuvable!");
    // commenter la ligne suivante quand le bon fonctionnement du module est constaté
    RTC.adjust(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("Heure");
    dataFile.println(";");//saut de ligne
    dataFile.close();
    
  }  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  } 

  LAST_ILS=ETAT_ILS;
} // 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;


  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(3000);
  }

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
void enregistrer(int etat)
{
DateTime now = RTC.now();
  // 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(a);
    dataFile.print(" ; "); 
    dataFile.print(millis());
    dataFile.print(" ; "); 

    if (etat==1) {
      dataFile.print("fermeture");
    }
    else
    {
      dataFile.print("ouverture");
    }

    dataFile.print(" ; "); 
    dataFile.print(now.day(), DEC);
    dataFile.print('/');
    dataFile.print(now.month(), DEC);
    dataFile.print('/');
    dataFile.print(now.year(), DEC);
    dataFile.print(' ');
    dataFile.print(now.hour(), DEC);
    dataFile.print(':');
    dataFile.print(now.minute(), DEC);
    dataFile.print(':');
    dataFile.print(now.second(), DEC);
    dataFile.println(";");
    dataFile.close();
    a++;
    // 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");
  } 
}

Re : Bouton poussoir et carte sd

Bonjour,

Cela MARCHE !

Je continu mon apprentissage et vous tiens au courant.

Trois fois merci à tous.

Guy.

Re : Bouton poussoir et carte sd

Bonjour à tous.

Tout en continuant avec le site du Zéro, je souhaiterais, si possible, une précision :

- La RTC prends de plus en plus de retard sur l'heure du PC. Aujourd'hui le retard est d'environ 2' 46"".

Je réinitialise la carte SD avec le programme de Grand Manitou, mais cela n'y change rien !

Malgré tout ce que j'ai déjà lu sur la RTC 1307, j'aimerai avoir votre avis.

Merci et cordialement à tous.

Guy.

41

Re : Bouton poussoir et carte sd

Guy-Roland-Pierre a écrit:

- La RTC prends de plus en plus de retard sur l'heure du PC. Aujourd'hui le retard est d'environ 2' 46"".

La pile est peut-être pas au mieux de sa forme... Essaie en une autre pour voir ?

Guy-Roland-Pierre a écrit:

Je réinitialise la carte SD avec le programme de Grand Manitou, mais cela n'y change rien !

Grand Manitou est le statut que le forum me donne en fonction de l'activité. "Rovhell" suffit  wink

Re : Bouton poussoir et carte sd

Bonsoir,

Ok, bien noté pour "Rovhell", mais c'est mon premier forum.

Je vais faire l'achat d'une autre pile et si c'est meilleur - je vous dirai cela dans la semaine - car cela confirmera une crainte d'Olivier de la boutique Semaggek.

Guy.

Re : Bouton poussoir et carte sd

Bonjour,

-  Une nouvelle pile neuve n'a rien changé. (Le retard s’amplifie. Ce matin, à 09 h 22, la différence avec l’heure du PC est d’environ 5 minutes).
- Olivier, de la boutique, va me faire parvenir un autre modèle de RTC que je vais essayer dans l’application actuelle et… de ma formation.
- Comme je m'absente quelques jours, je ne pourrais reprendre l'expérimentation avec la nouvelle RTC qu'aux environs du 10 septembre.

Merci, de m'avoir indiqué la boutique.  (J'attends d'avoir effectué d'autres commandes avant de faire un éloge écrasant sur la compétence et l’efficacité de l'ensemble : communauté + boutique).

Cordialement à tous.

Guy.