ARROSAGE AUTOMATIQUE ARDUINO GROVE Besoin d'aide pour mon projet !

Bonjour à tous! :slight_smile:

Je viens ici vous demandez conseils, je suis élève en Terminale STI2D, et j'ai un projet à réaliser en fin d'année. Je travaille sur une simulation d'arrosage automatique, je pars avec aucune base d’électronique et de codage. Cependant, j'ai réussi à faire quelques trucs sympa à l'aide du microprocesseur ARDUINO accompagné de son shield GROVE.

Je viens aujourd'hui vous expliquez ce que j'aimerai faire. J'ai réussi à afficher sur un Grove - LCD RGB Backlight l'humidité que j'obtenais au bout de mon capteur d'humidité. Cette valeur, je l'ai ensuite convertie en % (me basant sur une échelle de 0 (Totalement sec) à 800 (100% humide, trempé dans l'eau)). Je suis satisfait de ce travail, mais maintenant j'aimerai simulé à l'aide d'un Analog Servo, donc un petit moteur, l'arrosage automatique avec les conditions suivantes ;

un % d'humidité < 30%
présence = LOW

Je vous mets ci-dessous le code que j'ai en ce moment, fonctionnel, mais pas dans les conditions que je souhaites. Merci d'avance de votre aide!

#include <Wire.h>
#include "rgb_lcd.h"
#include <Servo.h>
 
rgb_lcd lcd;

const int colorR = 181;
const int colorG = 163;
const int colorB = 197;

Servo myservo;

int pos = 0;

int humidite;
int humidite_pourcentage;
boolean presence = HIGH;

void setup()

{
  lcd.begin(16, 2);
  lcd.setRGB(colorR, colorG, colorB);
  
  myservo.attach(8);
}

void loop()

{  
  humidite = analogRead(A0); 
  presence = digitalRead(2);
  humidite_pourcentage = humidite * 100/800;
  if (!presence && humidite_pourcentage < 30)
  {
    digitalWrite(3,HIGH);
    delay(100);
    digitalWrite(3,LOW);

    lcd.setCursor(0,0);
        lcd.print("Humidite =   ");
        lcd.println(humidite);
        delay(100);
        lcd.setCursor(0,1);
        lcd.print("Humidite % =  ");
        lcd.println(humidite_pourcentage);
        delay(100);

    while(!presence && humidite_pourcentage < 30){
              
       for (pos = 0; pos <= 180; pos += 1) {
        myservo.write(pos);
        delay(15);
       }
       for (pos = 180; pos >= 0; pos -= 1) {
        myservo.write(pos);
        delay(15);
       }
    }
  }
}

Pour être un peu plus clair, mon principal problème est, qu'une fois le moteur en fonction, l'afficheur LCD ne m'affiche que la dernière valeur en mémoire avant le lancement du moteur.

Ce que j'aimerai c'est que l'écran LCD m'affiche continuellement les valeurs et prenons en exemple l'humidité est de 35%, le moteur ne se déclenche pas et une fois arrivé à 25%, par exemple, qu'il se déclenche et s'arrête à nouveau une fois l'humidité > 30%.

Merci de vos retours.

bonjour,
pour debugger un code, on utilise serial.print
vu que tu affiche que dans ton if et passe dans le while, tu ne dois pas sortir du while

Bonjour, merci de ton retour.

Pourrais-tu m'expliquer un peu plus?

où mettre la commande serial.print?

Et comment organiserais tu mon programme pour rester dans le while?

Merci

Bon, j'aimerai bien avancé...

personne ne peux m'aider?

Bonne journée

Izotopik:
Bon, j'aimerai bien avancé...

personne ne peux m'aider?

Bonne journée

bon ben, si tu cherchais un peu serial.print arduino sur internet
plein d'exemples