Variable Qui définit un nom de variable

Bonjour ,

je souhaiterai donner un nom a une variable( jusque la , je sais faire) mais le problème se pose quand je doit dire a mon code de créer un variable , avec un nom spécifique , c'est a dire , qu'une variable définit le nom d'une autre

void Setc() {

  irrecv.resume();

  while (Yolo == 3) {

    if (irrecv.decode(&results)) {

      if (results.value == 0x9EB44) { // +
        c++;
        if (c > 99) {
          c = 0;
        };
        Serial.print("c = ");
        Serial.println(c);
        setdigits(c);
      }

      if (results.value == 0x5EB44) { // -
        c--;
        if (a < 0) {
          c = 99;
        }
        Serial.print("c = ");
        Serial.println(c);
        setdigits(c);
      }

      if (results.value == 0x2C9B) { // +++
        c = c + 10;
        if (c > 99) {
          c = 0;
        };
        Serial.print("c = ");
        Serial.println(c);
        setdigits(c);
      }

      if (results.value == 0x6C9B) { // ---
        c = c - 10;
        if (c < 0) {
          c = 99;
        };
        Serial.print("c = ");
        Serial.println(c);
        setdigits(c);
      }

      if (results.value == 0x4CB44) { // Play
        Yolo++;
      }
      irrecv.resume();
    }
  }
}

j'avait 5 fois ce code !!!! , et jai regroupé cela en une fois avec

void SetNumber(char lettre, int increment) {
  irrecv.resume();
  while (Yolo == increment) {
    if (irrecv.decode(&results)) {
      switch (results.value) {
        case 0x9EB44:
          lettre++;
          if (lettre > 99) {
            lettre = 0;
          };
          Serial.print("lettre = ");
          Serial.println(lettre);
          setdigits(lettre);
          break;
        case 0x5EB44:
          lettre--;
          if (lettre < 0) {
            lettre = 99;
          }
          Serial.print("lettre = ");
          Serial.println(lettre);
          setdigits(lettre);
          break;
        case 0x2C9B:
          lettre = lettre + 10;
          if (lettre > 99) {
            lettre = 0;
            break;
          };
          Serial.print("lettre = ");
          Serial.println(lettre);
          setdigits(lettre);
          break;
        case 0x6C9B:
          lettre = lettre - 10;
          if (lettre < 0) {
            lettre = 99;
          };
          Serial.print("lettre = ");
          Serial.println(lettre);
          setdigits(lettre);

          break;
          if (lettre == 'c' || lettre == 'e') {
          case 0x4CB44: // Play
            Yolo++;
            break;
          }
          else {
          case 0xD0B44:

            Yolo++;
            
          
            break;
            
          }
          
      }
      irrecv.resume();
    }
  }

bien sur , cela ne marche pas du tout , et en fait , ce que je veux , c'est dire a mon code de créer une variable a , avec une valeur custom , que mon "SetNumber" me retourne

a = 751
b = 564 (valeurs a titre d'exemple)
c =789

quand je lui dit

SetNumber(a,1);
delay(150);
SetNumber(b,2);
delay(150);
SetNumber(c,3);
delay(150);
Yolo = 1 ;

merci d'avance :slight_smile: :o

oula !

Je vais devoir t'ouvrir les yeux sur une triste vérité qui risque de remettre en cause ce que tu penses comprendre de la programmation : un nom de variable n'existe que dans le code source. :grin:

Lorsque le programme est transformé par le compilateur en code exécutable, les noms des variables sont remplacés par des adresses mémoire.

Pour toi, il s'agit de la variable toto.
Pour l'arduino, il s'agit de ce qui se trouve à l'adresse 0x015F

Donc vouloir manipuler dynamiquement des noms de variable par programme est totalement inconsistant.

Maintenant, si ce que tu souhaites faire consiste juste à dérouler le même traitement en mettant à jour des variables différentes, la solution passe par les paramètres d'appel de fonction. Variable passée en valeur ou en adresse. C'est probablement ce point qu'il faudrait que tu approfondisses en butinant sur le net.

Si vous avez vraiment besoin de nom de variables dynamiquement créés et nécessaires pour que l'utilisateur les définisse, les référence ou que le programme les affiche alors Créez une structure qui a 2 éléments: le nom de la variable sous forme d'un char si vous n'avez que des lettres simples à gérer et un entier (ou un float, un double ...) pour stocker sa valeur.

Si vous gérez un petit nombre de variables allouables créez directement un tableau de n éléments de type de cette structure et stockez y vos éléments.

Si le nombre n'est pas connu à l'avance alors il faudra allouer dynamiquement l'espace mémoire pour la structure et fabriquer sans doute une liste chaînée (rajouter un pointeur sur la structure suivante dans la structure par exemple) - bref il y a un peu de boulot

Cela dit - votre histoire semble un peu bizarre - quel est véritablement le problème que vous voulez résoudre et pour lequel vous êtes sûr qu'il faut pouvoir faire ce que vous demandez ??

En fait , je veux répeter 3 fois ce void (ou plus) , et qu'il modifie ,a , puis b , puis c ... en répétant a chaque fois les mêmes instruction ...
:grin: Désolé pour cette question farfelue , je m'en vais utiliser la variable yolo pour savoir simplement quelle lettre dodifier a grand coups de If ElseIf ...

Merci encore . :smiley: :smiley:

Oui un switch/case sur ce que vous Lisez va suffire

Ta demande et juste pas claire. On ne sait pas si la variable en question est pré-existante ou pas. J'ai l'impression qu'en fait tu veux créer une fonction qui retourne une valeur.
Pour cela, il suffit de modifier le void dans la déclaration de la fonction par le type que la fonction doit retourner et de retourner la valeur en question.

int maFonction(int mes_arguments){
      // ici tu fais tes calculs et tu détermines la valeur à retourner
      .....
     // à la fin de la fonction tu retournes une valeur
     return(ma_valeur)   // ma_valeur peut-être une constante ou une variable locale 
}
  }

Pour l'utiliser

a = maFonction( 12);
b = maFonction(une_variable_quelconque);
c = maFonction(b);
c = maFonction(c);

Vous pourriez faire qque chose comme cela (non testé. Tapé à la volée sur mon smartphone)

int a,b,c;

// .......
// ......

(int *) quelleVariable(char yolo)
{
int * varPtr;
switch (yolo) {
    case 'a':
      varPtr = &a;
      break;
    case 'b':
      varPtr = &b;
      break;
    case 'c':
      varPtr = &c;
      break;
    default: 
       varPtr = NULL;
  }
  return valPtr;
}


void loop()
{
  int * monPointeurVariable;
  char variableName;

   // ...
   // ...

   variableName = 'c'; // en pratique pour vous lire un character sur Serial et le stocker dans variableName
   monPointeurVariable = quelleVariable(variableName);
   if (monPointeurVariable) *monPointeurVariable = 10; // pour affecter une valeur  votre variable

  // ...
}

Comme ça pas tout le code dans des gros if, trouvez juste la bonne variable et référencez sa position en mémoire avec un pointeur