Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - jojolito

Pages: [1]
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;

}














}

2
Vos projets / Utiliser la fonction "IF" ou/et "else if " ???
« le: avril 04, 2019, 07:17:29 am »
Bonjour

Voilà j'ai un projet visant à commander 2 relais  à l'aide d'un capteur ultrason HC-SR04, dans le cadre d'un projet aquaponique ,les deux relais en question serviront à alimenter de pompes a eau j'ai déjà essayé d'écrire quelques lignes de code mais je n'obtiens pas le résultat voulu .. Car je sais pas si je dois utiliser la fonction "if" ou  "else if" ou même les deux ,j'aimerais avoir votre aide pour écrire la base du code

Voilà grossièrement ce que je voudrais faire exprimer sans code :

x= 10cm
y=5cm

Si la hauteur est plus petit que (< ) que x
Le Relais 1 s'allume
Le Relais 2 reste éteint

Si la hauteur est = X
Le Relais 1 s'eteint
Le Relais 2 reste éteint

Temporisation de 3 secondes

Si la hauteur est plus grande (>) que Y
Le Relais 1 reste éteint
Le relais 2 s'allume

Si la hauteur est = Y
Le Relais 1 reste éteint
Le Relais 2 s'éteint

Temporisation de 3 secondes



Voilà grossièrement les ordres à executer mais je n'arrive pas à convertir ça en ligne de code

J'avais fait un premier essai mais ça a ete un echec    :

Voilà les lignes de code du raté

Code: [Select]

void loop() {

niveau_culture = culture.distanceInMillimeters() / 10;
Serial.print("hautteur: ");
Serial.println(hautteur);
Serial.println("");
delay(250);

if (hauteur != x) { 
digitalWrite(relais 2, LOW);
digitalWrite(relais 1, HIGH);
}
if (hauteur>=x) { 
digitalWrite(relais 2, HIGH);
digitalWrite(relais 1, HIGH);
//Serial.println("marre_haute");
}
delay(3000);

if (hauteur !=y) {
digitalWrite(relais 1, LOW);
digitalWrite(relais 2, HIGH); 
}
if (hauteur <= y) { 
digitalWrite(relais 1, HIGH);
digitalWrite(relais 2, HIGH);
// Serial.println("marre_basse");
}
delay(3000);

Voilà avec Céline de code dès que la hauteur atteint la valeur X Le Relais 1  éteins la hauteur diminue et dès qu'elle devient au-dessOUS de la valeur X le relais 1 se rallume, et tout ça se fait de façon interminable
 

Est-ce que je dois pas utiliser une boucle fort genre " while " ???

J'ai aussi un doute sur l'utilisation de la fonction "delay" , est-ce que je dois utiliser Delaymillisecondes plutot ???

Voilà merci de votre lecture aidez-moi s'il vous plaît

Pages: [1]