Go Down

Topic: If avec condition de date (Read 481 times) previous topic - next topic

timoth31

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: [Select]
#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();
   }

haifger

Bonjour,
Code: [Select]

if ((now.month() <= 3) || (now.month() >= 10)) {
...
}

Ça devrait faire l'affaire.

timoth31

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

B@tto

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

timoth31

Code: [Select]
#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();
   }

fdufnews

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.

john_lenfr

Et éventuellement retire les { et } inutiles

timoth31

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

B@tto

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: [Select]
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
...
}




timoth31

#9
Apr 24, 2014, 08:27 pm Last Edit: Apr 24, 2014, 08:53 pm by timoth31 Reason: 1
merci beaucoup enfin ça marche  :)

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

Go Up