Lire deux capteur d'humidité a intervalle différent non bloquant.

Bonjour hbachetti,

J'ai réécris mon code cependant, si je sépare la lecture des capteurs et que je met l'autre partie dans le loop, j'ai alors l'erreur suivante :

"exit status 1
'humidite' was not declared in this scope"

Alors du coup je n'aurais pas du faire comme j'ai fait?

const int canal = 10; // niveau d'eau canal
const int pompe = 9; // relais pompe
const int capthumidite = 8; // détecteur d'humidité numéro 1
int ledhumide = 7;
int ledsec = 6;
int ledniveaucanalbas = 5;
int ledniveaucanalhaut = 4;
const int ledprogramateur = 3;
int pumpLEDPin = 2; // Led  pompe verte

// Time periods of blinks in milliseconds (1000 to a second).
const unsigned long canalinterval = 4000;
const unsigned long capthumiditeinterval = 300000;

// Variable holding the timer value so far. One for each "Timer"
unsigned long canaltimer;
unsigned long capthumiditetimer;

void setup ()
{
  // Configure la broche avec la résistance de tirage
  Serial.begin(9600);
  pinMode (canal, INPUT); // entrée capteur niveau canal
  pinMode (capthumidite, INPUT); // entrée capteur sol humidité
  pinMode(pompe, OUTPUT); // pompe est une broche de sortie
  pinMode(ledhumide, OUTPUT);
  pinMode(ledsec, OUTPUT);
  pinMode(ledniveaucanalbas, OUTPUT);
  pinMode(ledniveaucanalhaut, OUTPUT);
  pinMode(ledprogramateur, OUTPUT);
  pinMode(pumpLEDPin, OUTPUT);
  canaltimer = millis ();
  capthumiditetimer = millis ();
}  // end of setup

void togglecanal ()
{

  int niveaucanal = digitalRead(canal); // Lecture de l etat du du niveau d'eau canal


  // remember when we toggled it
  canaltimer = millis ();
}  // end of toggleGreenLED

void togglecapthumidite ()
{


  int humidite = digitalRead(capthumidite); // Lecture de l etat du détecteur 1


  // remember when we toggled it
  capthumiditetimer = millis ();
}  // end of toggleRedLED

void loop ()
{

  // Handling the blink of one LED.
  if ( (millis () - canaltimer) >= canalinterval)
    togglecanal ();

  // The other LED is controlled the same way. Repeat for more LEDs
  if ( (millis () - capthumiditetimer) >= capthumiditeinterval)
    togglecapthumidite ();

  /* Other code that needs to execute goes here.
     It will be called many thousand times per second because the above code
     does not wait for the LED blink interval to finish. */

     
  digitalWrite(ledprogramateur, HIGH); // Allumer Led programateur








  if  (humidite == LOW) {
    digitalWrite(ledhumide, HIGH); // Allumer LED humide
    digitalWrite(ledsec, LOW); // Eteindre Led sec
  }

  if  (humidite == HIGH) {
    digitalWrite(ledsec, HIGH); // Allumer Led sec
    digitalWrite(ledhumide, LOW); // Eteindre LED humide
  }

  if  ((niveaucanal) == HIGH) {
    digitalWrite(ledniveaucanalbas, HIGH); // Allumer LED niveau canal bas
    digitalWrite(ledniveaucanalhaut, LOW); // Eteindre Led niveau canal haut
  }

  if  ((niveaucanal) == LOW) {
    digitalWrite(ledniveaucanalbas, LOW); // Eteindre Led niveau canal bas
    digitalWrite(ledniveaucanalhaut, HIGH); // Allumer LED niveau canal haut
  }






  // Agir en fonction de l'état des parametres
  if ((humidite == HIGH) && (niveaucanal == LOW))
  {
    digitalWrite(pompe, LOW);
    digitalWrite(pumpLEDPin, HIGH); // Allumer Led pompe
  }
  else
  {
    digitalWrite(pompe, HIGH);
    digitalWrite(pumpLEDPin, LOW); // Eteindre Led pompe
  }







  delay(5000); // Attendre 4 seconde (prendre des mesures toutes les 4 secondes)

}  // end of loop