Array 2D ?

Bonsoir les gens :slight_smile:

Je débute en c++ depuis bientôt 10ans, c'est un langage qui ma toujours rebuté, mais cette fois je m'y suis mis sérieusement ^^

Je bute sur une méthode afin d'appliquer une valeur a partir d'un température lue d'un capteur.
Je pense que le top serait un array en 2D de ce genre:

int valeur[9][2] =
{
   {10, 2.4},
   {15, 4.8},
   {20, 7.2},
   {25, 9.6},
   {30, 12},
   {35, 14.3},
   {40, 16.7},
   {45, 19}
   
};

Le problème est que je n'arrive pas a l'exploiter...

En attendant je compile comme ça:

 if (temp < 10){
    valeur = 0;
  }
if (temp > 10 && temp < 15){
   valeur = 2.4;
}
if (temp > 15 && temp < 20){
  valeur = 4.8;
}
if (temp > 20 && temp < 25){
  valeur = 7.2;
}
if (temp > 25 && temp < 30){
  valeur = 9.6;
}
if (temp > 30 && temp < 35){
  valeur = 12;
}
if (temp > 35 && temp < 40){
  valeur = 14.3;
}
if (temp > 40 && temp < 45){
  valeur = 16.7;
}
if (temp > 45 && temp < 50){
  valeur = 19;
}

Une âme charitable pour me mettre sur la voie?

Bonne soirée

Bonjour,

  • ton tableau contient des valeurs flottantes, il doit donc être déclaré float
  • dans tes tests, il y a des cas non définis si par exemple si temp=10 -> valeur n'a pas de valeur
  • on ne peut pas utiliser le même nom de variable (valeur) pour un tableau et une variable simple

Maintenant pour répondre à ta question, je te propose ceci

float valeur[9][2] =
{
   {10, 0},
   {15, 2.4},
   {20, 4.8},
   {25, 7.2},
   {30, 9.6},
   {35, 12},
   {40, 14.3},
   {45, 16.7}
   
};

void test()
{
  float val=19;       // si non trouvé dans le tableau

  for (int i=0; i<9; i++)
  {
    if (temp<valeur[i][0])
    {
      val=valeur[i][1];
      break;
    }
  }
}

Tu remarquera que j'ai décalé la deuxième valeur du tableau vers la ligne précédente car c'est plus facile à gérer ainsi.

Merci kamill pour toutes c'est précisions :wink:

Ce code me sort une erreur qui me bloquer toute a l'heure (c'est ce pourquoi javais passer en int pour test):

error: invalid types 'float[int]' for array subscript

Merci

Quel code?
Il n'y a pas d'erreur, les index sont entiers.
Met ton code complet.

Simplement ceci:

int temp;
float valeur;

void setup() {
  int temp = 27;

  float valeur[17][2] =
  {
    {10, 0},
    {15, 2.4},
    {20, 4.8},
    {25, 7.2},
    {30, 9.6},
    {35, 12},
    {40, 14.3},
    {45, 16.7},
    {50, 19},
    {55, 21.4},
    {60, 23.8},
    {65, 26.1},
    {70, 28.5},
    {75, 31},
    {80, 33.3},
    {85, 35.7 }
  };
}

void loop() {

}

void test()
{
  float val = 19;     // si non trouvé dans le tableau

  for (int i = 0; i < 17; i++)
  {
    if (temp < valeur[i][0])
    {
      val = valeur[i][1];
      break;
    }
  }
}
Arduino : 1.6.5 Hourly Build 2015/10/23 11:42 (Windows 7), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

sketch_nov03a.ino: In function 'void setup()':
sketch_nov03a:7: error: invalid types 'float[int]' for array subscript
sketch_nov03a.ino: In function 'void test()':
sketch_nov03a:38: error: invalid types 'float[int]' for array subscript
sketch_nov03a:40: error: invalid types 'float[int]' for array subscript
invalid types 'float[int]' for array subscript

  Ce rapport contiendrait plus d'informations si l'option
  "Montrer les informations de sortie pendant la compilation"
  était activée dans Fichier > Préférences.

Tu déclare une variable simple float valeur puis tu affectes sa valeur en tant que tableau.
Ton tableau valeur doit être déclaré en dehors de setup si tu veux qu'il soit accessible dans d'autres fonction.

int temp = 27;

float valeur[17][2] =
{
  {10, 0},
  {15, 2.4},
  {20, 4.8},
  {25, 7.2},
  {30, 9.6},
  {35, 12},
  {40, 14.3},
  {45, 16.7},
  {50, 19},
  {55, 21.4},
  {60, 23.8},
  {65, 26.1},
  {70, 28.5},
  {75, 31},
  {80, 33.3},
  {85, 35.7 }
};

void setup() {
}

void loop() {

}

void test()
{
  float val = 19;     // si non trouvé dans le tableau

  for (int i = 0; i < 17; i++)
  {
    if (temp < valeur[i][0])
    {
      val = valeur[i][1];
      break;
    }
  }
}

Tout simplement :slight_smile:

Et ça explique aussi d'autre problème que j'ai rencontrer...

Problème résolu!

Merci kamill :wink:

Bonne continuation