[RESOLU] Création d'une variable automatiquement

Bonjour amis arduiniens, :smiley:

J'essaye actuellement de créer des variables à partir d'un tableau. Mais il m'est impossible de les créer avant le lancement du programme, ces variables doivent être créées pendant l'exécution du programme.
Après de nombreuses heures de recherche, je ne sais pas comment je peux le faire.
Pourriez vous m'aider, ou me dire si c'est tout simplement impossible. :cry:

Par exemple :
char Tab_Commande[8] = {3, 4, 5, 6, 7, 8, 9, 10};
Et je souhaiterais créer les variables : Tab_Commande3, Tab_Commande4, Tab_Commande5 ect...

// Du genre :
for (i = 0; i < sizeof(Tab_Commande); i++) {
   [Cree ma variable]
  }

En vous remerciant pour votre aide :wink:

Je pense que tu ne peux pas créer une variable dont le nom soit dépendant d'un contexte ou de la valeur d'une autre variable. Mais tu peux faire un if ou un switch :

// Du genre :
for (i = 0; i < sizeof(Tab_Commande); i++) {
   if (i==3) int Tab_Commande3 = 3;
   if (i==4) int Tab_Commande4 = 4;
   if (i==5) int Tab_Commande5 = 5;
  }

Attention cependant à la portée des variables, il est probable que cet exemple très basique doive être étoffé pour fonctionner :

// Du genre :
for (i = 0; i < sizeof(Tab_Commande); i++) {
   if (i==3) {
       int Tab_Commande3 = 3;
       //  les instructions qui utilisent la nouvelle variable
   }
// etc...
  }

ou

for (i = 0; i < sizeof(Tab_Commande); i++) {
   switch (i) {
       case 3 :
         int Tab_Commande3 = 3;
         //  les instructions qui utilisent la nouvelle variable
         break;
   }
// etc...
  }

Je pense que tu devrais détailler le problème que tu cherches à résoudre et on pourrait peur-être te proposer une solution.

Bonjour, merci à vous et désolé pour le temps de réponse :slight_smile:

  • Merci lesept, mais en effet je cherche plutôt à créer une variable dépendant d'une autre variable. La solution de switch n'est pas ce que je cherche, mais à défaut, je risque de l'utiliser ou de changer complètement de façon de programmer.

  • Merci fdufnews Oui mais j'ai pas vraiment d'exemple, c'est plus que en programmation, ma méthodologie habituelle fait appel régulièrement à des variable créées pour ensuite faire appel à ces variables. Bref, je pense qu'il va falloir que je revoie ma façon de programmer.

  • Merci pepe pour tes explications, je vais regarder ce malloc(). C'est étrange, elle ne figure pas dans la liste des fonctions de arduino. Je présume que cette liste est non exostive. Arduino Reference - Arduino Reference

Merci à vous trois, je pense simplement que ce que je cherche n'est pas possible.
Bon dev à tous :wink:

c'est plus que en programmation, ma méthodologie habituelle fait appel régulièrement à des variable créées pour ensuite faire appel à ces variables. Bref, je pense qu'il va falloir que je revoie ma façon de programmer.

Il est vrai qu'en PYTHON il est possible de fabriquer des variables à la volée.
En C / C++ ce n'est pas le cas.

@+

il vous suffit d'utiliser votre tableau.

 char Tab_Commande[8];
...
if (condition) Tab_Commande[3] = 'x';
else Tab_Commande[5] = 'z';

Bonjour a tous et merci pour vos interventions, cela m'a bien aidé à comprendre le language C (arduino),

Je réactualise une dernière fois ce topic pour les futurs Noob comme moi qui tomberaient sur ce topic.
Il est en effet impossible de créer des variables et il est impossible d'allouer de l'espace mémoire supplémentaire.
Comme l'espace mémoire est limité, on ne peux pas en créer en dehors de la compilation.
C'est également la raison pourquoi il faut déclarer le type de variable souhaité (la compilation alloue le nombre de place nécessaire dans la mémoire interne),

C'est très différent d'autres type de language (comme python), car dans ce cas, la mémoire est si grande qu'on s'en fou d'augmenter la place mémoire nécessaire.
Et comme le dit si bien pepe, il est préférable de rester modeste dans le développement.

Merci encore pour votre aide, ça m'a bien aidé,

hbachetti:
Il est vrai qu'en PYTHON il est possible de fabriquer des variables à la volée.

Pire: il n'est pas possible de les définir clairement.
Quand on veut travailler sur des octets pour une interface c'est galère.

Je ne vois pas trop de quoi tu parles.
Tu peux préciser ?

@+

Je parlais simplement de créer des variables globales ou des attributs d'instance :

for i in xrange(8):
    globals()['var' + str(i)] = 0

print "var0 =", var0
print "var1 =", var1
print "var2 =", var2
print "var3 =", var3
print "var4 =", var4
print "var5 =", var5
print "var6 =", var6
print "var7 =", var7

class sample:

    def __init__(self):
        for i in xrange(8):
            setattr(self, 'var' + str(i), 0)

    def dir(self):
        print "self.var0 =", self.var0
        print "self.var1 =", self.var1
        print "self.var2 =", self.var2
        print "self.var3 =", self.var3
        print "self.var4 =", self.var4
        print "self.var5 =", self.var5
        print "self.var6 =", self.var6
        print "self.var7 =", self.var7

s = sample()
s.dir()

Mais là on sort largement du cadre ARDUINO.

@+

Dododu01:
Bonjour a tous et merci pour vos interventions, cela m'a bien aidé à comprendre le language C (arduino),

Je réactualise une dernière fois ce topic pour les futurs Noob comme moi qui tomberaient sur ce topic.
Il est en effet impossible de créer des variables et il est impossible d'allouer de l'espace mémoire supplémentaire.
Comme l'espace mémoire est limité, on ne peux pas en créer en dehors de la compilation.
C'est également la raison pourquoi il faut déclarer le type de variable souhaité (la compilation alloue le nombre de place nécessaire dans la mémoire interne),

NON - POUR LES NOOBS FUTURS IL NE FAUT PAS CROIRE NI COMPRENDRE CELA

il est tout à fait possible de créer d'allouer de la mémoire dynamiquement par instantiation d'objets ou en utilisant malloc() et ses dérivées ou simplement dans une fonction en déclarant un variable locale à cette fonction....

void maFonction(size_t taille)
{
   // ICI JE J'ALLOUE DYNAMIQUEMENT DE LA MEMOIRE POUR UNE VARIABLE
   // SA MEMOIRE N'EST PAS ALLOUEE A LA COMPILATION
   // LA TAILLE DU TABLEAU VA DEPENDRE DE LA VALEUR DE LA 
   // VARIABLE PASSEE EN PARAMETRE A LA FONCTION LORS DE L'APPEL
   int tableau[taille]; 

   ...
   ...
} // et cette mémoire allouée disparait ici à la sortie de la fonction

Ce que vous ne pouvez pas faire parce que ça ne présente aucun sens en C ou C++ c'est créer dynamiquement un nouveau NOM de variable parce que ce concept n'existe purement et simplement pas à l'éxécution. On accède au contenu d'une variable par un pointeur sur l'adresse mémoire à lire (et en connaissant son type pour savoir combien d'octets lire)