Questions sur les fonctions temps

Bonjour, je dois faire un code arduino pour automatiser une serre, sur la lumière, la température et l’humidité. Je joins le code au message mais le principe est simple.
Le problème est au niveau de la pompe (la pin 12). J’aimerai qu’elle marche pendant 3 secondes si l’humidité de la terre est trop faible. (Humidity>= 300). J’ai utilisé la fonction millis mais la pompe marche 10 secondes, qu’importe la valeur que j’entre. De plus elle ne se relance pas forcément si l’humidite reste trop faible... j’ai besoin d’aide !! :slight_smile:

LE CODE :

// the setup routine runs once when you press reset:

int t;
bool pompe=false;

void setup() {

  // initialize serial communication at 9600 bits per second:
  
  Serial.begin(9600);
  
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(12,OUTPUT);
}


// the loop routine runs over and over again forever:

void loop() {
  
  // read the input on analog pins:

  int lightLvl = analogRead(A0);
  float temp = ((analogRead(A1)*5.0/1024.0)-0.5)*100;
  int humidity = analogRead(A2);
    
  if (lightLvl >= 500){
    digitalWrite(8,HIGH);
  }else{
    digitalWrite(8,LOW);
  }

  if (temp >= 100){
    digitalWrite(9,HIGH);
  }else{
    digitalWrite(9,LOW);
  }
  
  if (temp <= 15){
    digitalWrite(3,HIGH);
  }else{
    digitalWrite(3,LOW);
  }

  if (humidity >= 300 && pompe==false){
    digitalWrite(12,HIGH);
    pompe=true;
    t=millis();
  }

  if (pompe==true && millis()-t>1000){
    digitalWrite(12,LOW);
    pompe=false;
    }
  

  // print out the value you read:
  Serial.println(humidity);
  
  delay(10000);        // delay in between reads for stability
}

hello
ta loop est stoppée à chaque pour 10 secondes par le delay (10000); qui est à la fin.
voici ton code corrigé (mais non testé)et un peu revu

#define chauffage 3
#define lumiere   8
#define g_froid   9
#define pompe    12
#define ldr      A0
#define sonde_temperature A1
#define sonde_humidite    A2
bool pompe_on = false;
unsigned long t;
unsigned long temps_inter_mesures  = 10000;
unsigned long chrono_inter_mesures = millis() - temps_inter_mesures;

void setup()
{
  Serial.begin(115200);
  pinMode(chauffage, OUTPUT);
  pinMode(lumiere, OUTPUT);
  pinMode(g_froid, OUTPUT);
  pinMode(pompe, OUTPUT);
}

void loop()
{
  if ((millis() - chrono_inter_mesures) >= temps_inter_mesures)
  { 
    chrono_inter_mesures = millis();
    int lightLvl = analogRead(ldr);
    float temp = ((analogRead(sonde_temperature) * 5.0 / 1024.0) - 0.5) * 100;
    int humidity = analogRead(sonde_humidite);

    if (lightLvl >= 500)
    {
      digitalWrite(lumiere, HIGH);
    }
    else
    {
      digitalWrite(lumiere, LOW);
    }

    if (temp >= 100)
    {
      digitalWrite(g_froid, HIGH);
    }
    else
    {
      digitalWrite(g_froid, LOW);
    }

    if (temp <= 15)
    {
      digitalWrite(chauffage, HIGH);
    }
    else
    {
      digitalWrite(chauffage, LOW);
    }

    if (humidity >= 300 && pompe == false)
    {
      digitalWrite(12, HIGH);
      pompe_on = true;
      t = millis();
    }
    Serial.println(humidity);
  }
  else
  {
    if (pompe_on == true && millis() - t > 3000)
    {
      digitalWrite(12, LOW);
      pompe_on = false;
    }
  }
}

edit: ach, je me suis trop precipité, tu dois mettre ton code entre balises code

dans ton premier post, tu sélectionne tout ce qui correspond à ton code , puis tu clique sur l'icone </>

cela mettra ton code en forme pour le forum

Merci pour la rapidité de la réponse et le conseil, c'est la première fois que je poste c'est pour ça

Je testerai ce weekend, merci beaucoup !!

c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.