Pages: [1]   Go Down
Author Topic: If avec condition de date  (Read 308 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour, je souhaite programmer un affichage selon certains mois de l'année, a l'aide d'un "if".
Je m'explique en gros si la date est comprise entre le 10 et le 03 alors le lcd affiche "store fermer"
le probleme c'est que je ne trouve pas quoi ecrire a la place de "date"

Code:
#include <Wire.h>
#include <RTClib.h>
#include "rgb_lcd.h"
#include <math.h>

rgb_lcd lcd;

const int colorR = 100;
const int colorG = 150;
const int colorB = 255;

int a;
float temperature;
int B=3435;                  //B value of the thermistor
float resistance;

int c;
float eau;                 
float resistance2;

RTC_DS1307 RTC;

void setup() {
  Wire.begin();
  RTC.begin();
  lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);
}

void loop() {
  DateTime now = RTC.now();
 
 
  lcd.setCursor(0, 1);
  lcd.print(now.hour());
  lcd.print(":");
  if (now.minute() < 10) {
    lcd.print("0");
  }
  lcd.print(now.minute());
  lcd.print(":");
  if (now.second() < 10) {
    lcd.print("0");
  }
  lcd.print(now.second());
 
 
 
  lcd.setCursor(0, 0);
  lcd.print(now.day());
  lcd.print("/");

  switch (now.month()) {
  case 1:
    lcd.print("01");
    break;
  case 2:
    lcd.print("02");
    break;
  case 3:
    lcd.print("03");
    break;
  case 4:
    lcd.print("04");
    break;
  case 5:
    lcd.print("05");
    break;
  case 6:
    lcd.print("06");
    break;
  case 7:
    lcd.print("07");
    break;
  case 8:
    lcd.print("08");
    break;
  case 9:
    lcd.print("09");
    break;
  case 10:
    lcd.print("10");
    break;
  case 11:
    lcd.print("11");
    break;
  case 12:
    lcd.print("12");
    break;
  }
  lcd.print("/");
  lcd.print(now.year());
  delay(1000);
 
  {
    a=analogRead(1);
    resistance=(float)(1023-a)*10000/a; //get the resistance of the sensor;
    temperature=1/(log(resistance/10000)/B+1/298.15)-273.15;//convert to temperature via datasheet ;
    lcd.setCursor(11, 0);
    lcd.print((char)223);
    lcd.print("C:");
    lcd.println(temperature);
}
{
    c=analogRead(0);
    resistance2=(float)(1023-c)*10000/c; //get the resistance of the sensor;
    lcd.setCursor(10, 1);
    lcd.print("H:");
    lcd.println(c);
   
}
 delay(600000);
 lcd.clear();
 StoreStatue();
}
 void StoreStatue() {
   
   if (c < 200)
   {
     lcd.setCursor(0, 0);
     lcd.print("fermer store");
     delay(5000);
     lcd.clear();
   }
   
   if (date = 10, 11, 12, 01, 02, 03)
   {
     lcd.setCursor(0, 0);
     lcd.print("fermer store");
     delay(5000);
     lcd.clear();
   }
Logged

Offline Offline
Sr. Member
****
Karma: 12
Posts: 277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Code:
if ((now.month() <= 3) || (now.month() >= 10)) {
 ...
}
Ça devrait faire l'affaire.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci pour cette reponse mais arduino m'affiche ces erreurs
Programme_final_et_void2.ino: In function 'void StoreStatue()':
Programme_final_et_void2:149: error: 'now' was not declared in this scope
Logged

Ales
Online Online
Faraday Member
**
Karma: 39
Posts: 3597
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sans code on est pas devin, tout ce qu'on te dire c'est que c'est ligne 149 ...
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#include <Wire.h>
#include <RTClib.h>
#include "rgb_lcd.h"
#include <math.h>

rgb_lcd lcd;

const int colorR = 100;
const int colorG = 150;
const int colorB = 255;

int a;
float temperature;
int B=3435;                  //B value of the thermistor
float resistance;

int c;
float eau;                 
float resistance2;

RTC_DS1307 RTC;

void setup() {
  Wire.begin();
  RTC.begin();
  lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);
}

void loop() {
  DateTime now = RTC.now();
 
 
  lcd.setCursor(0, 1);
  lcd.print(now.hour());
  lcd.print(":");
  if (now.minute() < 10) {
    lcd.print("0");
  }
  lcd.print(now.minute());
  lcd.print(":");
  if (now.second() < 10) {
    lcd.print("0");
  }
  lcd.print(now.second());
 
 
 
  lcd.setCursor(0, 0);
  lcd.print(now.day());
  lcd.print("/");

  switch (now.month()) {
  case 1:
    lcd.print("01");
    break;
  case 2:
    lcd.print("02");
    break;
  case 3:
    lcd.print("03");
    break;
  case 4:
    lcd.print("04");
    break;
  case 5:
    lcd.print("05");
    break;
  case 6:
    lcd.print("06");
    break;
  case 7:
    lcd.print("07");
    break;
  case 8:
    lcd.print("08");
    break;
  case 9:
    lcd.print("09");
    break;
  case 10:
    lcd.print("10");
    break;
  case 11:
    lcd.print("11");
    break;
  case 12:
    lcd.print("12");
    break;
  }
  lcd.print("/");
  lcd.print(now.year());
  delay(1000);
 
  {
    a=analogRead(1);
    resistance=(float)(1023-a)*10000/a; //get the resistance of the sensor;
    temperature=1/(log(resistance/10000)/B+1/298.15)-273.15;//convert to temperature via datasheet ;
    lcd.setCursor(11, 0);
    lcd.print((char)223);
    lcd.print("C:");
    lcd.println(temperature);
}
{
    c=analogRead(0);
    resistance2=(float)(1023-c)*10000/c; //get the resistance of the sensor;
    lcd.setCursor(10, 1);
    lcd.print("H:");
    lcd.println(c);
   
}
 delay(600000);
 lcd.clear();
 StoreStatue();
}
 void StoreStatue() {
   
   if (c < 200)
   {
     lcd.setCursor(0, 0);
     lcd.print("fermer store");
     delay(5000);
     lcd.clear();
   }
   
   if ((now.month() <= 3) || (now.month() >= 10))
   {
     lcd.setCursor(0, 0);
     lcd.print("fermer store");
     delay(5000);
     lcd.clear();
   }
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3438
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le message renvoyé par le compilateur est clair! Il dit que now n'est pas défini dans la fonction StoreStatue(). Ce qui est parfaitement vrai puisque now est une variable locale à loop().
Donc soit tu définis now en global soit passe now en argument à ta fonction.
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 907
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Et éventuellement retire les { et } inutiles
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je comprend pas, desolé je commence tout juste a bosser avec arduino
Logged

Ales
Online Online
Faraday Member
**
Karma: 39
Posts: 3597
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

now est défini dans la loop() avec DateTime now = RTC.now();

Toute variable existe dans un environnement donné. Ici now n'existe que dans loop(). Dans ta fonction StoreStatue() elle n'existe pas. Donc soit tu déclares now en globale (avant setup() quoi) et tu la mets à jour avec now = RTC.now(); , soit tu passe now en paramètre de ta fonction comme ça

Code:
void loop()
...
StoreStatue(now);
}

void StoreStatue (DateTime now) { // ici now n'est pas le même que celui de loop() mais sera identique en tout point
...
}


Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci beaucoup enfin ça marche  smiley

du coup je voulais savoir comment mettre des priorité sur ces condition sachant que la pluie est la plus haute priorité, l'heure de la journée juste après et la température et la période de l'année sont équivalent.
par exemple :
si heure de la journée, période, température permettent l'ouverture, mais qu'il pleut le store se fermera quand même.
car la ça m'afficher ouvrir puis fermer
EDIT: je voulais savoir si c'etait possible de n'afficher qu'une seule fois la fermeture, car la elle s'affiche trois fois avec un delay(1000) puis il affiche ouvrir store
EDIT 2 : j'ai des signes bizarre quand je veux afficher l'humidité (c) sur mon lcd et que la valeur n'est pas a quatres chiffres
« Last Edit: April 24, 2014, 01:53:01 pm by timoth31 » Logged

Pages: [1]   Go Up
Jump to: