[Resolu] Modifier la valeur d'une variable qui se trouve dans un tableau

Alors voila j'ai pu remarquer que quand je modifie les valeur des variable dans mon tableau cela ne modifie que la valeur dans le tableau et non pas ma variable en général. comme si dans mon tableau c'est une copie de ma variable.

j'aimerais donc savoir si il est possible de modifier ma variable du tableau et quelle se répercute sur la variable en elle même pour que je puisse la récupérer sans avoir a pointer dans mon tableau

PS: je vous met mon code sur le quelle je fait mes test.

constexpr unsigned long sendInterval { 1000 };
unsigned long sendNow { 0 };

long int _p_act;
long int PPp_target;
long int _DCOMopmd_act;
long int _DCOMstatus;
long int DCOMopmode;
long int DPL_mfStat;

long int VAR_p_act [2]={_p_act,7706};
long int VAR_PPp_target [2]={PPp_target,6940};
long int VAR_DCOMopmd_act [2]={_DCOMopmd_act,6920};
long int VAR_DCOMstatus [2]={_DCOMstatus,6916};
long int VAR_DCOMopmode [2]={DCOMopmode,6918};
long int VAR_DPL_mfStat [2]={DPL_mfStat,6988};

long int *VarModbus []={VAR_p_act,VAR_PPp_target,VAR_DCOMopmd_act,VAR_DCOMstatus,VAR_DCOMopmode,VAR_DPL_mfStat};
int VARaddrMB;

void setup(){
Serial.begin(9600);
    // Wait for Serial or start after 2.5s
    for (auto const timeout = millis() + 2500; !Serial && timeout < millis(); delay(500))
        ;

    delay(2500);
}
void loop() {
  if (millis() > sendNow) {
    for (int i = 0; i < sizeof VarModbus / sizeof VarModbus[0];i++){
      
      VARaddrMB = VarModbus[i][1];
      
      VarModbus[i][0]= request(VARaddrMB);
      
      Serial.println(VarModbus[0][0]);
      Serial.println(_p_act);
      /*********************************
       * CONCLUSION
       * 
       * VarModbus[0][0] n'est pas egale a _p_act
       */
    }
    sendNow = millis() + sendInterval;
  }
}

long int request(int addrMB){
  Serial.println(addrMB);
  return 13200;
}

ça sent le problème dit XY...

pourquoi voulez vous avoir la variable représentée 2 fois ?

pourquoi ne pas utiliser une structure si vous voulez grouper des éléments ?

mon but est de faire une table d'echange pour communiquer en modbus. je struture donc avec des des tableau qui contienne la variable et la l'adresse modbus puis je les met dans un grand tableau qui est ma table d'echange.

plus tard dans mon programme j'aimerais recuperer la variable pour pouvoir l'utiliser seulement avec son nom et pas en passant par sa localisation dans le tableau.

si je dois revoir ma structuration il n’y a pas de souci, mais comment faire?

si vraiment c'est nécessaire parce que vous trouvez plus simple d'accéder les variables ensuite, vous pourriez faire une structure qui contient la référence de la variable

int32_t _p_act        = 10;
int32_t PPp_target    = 20;
int32_t _DCOMopmd_act = 30;
int32_t _DCOMstatus   = 40;
int32_t DCOMopmode    = 50;
int32_t DPL_mfStat    = 60;

struct t_modbus {
  int32_t & variable;
  uint32_t adresse;
};

t_modbus VarModbus[] = {
  {_p_act, 7706},
  {PPp_target, 6940},
  {_DCOMopmd_act, 6920},
  {_DCOMstatus, 6916},
  {DCOMopmode, 6918},
  {DPL_mfStat, 6988},
};
const byte modbusCount = sizeof VarModbus / sizeof * VarModbus;

void printAll() {
  for (byte i = 0; i < modbusCount; i++) {
    Serial.print(VarModbus[i].adresse);
    Serial.write('\t');
    Serial.println(VarModbus[i].variable);
  }
}

void setup() {
  Serial.begin(115200);
  printAll();

  Serial.println("\nMODIFICATION DES VARIABLES, IMPRESSION DU TABLEAU");
  _p_act        = 100;
  PPp_target    = 200;
  _DCOMopmd_act = 300;
  _DCOMstatus   = 400;
  DCOMopmode    = 500;
  DPL_mfStat    = 600;
  printAll();

  Serial.println("\nMODIFICATION DANS LE TABLEAU");
  for (byte i = 0; i < modbusCount; i++)  VarModbus[i].variable = 50 * (i + 1);
  printAll();

  Serial.println("\nIMPRESSION DES VARIABLES");
  Serial.print("_p_act = "); Serial.println(_p_act);
  Serial.print("PPp_target = "); Serial.println(PPp_target);
  Serial.print("_DCOMopmd_act = "); Serial.println(_DCOMopmd_act);
  Serial.print("_DCOMstatus = "); Serial.println(_DCOMstatus);
  Serial.print("DCOMopmode = "); Serial.println(DCOMopmode);
  Serial.print("DPL_mfStat = "); Serial.println(DPL_mfStat);
}

void loop() {}

mais bon, ça me semble lourd.

le plus propre serait de définir l'index pour une variable donnée par exemple

#define _P_ACT 0

et quand vous voulez lire cette variable vous demandez
VarModbus[_P_ACT].variable

oh nikel merci, je ne savais pas que ça existais les structure.

mais du coup pour faire moins lourd, je comprend pas trop, je garde ma stucture mais pour demander ma variable je fait

VarModbus[_P_ACT].variable

sauf qu'il faut déclarer la structure sans la référence et au lieu de #define on peut faire une énumération (la numérotation commence à 0)

struct t_modbus {
  int32_t  variable;
  uint32_t adresse;
};

t_modbus VarModbus[] = {
  {0, 7706},
  {0, 6940},
  {0, 6920},
  {0, 6916},
  {0, 6918},
  {0, 6988},
};

enum : byte {_p_act, PPp_target, _DCOMopmd_act, _DCOMstatus, DCOMopmode, DPL_mfStat};

vous pourrez alors faire

VarModbus[_DCOMopmd_act].variable = 10;

ou lire l'adresse par VarModbus[_DCOMopmd_act].adresse

par exemple

très bien je vois.

je pense que le sujet est résolut pour ma part.

un grand merci pour votre aide.

ok bonne continuation