Aide avant achat

Yep!

Quel erreur te retourne le logiciel ?

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Mega 2560 or Mega ADK"
prog.ino:13:17: error: invalid digit "9" in octal constant
In file included from prog.ino:1:
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:12: error: expected )' before 't' C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:13: error: expected )' before 'year'
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:17: error: expected ',' or '...' before '*' token
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:17: error: ISO C++ forbids declaration of '__FlashStringHelper' with no type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:18: error: 'uint16_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:19: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:20: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:21: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:22: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:23: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:24: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:29: error: 'uint32_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:36: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:42: error: expected )' before 'seconds' C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:43: error: expected )' before 'days'
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:45: error: 'int16_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:46: error: 'int8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:47: error: 'int8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:48: error: 'int8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:49: error: 'int32_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:55: error: 'int32_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:63: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:65: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:69: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:71: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:71: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
prog.ino: In function 'void loop()':
prog:13: error: 'hour' was not declared in this scope
prog:13: error: 'minute' was not declared in this scope
prog:17: error: 'hour' was not declared in this scope
prog:17: error: 'minute' was not declared in this scope

A ok, il faut que je déclare les variables du temps c'est bien ca ? Pourtant j'ai telecharger sur un site la librairie du rtc (RTClib.h)

La librairie est bourrée d'erreur apparement !!!

Tu l'as récupéré où ?

EDIT : Tu as bien inclu la librairie dans ton sketch ??

Oui elle est declaré.

Bon une erreur d'ecriture apparement mais j'ai une autre erreur:

#include <RTClib.h>

const int output = 48;
boolean etat48 = 0;

void setup() {
Serial.begin(9600);
pinMode(48, OUTPUT);
}

void loop(){

if (now.hour() == 9 && now.minute() == 30 && now.second() == 00)
etat48=!etat48; // inverse l'état du relais
digitalWrite(48,etat48); // met la broche de commande dans l'état voulu

if (now.hour() == 19 && now.minute() == 0 && now.second() == 00)
etat48=!etat48; // inverse l'état du relais
digitalWrite(48,etat48);
}

Sur la ligne if (now.hour() == 9 && now.minute() == 30 && now.second() == 00)

erreur:

This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Mega 2560 or Mega ADK"
In file included from prog.ino:1:
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:12: error: expected )' before 't' C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:13: error: expected )' before 'year'
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:17: error: expected ',' or '...' before '*' token
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:17: error: ISO C++ forbids declaration of '__FlashStringHelper' with no type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:18: error: 'uint16_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:19: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:20: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:21: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:22: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:23: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:24: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:29: error: 'uint32_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:36: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:42: error: expected )' before 'seconds' C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:43: error: expected )' before 'days'
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:45: error: 'int16_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:46: error: 'int8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:47: error: 'int8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:48: error: 'int8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:49: error: 'int32_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:55: error: 'int32_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:63: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:65: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:69: error: 'uint8_t' does not name a type
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:70: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:71: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:71: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
C:\Users\Lecordier\Documents\Arduino\libraries\RTClib-master/RTClib.h:72: error: 'uint8_t' has not been declared
prog.ino: In function 'void loop()':
prog:13: error: 'now' was not declared in this scope
prog:17: error: 'now' was not declared in this scope

Attends de l'aide de quelqu'un d'autre.

Personnellement j'utilise la librairie Time : Arduino Playground - Time

Dans laquelle on retrouve des fonctions (peut-être communes à toutes les librairies) hour(), minute(), now().

Bon courage.

@+

Zoroastre.

J'ai utilisé ta librairie est c'est pareil.

C'est plus compliqué que prévu :s

j'ai un peu l'impression que tu fait un mix de ton premier programme qui n'utilise pas de librairie et ton second qui est sensé en utiliser une....

je viens de m'amuser à essayer d'intégrer ton soft dans ton premier programme, il compile mais pas vérifié s'il fonctionne (pas à l'abri d'une erreur), essai voir ce bout de code :

#include "Wire.h"

#define DS1307_ADDRESS 0x68

byte zero = 0x00; //workaround for issue #527
  // déclarations faites en tête pour être globales
  int second;
  int minute;
  int hour;
  int weekDay;
  int monthDay;
  int month;
  int year;
  
  // tes déclarations
  const int output = 48;
  boolean etat48 = 0;
   
//-------------------------------------    
void setup()
{

  Wire.begin();
  Serial.begin(9600);
  //setDateTime(); //ligne a décommenter pour mise à l'heure
  pinMode(48, OUTPUT);

}
//-------------------------------------
void loop()
{
  // lancement de la lecture de l'heure
  printDate();
  
  // ton programme
  if (hour == 9 && minute == 30 && second == 00)
  etat48=!etat48; // inverse l'état du relais
   digitalWrite(48,etat48); // met la broche de commande dans l'état voulu
  
  if (hour == 19 && minute == 0 && second == 00)
  etat48=!etat48; // inverse l'état du relais
  digitalWrite(48,etat48);
   
  delay(100);
}
//-------------------------------------

void setDateTime()
{
  // modifié en supprimant les déclarations car faites en tête pour être globales
  byte second =      00; //0-59
  byte minute =      22; //0-59
  byte hour =        22; //0-23
  byte weekDay =     3; //1-7
  byte monthDay =    17; //1-31
  byte month =       12; //1-12
  byte year  =       14; //0-99
  
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(zero); //start
  Wire.endTransmission();
}
//-------------------------------------
byte decToBcd(byte val)
{
// Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}
//-------------------------------------
void printDate()
{
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);

  // modifié en supprimant les déclarations car faites en tête pour être globales
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  monthDay = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());

  //print the date EG   3/1/11 23:59:59
  Serial.print(month);
  Serial.print("/");
  Serial.print(monthDay);
  Serial.print("/");
  Serial.print(year);
  Serial.print(" ");
  Serial.print(hour);
  Serial.print(":");
  Serial.print(minute);
  Serial.print(":");
  Serial.println(second);
}

C'est bon ca compil :slight_smile: merci.

Donc apres si je rajoute des sortie arduino (il m'en faut 8 je rajoute les uns sous les autres:

const int output = 49;
boolean etat49 = 0;
etc....

pinMode(49, OUTPUT);
etc....

if (hour == 9 && minute == 30 && second == 00)
etat49=!etat49; // inverse l'état du relais
digitalWrite(49,etat49); // met la broche de commande dans l'état voulu

if (hour == 19 && minute == 0 && second == 00)
etat49=!etat49; // inverse l'état du relais
digitalWrite(49,etat49);

etc...etc...

Oui si les relais fonctionnent à la meme heure je peut faire:

if (hour == 9 && minute == 30 && second == 00)
etat48=!etat48; // inverse l'état du relais
etat49=!etat49;
digitalWrite(48,etat48); // met la broche de commande dans l'état voulu
digitalWrite(49,etat49);
etc...

if (hour == 19 && minute == 0 && second == 00)
etat48=!etat48; // inverse l'état du relais
etat49=!etat49;
digitalWrite(48,etat48);
digitalWrite(49,etat49);
etc....

Merci grandement de ton aide :slight_smile:

tip-top si mon petit post t'as permis d'avancer ! :smiley:

ce que tu décris devrais effectivement être une solution qui fonctionne,
je me permet néanmoins (avec mon niveau de newbie) une ou deux petites remarques :

  • je ne pense pas qu'inverser les sorties avec des etat=!etat soit le plus approprié, imagine le cas suivant :
    ton test pour éteindre est à 20h00, il est 20h01, ton éclairage est donc arrêté.
    Pour une raison ou une autre (chgt d'heure par ex), tu fait une mise à l'heure manuelle en la réglant a 19h00. Arrivé à 20h00, tu vas inverser la sortie et allumer ton aquarium jusqu'au lendemain matin. En fait tu auras inversé les cycles jours/nuit....
    Il me semble donc plus intéressant de rester basique et faire etat=1 lorsqu'il faut allumer et etat=0 quand tu veux éteindre.

  • dans la même veine, je préfère faire les tests de temps sur le principe action quand time comprise entre début et fin plutôt que sur l'égalité time = début ou time=fin.
    ce qui donnerais un truc du style :
    si début > time et fin < time alors allumé sinon éteint
    la raison est que Murphy passant toujours là où on l'attends pas, il y auras toujours un cas où le test d'égalité ne seras pas exécuté.
    La contrainte avec ce raisonnement est qu'il faut créer une variable "time" qui représente les heures ET les minutes, ça pourrait être du style time= (heure100)+minute ce qui se représenterait sous la forme 0810 pour 8h10 ou sous la forme d'un compteur journalier de minute (heure60)+minute.
    Dans mon cas, j'utilise un compteur de paire de seconde (s'incrémente de 1 toutes les 2 s)

et d'expérience, tu te rendras vite compte qu'un afficheur lcd et quelques boutons seront bien pratiques pour voir l'état de ton automate / lire des températures ou autres et faire des actions telles que régler l'heure ou les durées d'allumage de ton aqua (désolé, pour le coup là en rajoutes à ton projet.. :wink: )

Ce n'ai pas pour un éclairage mon programme.

Car j'utilise déjà un boitier babyfish.

Voir mon aquarium: Démarrage 300L - Aquariophilie.org

Mon but avec l'arduino c'est de:

-Alimenter/couper la diffusion de CO2
-Alimenter/couper la ventilation de mes led et du boitier indépendamment
-Couper les alim de mes leds (car avec babyfish il y a une rémanence de courant qui fait que les leds meme à 0 sont allumé légèrement).

Le tout géré avec l'heure.

Pour le changement d'état relai en effet donc:

const int output = 49;
boolean etat49 = 0;
etc....

pinMode(49, OUTPUT);
etc....

if (hour == 9 && minute == 30 && second == 00)
etat49=1;
digitalWrite(49,etat49);

if (hour == 19 && minute == 0 && second == 00)
etat49=0;
digitalWrite(49,etat49);

etc...etc...

Oui si les relais fonctionnent à la meme heure je peut faire:

if (hour == 9 && minute == 30 && second == 00)
etat48=1;
etat49=1;
digitalWrite(48,etat48);
digitalWrite(49,etat49);
etc...

if (hour == 19 && minute == 0 && second == 00)
etat48=0;
etat49=0;
digitalWrite(48,etat48);
digitalWrite(49,etat49);
etc....

Tu peux peut-être essayé cette librairie.

pour tester!

Salut

Pour gérer un programmateur horaire, il y a bien plus simple et moins sujet à soucis de mise au point, bug etc.

Par exemple, qu'est-ce qui se passe avec ton code, si ton arduino démarre en milieu de journée (genre suite à une micro coupure électrique) ?

Oublions nos pauvres neurones humains qui raisonnent en heure/minute/seconde, et mettons nous un instant à la place d'un arduino. Enfin, façon de parler.

Bref tout ça pour dire : il vaut mieux gérer le temps dans le programme, avec autre chose que heure minute seconde.

Par exemple, utilise un entier pour y stocker le nombre de minutes écoulées depuis minuit.
Sa plage de valeur va donc être de 0 à 1439

Cela peut donner un code du style

const int heure_debut = 9;
const int minute_debut = 30;

const int heure_fin = 21;
const int minute_fin = 15;

const int horaire_debut = heure_debut * 60 + minute_debut;
const int horaire_fin = heure_fin * 60 + minute_fin;

...

int etat_led = 0;

...

loop()
{
...
  int horaire = heure_ds1307 * 60 + minute_ds1307;

  if ((horaire_debut <= horaire) && (horaire <= horaire_fin)
  {
    if (etat_led == 0)
    {
       AllumerLed();
       etat_led = 1;
    }
  }
  else
  {
    if (etat_led != 0)
    {
       EteindreLed();
       etat_led = 0;
    }
  }

...
}

+1 pour Bricoleau.

Par contre l'égalité n'est pas nécessaire ici :

if ((horaire_debut < horaire) && (horaire < horaire_fin))

:stuck_out_tongue:

Presque !!

Disons que quand l'humain moyen dit "la lumière doit s'allumer à telle heure et s'éteindre à telle heure", le code associé serait :

  if ((horaire_debut <= horaire) && (horaire < horaire_fin))

;D

:grinning:

Bonsoir,
Il te faut une instance RTC.
Regarde l'exemple suivant et tu trouveras tes oublis.
@+

Powac powac , un aspirine garçon.

Je suis perdu la :frowning:

En tout cas merci de votre aide :slight_smile:

Re,
Où se situe ton problème ?

Mon problème c'est que je vois ce que je veux faire, j'arrive a voir la façon de faire, mais je n'arrive pas à le faire (le programmer quoi).

Je n'arrive pas a mettre tous les bouts ensembles.

Re,
Juste une petite précision lorsque tu écris :

if (hour == 9 && minute == 30 && second == 00)
  etat49=!etat49; // inverse l'état du relais
   digitalWrite(49,etat49); // met la broche de commande dans l'état voulu

Il n'y a que la ligne qui suit ton if qui est exécutée lorsque la condition est vrai.
Pour que les deux lignes soient exécutées il faut :

if (hour == 9 && minute == 30 && second == 00){
  etat49=!etat49; // inverse l'état du relais
   digitalWrite(49,etat49); // met la broche de commande dans l'état voulu
}

Les parenthèses sont obligatoires.
@+