Go Down

Topic: Déclencher action avec DS1307 (Read 1 time) previous topic - next topic

gunsman76

Bonjour à tous,


Je patauge complètement avec le DS1307. Ce n'est pas les tutos qui manque, mais en fait je cherche tout simplement à déclencher un relay à une heure donnée pendant un certain nombre de seconde. En fait je n'arrive à rien.


Code: [Select]

if (hour() == 14 && minute() == 28)  {
  digitalWrite (relais,HIGH);
  lcd.setCursor(0,1);
  lcd.print("déclenche action1");



J'ai bien la librairie chargé.


Il n'y aurait t'il pas une façon de faire qui fonctionne parfaitement en tenant par exemple compte du jour ?


Merci pour votre aide


:smiley-roll-sweat:

patg_

#1
Apr 25, 2013, 03:45 pm Last Edit: Apr 25, 2013, 03:47 pm by patg_ Reason: 1
Je ne comprends pas trop ton problème.
J'utilise aussi un DS1307 pour déclencher des actions entre certaines plages horaire.
Il suffit de tester que la date/heure est entre les bornes souhaitées.

Quel est ton problème exactement?
Quelle librairie utilises-tu?
Exemple d'utilisation avec la RTClib qui récupère toutes les infos, dont le jour:
https://github.com/adafruit/RTClib/blob/master/examples/ds1307/ds1307.pde

Dans ton exemple de code ça déclenche ton action pendant une minute tous les jours à 14h28.
Mes Arduineries: http://breizhmakers.over-blog.com/

gunsman76

Merci pour ton aide,

Je vais mettre le code au complet, je pense qu'il y a de toute façon un problème, car je n'arrive pas à compiler...

Code: [Select]



#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>

RTC_DS1307 RTC;

const int relais=3;
//const int inter=4;



LiquidCrystal lcd(8, 9, 4, 5, 6, 7);




void setup() {
  // set up LCD indication nb colonne et case:
  lcd.begin(16, 2);
  lcd.clear();
  delay(10);
  // Print a message to the LCD.
  lcd.setCursor(2,0);
  lcd.print("Mon");
  lcd.setCursor(2,1);
  lcd.print("programme");
  delay(2000);
  lcd.clear();
  delay (10);
 
  pinMode (relais, OUTPUT);


    Serial.begin(57600);
    Wire.begin();
    RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

 
 
// RTC.adjust(DateTime(__DATE__, __TIME__));
 
 



 
void loop() {

  //digitalWrite (relay,LOW);
 
//  RTC.adjust(DateTime(__DATE__, __TIME__));
 
  DateTime now = RTC.now();
  lcd.home ();
  lcd.print (now.day(),DEC);
  lcd.print("/");
  lcd.print (now.month(),DEC);
  lcd.print("/");
  lcd.print (now.year(),DEC);
  lcd.print("  ");
  lcd.print (now.hour(),DEC);
  lcd.print(":");
  lcd.print(now.minute(), DEC);
  //lcd.print(":");
  //lcd.print(now.second(), DEC);

// programme


if (hour() == 14 && minute() == 28)  {
  digitalWrite (relais,HIGH);
  lcd.setCursor(0,1);
  lcd.print("déclenche action1");

}

skywodd

Bonjour,

Code: [Select]
#include "RTClib.h"
->
Code: [Select]
#include <RTClib.h>

Et il manque une accolade fermante à la fin de ton programme ;)
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

68tjs

Si tu veux que ce soit le DS1307 qui prenne l'initiative de déclencher l'action ce circuit ne le permet pas-> voir sa fiche technique (datasheet).

Je n'ai pas de référence mais je sais qu'il existe d'autres circuits qui le font.
Une recherche gogole avec "RTC Real time clock" pourra être  causante.

Sinon il reste la voie logicielle comme patg_ te la dit.

gunsman76

J'ai fait les corrections, ça ne compile toujours pas...


Portail_new.ino: In function 'void loop()':
Portail_new:74: error: 'hour' was not declared in this scope
Portail_new:74: error: 'minute' was not declared in this scope

B@tto


J'ai fait les corrections, ça ne compile toujours pas...


Portail_new.ino: In function 'void loop()':
Portail_new:74: error: 'hour' was not declared in this scope
Portail_new:74: error: 'minute' was not declared in this scope


Il faudrait peut-être déclarer les variables "hour" et "minute" ...
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

gunsman76

Je vous avoue franchement que je patauge royalement


J'ai déclaré ma librairie, la DS1307 est à l'heure, je demande juste qu'à tel heure une action quelconque se déclenche.


ça parait tout simple, mais en fait c'est super complexe.


Ou alors je n'ai pas la bonne librairie ?

skywodd


J'ai fait les corrections, ça ne compile toujours pas...

hour() -> now.hour()
minute() -> now.minute()

Faudrait chercher à réfléchir parfois ;)

@68tjs le PCF8583 (par exemple) a une alarme hardware.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

gunsman76

là ça compile direct !!!

J'essaye maintenant...

gunsman76

Skywodd, ça fait plusieurs fois que tu me dépannes, je te remercie...


Les explications ne sont pas très clair, ou alors je n'ai pas les bons livres pour apprendre. Pourtant on ne peut pas dire que je n'essaye pas, je passe mes après midi dessus.  :P

gunsman76

ok merci à tous, ça fonctionne impeccable !


Maintenant si je veux lancer une action a tel heure le lundi, et à tel heure le mardi (pas la même heure pour les 2 jours)


Je procède comment ?



Et merci à tous pour votre aide !

gunsman76

Je vais me répondre, afin que ça serve aux autres :

Code: [Select]

if (now.dayOfWeek() == 4 && now.hour() == 17 && now.minute() == 17 && now.second() == 59) {
  digitalWrite (relais,HIGH);
  lcd.setCursor(0,1);
  lcd.print("declenche action");
  delay (1000);
  digitalWrite (relais,LOW);
  lcd.clear();


Il me suffit de faire autant d'if que j'ai besoin de déclenchement


J'ai bon ? ou il y a plus simple ?

patg_

#13
Apr 25, 2013, 05:25 pm Last Edit: Apr 25, 2013, 05:28 pm by patg_ Reason: 1
Non y'a pas vraiment d'autre solution.
Mais tu peux chercher à simplifier tes if() en en mettant plusieurs en cascade par exemple, ça rend parfois le code plus lisible
genre en pseudo code
Code: [Select]
if(lundi)
{
if(heure=x && min==y)
{
//...
}
}

if(mardi)
{
//...
}


Quand on débute c'est plus lisible que:
Code: [Select]
if((lundi && heure==x && min==y)
|| (mardi && heure==xx && min==yy))
{
//...
}
Mes Arduineries: http://breizhmakers.over-blog.com/

gunsman76

Ok toute façon je n'ai que 5 jours en tout, donc le code sera assez limité.



Un grand merci à tout le monde, car ça fait fait quand même 4 jours que je suis bloqué sur ce problème...

Go Up