Go Down

Topic: fonction pour exclure des valeurs (Read 1 time) previous topic - next topic

bazounga

Bonjour ,
je cherche une méthode pour ,par exemple ,sur un jeu de 8 capteurs exclure les valeurs max et min , donc  exclure les valeurs extrêmes de mon jeu de données pour ensuite faire une moyenne sur 6 capteurs.

Existe t il un moyen simple ou encore mieux une fonction pour réaliser ceci.

J'ai bien les fonctions max et min mais elles ne comparent que deux nombres ....

merci à tous .

_pepe_

#1
Nov 13, 2014, 12:15 pm Last Edit: Aug 20, 2018, 11:50 am by _pepe_
Supprimé

zoroastre

#2
Nov 13, 2014, 02:34 pm Last Edit: Nov 13, 2014, 02:37 pm by zoroastre
Salut,

La fonction de _pepe_ est super.

Je simplifie la recherche des index mini et maxi ainsi (toujours dans un tableau de float) :

Code: [Select]
/*
Trouver le min et max dans un tableau
*/

int index_min, index_max;
float tableau[8] = {12.5, 13.5, 14.5, 14.5, 15.5, 16.7, 11.1, 9.107};

void setup()
{
  Serial.begin(9600);
  delay(500);
}

void loop()
{
  for (int i = 1; i < 8; i++)
  {
    if (tableau[i] > tableau[i-1]) { index_max = i; }
    if (tableau[i] < tableau[i-1]) { index_min = i; }
  }
  Serial.print("Valeur mini : ");
  Serial.println(tableau[index_min]);
  Serial.print("Valeur maxi : ");
  Serial.println(tableau[index_max]);
  delay(1000);
}



On peut ainsi conserver le tableau tel quel et remplacer les valeurs mini et maxi du tableau par de nouvelles données, les exclure dans une autre boucle et comparer les moyennes, les affiner, etc.

@+

Zoroastre.
Gné! ;)

_pepe_

#3
Nov 13, 2014, 03:17 pm Last Edit: Aug 20, 2018, 11:50 am by _pepe_
Supprimé

bazounga

super !!
merci à tous
je teste ça dans mon programme ....
bonne soirée

bricoleau

Tiens j'ajoute mon grain de sel, avec une autre proposition à tester  :P

Code: [Select]

float moyenne6mesures( float *tableau8mesures )
{
  float mesureMin, mesureMax, somme;

  somme = mesureMin = mesureMax = tableau8mesures[0];
  for (int i=1; i<8; i++) {
    if (tableau8mesures[i]>mesureMax) mesureMax = tableau8mesures[i];
    if (tableau8mesures[i]<mesureMin) mesureMin = tableau8mesures[i];
    somme += tableau8mesures[i];
  }
  return (somme - (mesureMin + mesureMax)) / 6;
}
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

zoroastre

Oups!

Attention, ce code ne trouve que les derniers extremums locaux.
Merci pour la correction. Avec mon tableau, de tête, ça passait bien  :smiley-mr-green:

@+

Zoroastre.
Gné! ;)

Go Up