Go Down

Topic: Probleme min et max (temp et humidité) / moyenne  (Read 166 times) previous topic - next topic

Alex_Mny

Bonsoir,

Je suis entrain de réaliser un projet arduino, c'est le premier language que je touche et je suis dans une impasse j'ai chercher plusieur solution pour régler différent problème le premier est au niveau des minimum et des maximum je n'arrive pas a afficher le min et le max a chaque boucle on m'affiche dans le min la meme valeur que dans le max et cela pour les deux capteur humidité et température. De plus pour réaliser la moyenne lorsque je vérifie le programme on met un message d'erreur m'indiquant " 'mesure' cannot be used as a fonction ".

J'ai besoin d'aide merci d'avance


Voici ci contre le programme arduino

---------------------------------------------------------------------------------------------------------------------
Code: [Select]


#include <LiquidCrystal.h> // UTILISATION BIBLIOTHEQUE POUR ECRAN LCD
#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 8

  LiquidCrystal lcd(12,11,5,4,3,2); // ANNONCE DES PINS UTILISÉS PAR L'ÉCRAN LCD

// #define (nom de variable) nombre

const int pin_capteur = 0; // broche A0
float mesure[99];
int compteur=0;

int Tmin;
int Tmax;

int Hmax;
int Hmin;
int i;


void setup() {





  Serial.begin(9600);
 
   pinMode(DHT11_PIN, INPUT);
}




void loop() {

    int Hum = DHT.read(DHT11_PIN);
  Serial.print("humidité: ");  //différence print et println print écrit le message alors println écrit le message et va à la ligne
  Serial.println(DHT.humidity,1);

 
  int lecture = analogRead(pin_capteur);
  int tension = lecture * 5; // la virgule permet de dire a l'arduino qu'il s'agit d'une variable dites flottante
  tension = tension / 1024.0;
 // Serial.print("tension="); 
 // Serial.println(" V");

 int temp = analogRead(pin_capteur) * 5000L / 1024L / 10; // Que represente c'est L
 Serial.print(temp);
 Serial.println("°C");


 if (compteur<100){

mesure[compteur]=temp;
compteur++; //compteur = compteur + 1
 
 delay (1000); // attendre 1 seconde
 
 }

 


if(compteur>=99){


  float somme=0.0;
 
  for(int i=0 ; i<99;i++){
      somme = somme + mesure ;
   }
   




  float moyenne = somme /98;
  Serial.print("Moyenne= ");
  Serial.println(moyenne);
}

 for (int i=0 ; i=0;99){
      mesure  = mesure (i+1);
      }






lcd.begin(16, 2); // SET DES DIFERENT LIEU OU ON ÉCRIT DU TEXT
 
    lcd.setCursor(0,0); // POSITION DU DÉBUT DU TEXTE
       lcd.print("temperature :");   
       lcd.println(temp);
       lcd.setCursor(0,1);
       lcd.print("                ");
       delay(1000);


    lcd.setCursor(0,0);
      lcd.print("Humidite   "); 
      lcd.println(DHT.humidity,1);
      lcd.setCursor(0,1);
      lcd.print("                ");
      delay(1000);


    lcd.setCursor(0,0);
       lcd.print("Moyenne      "); 
        lcd.setCursor(0,1);
      lcd.print(moyenne);
      delay(1000);


    lcd.setCursor(0,0);
       lcd.println("temperature max   ");
    lcd.setCursor(0,1);
      lcd.println(Tmax); 
       
       delay(1000);


    lcd.setCursor(0,0);
       lcd.print("temperature min  ");   
    lcd.setCursor(0,1);
       lcd.println(Tmin); 
    delay(1000);


    lcd.setCursor(0,0);
       lcd.print("Humidite max");
       
      lcd.print(Hmax);
 
       delay(1000);


    lcd.setCursor(0,0);
       lcd.print("Humidite min");   
     
      lcd.println(Hmin);
       delay(1000);

}


bilbo83

Bonjour,

Beaucoup d'erreurs dans ce sketch.
Si tu veux mémoriser 100 mesures tu doit déclarer: float mesure[100], les index allant de 0 à 99.
Pour le calcul de la moyenne ce sera: float moyenne=somme/100.
Ensuite dans cette boucle:
Code: [Select]
for (int i=0 ; i=0;99){
      mesure  = mesure (i+1);
      }


c'est: mesure[i+1] , mais tu veux faire quoi?

Et enfin, tu ne fait aucun calcul sur les min/max, comment veux tu...

Alex_Mny

Merci de t'as reponse alors pour les min et les maximum je shouaite juste les afficher et désolé mais je viens de me rendre compte que je viens de faire un mauvais copié coller :D oups...
D'ailleur avec ce code j'arrive a afficher le min et le min et le max au niveau de la température mais les deux sont la meme chose.

Code: [Select]


#include <LiquidCrystal.h> // UTILISATION BIBLIOTHEQUE POUR ECRAN LCD
#include <dht11.h>
dht11 DHT;
#define DHT11_PIN 8

  LiquidCrystal lcd(12,11,5,4,3,2); // ANNONCE DES PINS UTILISÉS PAR L'ÉCRAN LCD

// #define (nom de variable) nombre

const int pin_capteur = 0; // broche A0
float mesure[100];
int compteur=0;

int Tmin;
int Tmax;

int Hmax;
int Hmin;


void setup() {





  Serial.begin(9600);
 
   pinMode(DHT11_PIN, INPUT);
}




void loop() {

    int Hum = DHT.read(DHT11_PIN);
  Serial.print("humidité: ");  //différence print et println print écrit le message alors println écrit le message et va à la ligne
  Serial.println(DHT.humidity,1);

 
  int lecture = analogRead(pin_capteur);
  int tension = lecture * 5; // la virgule permet de dire a l'arduino qu'il s'agit d'une variable dites flottante
  tension = tension / 1024.0;
 // Serial.print("tension="); 
 // Serial.println(" V");

 int temp = analogRead(pin_capteur) * 5000L / 1024L / 10; // Que represente c'est L
 Serial.print(temp);
 Serial.println("°C");


// Temp

if (Tmin>temp){
Tmin = temp;
}

if (Tmax<temp){
  Tmax=temp;
}

//Humidité

if (Hmin>Hum){
 Hmin=Hum;
}

if (Hmax<Hum){
Hmax = Hum;
}


 if (compteur<100){

mesure[compteur]=temp;
compteur++; //compteur = compteur + 1
 
 delay (1000); // attendre 1 seconde
 
 }

 


if(compteur>=99){


  float somme=0.0;
 
  for(int i=0 ; i<99;i++){
      somme = somme + mesure [i];
   }
   




  float moyenne = somme /98;
  Serial.print("Moyenne= ");
  Serial.println(moyenne);
}

 for (int i=0 ; i=98; i++){
      mesure  = mesure (i+1);
      }




lcd.begin(16, 2); // SET DES DIFERENT LIEU OU ON ÉCRIT DU TEXT
 
    lcd.setCursor(0,0); // POSITION DU DÉBUT DU TEXTE
       lcd.print("temperature :");   
       lcd.println(temp);
       lcd.setCursor(0,1);
       lcd.print("                ");
       delay(1000);


    lcd.setCursor(0,0);
      lcd.print("Humidite   "); 
      lcd.println(DHT.humidity,1);
      lcd.setCursor(0,1);
      lcd.print("                ");
      delay(1000);


    lcd.setCursor(0,0);
       lcd.print("Moyenne         "); 
        lcd.setCursor(0,1);
      lcd.print("                ");
      delay(1000);


    lcd.setCursor(0,0);
       lcd.println("temperature max   ");
    lcd.setCursor(0,1);
      lcd.println(Tmax); 
       
       delay(1000);


    lcd.setCursor(0,0);
       lcd.print("temperature min  ");   
    lcd.setCursor(0,1);
       lcd.println(Tmin); 
    delay(1000);


    lcd.setCursor(0,0);
       lcd.print("Humidite max");
       
      lcd.print(Hmax);
 
       delay(1000);


    lcd.setCursor(0,0);
       lcd.print("Humidite min");   
     
      lcd.println(Hmin);
       delay(1000);

}






Alex_Mny

Si possible de m'aider a résoudre le problème de maximum et de minimum ?

lesept

Et enfin, tu ne fait aucun calcul
sur les min/max, comment veux tu...
ça rime pas ! ;)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

biggil

tu utilises des entiers (int) pour tes calculs, c'est inapproprié. Il faut utiliser des flottants (float).

Go Up