comment faire [RESOLU]

Bonjour a tous, voila je voudrais apporter une modification a mon programme mais je n'y arrive pas.
Je veux dire a mon programme ,dans la condition : si pendant 10min h>71 alors tu enclenche le relais jusqu'a atteindre 70,la je bloque.....

Voici mon code:

// Programme terrarium
#include <DHT.h>
#define DHTPIN 8// capteur humidité 
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int led = 13; //led fonctionnement
int relais = 7; // pompe a brumifier



#include <LiquidCrystal.h>
const int RS = 12;
const int E = 11;
const int D4 = 5;
const int D5 = 4;
const int D6 = 3;
const int D7 = 2;
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); // Initialisation du LCD
const int intTimePause = 100;

void setup ()
{
  lcd.begin(16, 1) ; // config écran
  delay(100);
  lcd.clear() ; // initialisé ecran
  delay(100);
  lcd.print("Hello Oscar");
  delay(10000);
  lcd.home();
  lcd.print("Fonction ok");
  delay(10000);
  lcd.clear();
  delay(10);
  pinMode(relais, OUTPUT) ; // config sorti pompe
  pinMode(led, OUTPUT);
  Serial.begin(9600) ;
  Serial.println(" bonjour christopher ") ;
}


void loop() {
  
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan (h))
  {
    lcd.print("erreur capteur!");
    delay(10000);
    lcd.clear();
    digitalWrite(relais, HIGH);
    return;
  }

  Serial.print("temperature:");
  Serial.print(t);
  Serial.print(" humidity:");
  Serial.print(h);
  Serial.println();

  lcd.setCursor(0, 0);
  lcd.print(" humi:");
  lcd.print(h);
  lcd.print("%" );
  
  if (h > 71)
  {
    delay(2000);
    digitalWrite(relais, HIGH);
    digitalWrite(led, HIGH);
  }
  else if (h < 70)
  {
    digitalWrite(relais, LOW);
    digitalWrite(led, LOW);
  }
}

Merci de votre aide et de vos conseil si vous avez d'autre idée afin d'amélioré le programme.

bonjour,
fonction millis()
ou alors tu laisse faire ton relais jusqu'à atteindre la bonne valeur avec un while et une lecture dans la boucle whle

heu ok mais je le mets ou tu peux me le montre la difference sur le code ,merci

du style pour 10mn

bool debut_min = false;
unsigned long start;


dans le loop
if ( h>71 && debut_min==false){
debut_min = true;
start = millis();
}
if (debut_min == true ){
while( millis() - start < 100000){
digitalWrite(relais, HIGH);
}
debut_min =false;
digitalWrite(relais, LOW;
}

Je ferais un truc dans le genre

// Programme terrarium
#include <DHT.h>
#define DHTPIN 8// capteur humidité 
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int led = 13; //led fonctionnement
int relais = 7; // pompe a brumifier

[b]int Top =0; // pas sûr du type de la variable à employer pour millis()
int Tps =0; // pas sûr du type de la variable à employer pour millis()
int TpsEcoule =0; // pas sûr du type de la variable à employer pour millis()

[/b]
#include <LiquidCrystal.h>
const int RS = 12;
const int E = 11;
const int D4 = 5;
const int D5 = 4;
const int D6 = 3;
const int D7 = 2;
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); // Initialisation du LCD
const int intTimePause = 100;

void setup ()
{
  lcd.begin(16, 1) ; // config écran
  delay(100);
  lcd.clear() ; // initialisé ecran
  delay(100);
  lcd.print("Hello Oscar");
  delay(10000);
  lcd.home();
  lcd.print("Fonction ok");
  delay(10000);
  lcd.clear();
  delay(10);
  pinMode(relais, OUTPUT) ; // config sorti pompe
  pinMode(led, OUTPUT);
  Serial.begin(9600) ;
  Serial.println(" bonjour christopher ") ;

[b]  Top = millis();[/b]

}


void loop() {
  
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan (h))
  {
    lcd.print("erreur capteur!");
    delay(10000);
    lcd.clear();
    digitalWrite(relais, HIGH);
    return;
  }

  Serial.print("temperature:");
  Serial.print(t);
  Serial.print(" humidity:");
  Serial.print(h);
  Serial.println();

  lcd.setCursor(0, 0);
  lcd.print(" humi:");
  lcd.print(h);
  lcd.print("%" );
  
  if (h > 71)
  {[b]

    Tps = millis();
    TpsEcoule = Top - Tps ;
  if ( TpsEcoule > 600000) // 10min en ms
{
    
    digitalWrite(relais, HIGH);
    digitalWrite(led, HIGH);
}[/b]
  }
  else if (h < 70)
  {
    digitalWrite(relais, LOW);
    digitalWrite(led, LOW);
  }
}

Là, comme ça , en mode debout depuis 10min , ça doit marcher :wink: !
Edit : les balises "gras" fonctionnent pas ..

je viens de tester ton programme mais il y a pblm BrUno014200, la vérifiaction me rejete l'écriture du programme

si t'as copié telquel , c'est surement à cause des **et ** qui trainent .. c'est sensé mettre le texte en gras pour que tu voies les modifs de ton programme ...

Après faut en dire plus sur ce qui plante ... les messages affichés par l'IDE , etc , on peut pas tout deviner .

voici le message d'erreure que j'obtien avec le code copier,coller

sketch_mar19a:9: error: expected unqualified-id before '[' token

int Top =0; // pas sûr du type de la variable à employer pour millis()
^
sketch_mar19a:13: error: expected unqualified-id before '[' token

^

sketch_mar19a:21: error: 'LiquidCrystal' does not name a type

LiquidCrystal lcd(RS, E, D4, D5, D6, D7); // Initialisation du LCD

^

C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In function 'void setup()':

sketch_mar19a:26: error: 'lcd' was not declared in this scope

lcd.begin(16, 1) ; // config écran

^

sketch_mar19a:42: error: 'b' was not declared in this scope

** Top = millis();**

^

C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In lambda function:

sketch_mar19a:42: error: expected '{' before 'Top'

** Top = millis();**

^

C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In function 'void setup()':

sketch_mar19a:42: error: expected ';' before 'Top'

sketch_mar19a:42: error: expected identifier before '/' token

** Top = millis();**

^

C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In lambda function:

sketch_mar19a:44: error: expected '{' before '}' token

}

^

C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In function 'void setup()':

sketch_mar19a:44: error: expected ';' before '}' token

C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In function 'void loop()':

sketch_mar19a:55: error: 'lcd' was not declared in this scope

lcd.print("erreur capteur!");

^

sketch_mar19a:68: error: 'lcd' was not declared in this scope

lcd.setCursor(0, 0);

^

sketch_mar19a:74: error: 'b' was not declared in this scope

{
** ^**
C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In lambda function:
sketch_mar19a:76: error: expected '{' before 'Tps'
** Tps = millis();**
** ^**
C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In function 'void loop()':
sketch_mar19a:76: error: expected ';' before 'Tps'
sketch_mar19a:77: error: 'Top' was not declared in this scope
** TpsEcoule = Top - Tps ;**
** ^**
sketch_mar19a:83: error: expected identifier before '/' token
}

^

C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In lambda function:

sketch_mar19a:84: error: expected '{' before '}' token

}

^

C:\Users\Prescilia\Documents\Arduino\sketch_mar19a\sketch_mar19a.ino: In function 'void loop()':

sketch_mar19a:84: error: expected ';' before '}' token

exit status 1
expected unqualified-id before '[' token

 if ( TpsEcoule > 600000) // 10min en ms

ca ne fait pas 10 minutes :wink:
1s = 1000 et non 6000
après il y a les accents qui mettent le bronx

me suis planté dans mon code

bool debut_min = false;
unsigned long start;


dans le loop
if ( h>71 && debut_min==false){
debut_min = true;
start = millis();
}
if (debut_min == true && millis() - start > 100000){
    digitalWrite(relais, HIGH;   

}else{
debut_min =false;
digitalWrite(relais, LOW);
}
}

oui j'ai foiré pour la conversion min -> ms :smiley:

@djlive : je me répète mais tu as copié telquel mon code ... enlève tout les "" et ""

d'accord je test

alors oui il me prend le programme en enlevant tout les ""et"" cependant, le relais s'allume dessuite non pas au bout de 10min

infobarquee,même chose avec ton idée je n'obtiens pas le résultat que je recherche.

Top = millis();

c'est inscrit dans le setup, donc dès que tu démarre le nono, la variable est prise en compte.

après tu as un autre truc,

   TpsEcoule = Top - Tps ;

au lieu de

   TpsEcoule =  Tps - Top ;

teste mon code :wink:

djlive:
infobarquee,même chose avec ton idée je n'obtiens pas le résultat que je recherche.

mets le code avec les modifs

avec les deux code sa me donne le même résultat le relais fonctionne de suite a la place d'attendre 10 min et de fonctionner après.
J'ai peut etre mal exprimé mon idée, voila j'ai un capteur mais je veux enclencher mon relais quand je suis inferieure a une valeur pendant trop longtemps et l'éteindre quand j'atteins la valeur idéal , exmple: plus de 10 min inferieure a 70= relais en fonctionnement jusqu'a atteindre 71.

Vu les boulettes que je fais , je vais m'interdire de donner du code avant 10h le matin :smiley: !

Et au bout de 10 min il se passe quoi ?

C'est pas juste une erreur High à la place de LOW ( ou inversement ) ?

Il nous faut ton code :wink: !

alors quand je mets ton code il ne'y aucun changement qui se produit.
code:

 // Programme terrarium
#include <DHT.h>
#define DHTPIN 8// capteur humidité 
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int led = 13; //led fonctionnement
int relais = 7; // pompe a brumifier

int Top =0; // pas sûr du type de la variable à employer pour millis()
int Tps =0; // pas sûr du type de la variable à employer pour millis()
int TpsEcoule =0; // pas sûr du type de la variable à employer pour millis()


#include <LiquidCrystal.h>
const int RS = 12;
const int E = 11;
const int D4 = 5;
const int D5 = 4;
const int D6 = 3;
const int D7 = 2;
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); // Initialisation du LCD
const int intTimePause = 100;

void setup ()
{
  lcd.begin(16, 1) ; // config écran
  delay(100);
  lcd.clear() ; // initialisé ecran
  delay(100);
  lcd.print("Hello Oscar");
  delay(10000);
  lcd.home();
  lcd.print("Fonction ok");
  delay(10000);
  lcd.clear();
  delay(10);
  pinMode(relais, OUTPUT) ; // config sorti pompe
  pinMode(led, OUTPUT);
  Serial.begin(9600) ;
  Serial.println(" bonjour christopher ") ;

 Top = millis();

}


void loop() {
  
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan (h))
  {
    lcd.print("erreur capteur!");
    delay(10000);
    lcd.clear();
    digitalWrite(relais, HIGH);
    return;
  }

  Serial.print("temperature:");
  Serial.print(t);
  Serial.print(" humidity:");
  Serial.print(h);
  Serial.println();

  lcd.setCursor(0, 0);
  lcd.print(" humi:");
  lcd.print(h);
  lcd.print("%" );
  
  if (h > 71)
  {

    Tps = millis();
    TpsEcoule = Tps - Top ;
  if ( TpsEcoule > 600000) // 10min en ms
{
    
    digitalWrite(relais, HIGH);
    digitalWrite(led, HIGH);
  }
  else if (h < 70)
  {
    digitalWrite(relais, LOW);
    digitalWrite(led, LOW);
  }
}

heuuuu, faut savoir ce que tu veux

i pendant 10min h>71 alors tu enclenche le relais jusqu'a atteindre 70

puis

voila j'ai un capteur mais je veux enclencher mon relais quand je suis inferieure a une valeur pendant trop longtemps et l'éteindre quand j'atteins la valeur idéal , exmple: plus de 10 min inferieure a 70= relais en fonctionnement jusqu'a atteindre 71.

ton fameux relais, est en connexion normalement ouverte ou fermée? NO ou NF?

teste ca

 // Programme terrarium
#include <DHT.h>
#define DHTPIN 8// capteur humidité
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int led = 13; //led fonctionnement
int relais = 7; // pompe a brumifier


unsigned long Top;
int depart = 0;



#include <LiquidCrystal.h>
const int RS = 12;
const int E = 11;
const int D4 = 5;
const int D5 = 4;
const int D6 = 3;
const int D7 = 2;
LiquidCrystal lcd(RS, E, D4, D5, D6, D7); // Initialisation du LCD
const int intTimePause = 100;

void setup ()
{
  lcd.begin(16, 1) ; // config écran
  delay(100);
  lcd.clear() ; // initialisé ecran
  delay(100);
  lcd.print("Hello Oscar");
  delay(10000);
  lcd.home();
  lcd.print("Fonction ok");
  delay(10000);
  lcd.clear();
  delay(10);
  pinMode(relais, OUTPUT) ; // config sorti pompe
  pinMode(led, OUTPUT);
  Serial.begin(9600) ;
  Serial.println(" bonjour christopher ") ;



}


void loop() {
 
  delay(2000);
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan (h))
  {
    lcd.print("erreur capteur!");
    delay(10000);
    lcd.clear();
    return;
  }

  Serial.print("temperature:");
  Serial.print(t);
  Serial.print(" humidity:");
  Serial.print(h);
  Serial.println();

  lcd.setCursor(0, 0);
  lcd.print(" humi:");
  lcd.print(h);
  lcd.print("%" );
 
  if (h < 70 && depart == 0)
  {

 Top = millis();
  depart = 1;
  Serial.println("passage en dessous de 70");
}
          
if ( millis() - Top > 10000 && depart == 1 && h<70) // 10secondes pour le test
{
    while (h<71){
             float h = dht.readHumidity();
             Serial.println("temps depasse on boucle");
            Serial.println(" hum : "+h);
                digitalWrite(relais, HIGH);
               digitalWrite(led, HIGH);
    }
Serial.println("sortie while");
Serial.println(("coupure relais ");


} else {
Serial.println("coupure relais et depart a zero;
    digitalWrite(relais, LOW);
    digitalWrite(led, LOW);
depart = 0;
 }
}

Merci pour votre aide .