Lecture et comparaison d'un nombre dans un tableau

Bonjours à tous.
Je voudrais voir si un nombre est bien dans le tableau.
J’ai fait ceci,

float Nombre=0;
float nombreReception=0; // variable pour nombre reçu sur port Série diametre fil
int i=0;
int Resultat=0;

float Tableau[]={
  2,1.95,1.9,1.85,1.8,1.75,1.7,1};
//************************************************
void setup()
{ 
  Serial.begin(115200);
  delay(1000);   
  Serial.print(F("Nombre dans le tableau : "));
  for (int j=0; j<=6; j++)
  {        
    Serial.print(Tableau[j]);
    Serial.print(F(" / ")); 
    
  }
  Serial.println(F(""));
  Serial.println(F(""));
  Serial.print(F("Entrer la valeur : "));
}
//***********************************************
void loop()
{
  while(i!=1)
  {          
    if (i==0)
    {
      nombreReception=recevoirNombre(); // appel de la fonction recevoirNombre
      if (nombreReception!=0)  // si un nombre a été reçu
      {
        Serial.print(F("Nombre entre = "));      
        Nombre=nombreReception;
        Serial.print (Nombre);
        Serial.println(F(""));  
        i++;
      }
    }
  }
  for (int j=0; j<=6; j++)
  {    
    if(Tableau[j]==Nombre)  
    { 
      Serial.print(F("le Nombre est dans le tableau = ")); 
      Serial.println(Tableau[j]);
      Serial.println(F(""));
      Serial.print(F("Entrer la valeur : "));
      Resultat=1;
      j++;
    }   
    i=0;
  }
  if(Resultat==0)
  {
    Serial.print(F("le Nombre n est pas dans le tableau!!!!!!! "));
    Serial.println(F("")); 
    Serial.println(F("")); 
    Serial.print(F("Entrer la valeur : "));     
  }
  Resultat=0;
}//*********** Fin loop ***********************************************  
//********** Fonction recevoirNombre ********************************** 
float recevoirNombre() //Fonction typée renvoi un résultat
{   
  float nombreRecu=0; // variable locale nombre recu  
  if (Serial.available())  // tant qu'un octet en réception
  {
    nombreRecu=Serial.parseFloat(); // Transforme ASCII en nombre décimale
  } 
  return(nombreRecu); // renvoie le nombre calculé
} //******************************************************************

mais le résultat me donne ça :

Nombre dans le tableau : 2.00 / 1.95 / 1.90 / 1.85 / 1.80 / 1.75 / 1.70 /

Entrer la valeur : Nombre entre = 2.00
le Nombre est dans le tableau = 2.00

Entrer la valeur : Nombre entre = 1.95
le Nombre n est pas dans le tableau!!!

Entrer la valeur : Nombre entre = 1.90
le Nombre n est pas dans le tableau!!!

Entrer la valeur : Nombre entre = 1.85
le Nombre n est pas dans le tableau!!!

Entrer la valeur : Nombre entre = 1.80
le Nombre n est pas dans le tableau!!!

Entrer la valeur : Nombre entre = 1.75
le Nombre n est pas dans le tableau!!!

Entrer la valeur : Nombre entre = 1.70
le Nombre n est pas dans le tableau!!!

Je ne comprends pas qu’en entrant un nombre je ne le trouve pas dans le tableau alors qu’il est existant.
Pouvez-vous m’aider?
Cordialement. Marc.

C'est des float, c'est souvent impossible d'avoir une égalité. Il faut que tu te fasse une petite fourchette et que tu teste si le nombre est dedans.

Serial.parseFloat produit certainement des décimales non désirées. Essaie d'afficher avec 15 décimales pour voir :

       Serial.print (Nombre, 15);

Si 2 décimales suffisent tu peux faire ceci :

  int x = nombreRecu * 100;
  return (float)x /100;

esp12: C'est des float, c'est souvent impossible d'avoir une égalité. Il faut que tu te fasse une petite fourchette et que tu teste si le nombre est dedans.

Tu testes si la valeur absolue de la différence est inférieure à un seuil.

Merci, la 2eme méthode est bonne.
Salutations. Marc.

float Nombre = 0;
float nombreReception = 0; // variable pour nombre reçu sur port Série diametre fil
int i = 0;
int Resultat = 0;

float Tableau[] = {
  2, 1.95, 1.9, 1.85, 1.8, 1.75, 1.7, 1
};
//************************************************
void setup()
{
  Serial.begin(115200);
  delay(1000);
  Serial.print(F("Nombre dans le tableau : "));
  for (int j = 0; j <= 6; j++)
  {
    Serial.print(Tableau[j]);
    Serial.print(F(" / "));

  }
  Serial.println(F(""));
  Serial.println(F(""));
  Serial.print(F("Entrer la valeur : "));
}
//***********************************************
void loop()
{
  while (i != 1)
  {
    if (i == 0)
    {
      nombreReception = recevoirNombre(); // appel de la fonction recevoirNombre
      if (nombreReception != 0) // si un nombre a été reçu
      {
        Serial.print(F("Nombre entre = "));
        Nombre = nombreReception;
        // Serial.print (Nombre);
        Serial.print (Nombre);
        Serial.println(F(""));
        i++;
      }
    }
  }
  for (int j = 0; j <= 6; j++)
  {
    if (Tableau[j] == Nombre)
    {
      Serial.print(F("le Nombre est dans le tableau = "));
      Serial.println(Tableau[j]);
      Serial.println(F(""));
      Serial.print(F("Entrer la valeur : "));
      Resultat = 1;
      j++;
    }
    i = 0;
  }
  if (Resultat == 0)
  {
    Serial.print(F("le Nombre n est pas dans le tableau!!!!!!! "));
    Serial.println(F(""));
    Serial.println(F(""));
    Serial.print(F("Entrer la valeur : "));
  }
  Resultat = 0;
}//*********** Fin loop ***********************************************
//********** Fonction recevoirNombre **********************************
float recevoirNombre() //Fonction typée renvoi un résultat
{
  float nombreRecu = 0; // variable locale nombre recu
  if (Serial.available())  // tant qu'un octet en réception
  {
    nombreRecu = Serial.parseFloat(); // Transforme ASCII en nombre décimale

  }
  //return(nombreRecu); // renvoie le nombre calculé
  int x = nombreRecu * 100;
  return (float)x / 100;
} //******************************************************************