Pages: [1]   Go Down
Author Topic: Déclencher action avec DS1307  (Read 997 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Rennes
Offline Offline
Sr. Member
****
Karma: 0
Posts: 273
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: April 25, 2013, 08:47:35 am by patg_ » Logged


Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:


#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");

}
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Code:
#include "RTClib.h"
->
Code:
#include <RTClib.h>

Et il manque une accolade fermante à la fin de ton programme smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France S-O ou exil en IDF
Offline Offline
Edison Member
*
Karma: 25
Posts: 1904
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3197
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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" ...
Logged


Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai fait les corrections, ça ne compile toujours pas...
hour() -> now.hour()
minute() -> now.minute()

Faudrait chercher à réfléchir parfois smiley-wink

@68tjs le PCF8583 (par exemple) a une alarme hardware.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

là ça compile direct !!!

J'essaye maintenant...
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.  smiley-razz
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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 ?
Logged

Rennes
Offline Offline
Sr. Member
****
Karma: 0
Posts: 273
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
if(lundi)
{
 if(heure=x && min==y)
 {
 //...
 }
}

if(mardi)
{
//...
}

Quand on débute c'est plus lisible que:
Code:
if((lundi && heure==x && min==y)
 || (mardi && heure==xx && min==yy))
{
//...
}
« Last Edit: April 25, 2013, 10:28:12 am by patg_ » Logged


Offline Offline
Sr. Member
****
Karma: 0
Posts: 345
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Pages: [1]   Go Up
Jump to: