1
Vos projets / Re : Utiliser la fonction "IF" ou/et "else if " ???
« le: avril 06, 2019, 01:00:26 pm »
Bonjour j'ai suivi votre conseil ça m'a permis de réécrire le code tout en inspirant du lien mais ça ne fonctionne toujours pas
Voilà le code ré écrit
#include <hcsr04.h> //Bifrost HCSR04 Library
const int TRIG_CULTURE_PIN = 28;
const int ECHO_CULTURE_PIN = 29;
const int POMPE_CULTURE = 19; // pompe depart d’eau sur relai
const int POMPE_AQUA = 9; // pompe arrive d’eau sur relai
HCSR04 niveau (TRIG_CULTURE_PIN, ECHO_CULTURE_PIN, 20, 4000);
enum { bac_tempo2, maree_basse, bac_se_remplie, maree_haute, bac_tempo, bac_se_vide };
int niveau_culture;
const float bacVide = 32;
const float bacRemplie = 20;
void setup() {
Serial.begin(115200);
pinMode(POMPE_AQUA, OUTPUT); // pompe arrive d’eau
// pinMode(POMPE_AQUA, HIGH);
pinMode(POMPE_CULTURE, OUTPUT); // pompe depart d’eau
//pinMode(POMPE_CULTURE, HIGH);
}
void loop() {
niveau_culture = niveau.distanceInMillimeters() / 10;
Serial.print("niveau_culture: ");
Serial.println(niveau_culture);
Serial.println("");
delay(250);
byte etatBac = bac_tempo2;
switch (etatBac)
{
case bac_tempo2 :
if (niveau_culture == bacVide) {
digitalWrite(POMPE_CULTURE, HIGH);
digitalWrite(POMPE_AQUA, HIGH);
delay(3000);
etatBac = maree_basse;
}
// else if (niveau_culture > bacVide ) {
// digitalWrite(POMPE_CULTURE, LOW);
//digitalWrite(POMPE_AQUA, HIGH);
//etatBac = bac_se_vide;
//}
break;
case maree_basse :
if (niveau_culture == bacVide) {
digitalWrite(POMPE_AQUA, LOW);
// digitalWrite(POMPE_CULTURE, HIGH);
etatBac = bac_se_remplie;
}
break;
case bac_se_remplie :
if (niveau_culture != bacRemplie) {
digitalWrite(POMPE_AQUA, LOW);
//digitalWrite(POMPE_CULTURE, HIGH);
etatBac = maree_haute;
}
break;
case maree_haute :
if (niveau_culture == bacRemplie) {
digitalWrite(POMPE_AQUA, HIGH);
etatBac = bac_tempo;
}
break;
case bac_tempo :
digitalWrite(POMPE_CULTURE, HIGH);
digitalWrite(POMPE_AQUA, HIGH);
delay(3000);
etatBac = bac_se_vide;
break;
case bac_se_vide :
if (niveau_culture != bacVide) {
digitalWrite(POMPE_CULTURE, LOW);
digitalWrite(POMPE_AQUA, HIGH);
etatBac = bac_tempo2;
}
break;
}
}
Voilà le code ré écrit
#include <hcsr04.h> //Bifrost HCSR04 Library
const int TRIG_CULTURE_PIN = 28;
const int ECHO_CULTURE_PIN = 29;
const int POMPE_CULTURE = 19; // pompe depart d’eau sur relai
const int POMPE_AQUA = 9; // pompe arrive d’eau sur relai
HCSR04 niveau (TRIG_CULTURE_PIN, ECHO_CULTURE_PIN, 20, 4000);
enum { bac_tempo2, maree_basse, bac_se_remplie, maree_haute, bac_tempo, bac_se_vide };
int niveau_culture;
const float bacVide = 32;
const float bacRemplie = 20;
void setup() {
Serial.begin(115200);
pinMode(POMPE_AQUA, OUTPUT); // pompe arrive d’eau
// pinMode(POMPE_AQUA, HIGH);
pinMode(POMPE_CULTURE, OUTPUT); // pompe depart d’eau
//pinMode(POMPE_CULTURE, HIGH);
}
void loop() {
niveau_culture = niveau.distanceInMillimeters() / 10;
Serial.print("niveau_culture: ");
Serial.println(niveau_culture);
Serial.println("");
delay(250);
byte etatBac = bac_tempo2;
switch (etatBac)
{
case bac_tempo2 :
if (niveau_culture == bacVide) {
digitalWrite(POMPE_CULTURE, HIGH);
digitalWrite(POMPE_AQUA, HIGH);
delay(3000);
etatBac = maree_basse;
}
// else if (niveau_culture > bacVide ) {
// digitalWrite(POMPE_CULTURE, LOW);
//digitalWrite(POMPE_AQUA, HIGH);
//etatBac = bac_se_vide;
//}
break;
case maree_basse :
if (niveau_culture == bacVide) {
digitalWrite(POMPE_AQUA, LOW);
// digitalWrite(POMPE_CULTURE, HIGH);
etatBac = bac_se_remplie;
}
break;
case bac_se_remplie :
if (niveau_culture != bacRemplie) {
digitalWrite(POMPE_AQUA, LOW);
//digitalWrite(POMPE_CULTURE, HIGH);
etatBac = maree_haute;
}
break;
case maree_haute :
if (niveau_culture == bacRemplie) {
digitalWrite(POMPE_AQUA, HIGH);
etatBac = bac_tempo;
}
break;
case bac_tempo :
digitalWrite(POMPE_CULTURE, HIGH);
digitalWrite(POMPE_AQUA, HIGH);
delay(3000);
etatBac = bac_se_vide;
break;
case bac_se_vide :
if (niveau_culture != bacVide) {
digitalWrite(POMPE_CULTURE, LOW);
digitalWrite(POMPE_AQUA, HIGH);
etatBac = bac_tempo2;
}
break;
}
}