Faire passer l'adresse de la variable en argument sous arduino

Bonjour,

Ma fonction doit modifier la valeur d'une variable.

Pour faire simple:

boolean value;

function_1(){
 value = 1;
 new_value = 0;
 function_2(value,new_value); //le passage de value se fait comment sous arduino ??
}

function_2(value, new_value){
 value = new_value;
}

J'ai essayé comme ça mais ça ne fonctionne pas... En C j'utilise les pointeurs mais sous arduino comment je peux faire ?

Merci

Bonjour,
La programmation Arduino c'est du C. :wink:

Dans ce cas je dois faire une erreur C :slight_smile:

boolean &value;

function_1(){
 value = 1;
 bollean new_value = 0;
 function_2(&value,new_value); //le passage de value se fait comment sous arduino ??
}

function_2(boolean &value, boolean new_value){
 *value = new_value;
}

T'en penses quoi ?
Merci

Je pense que si tu as compilé ton code tu as du avoir quelques erreurs.

Pour pouvoir modifier une variable dans function_2, il faut lui passer un pointeur sur la variable. Donc la définition de function_2 est erronée.
La définition de value au début est aussi erronée. value c'est un boolean tout simplement.

Un topic sur le sujet Les pointeurs et tableaux - Tutoriels et cours - Arduino Forum

Exemple illustratif de programmation en C "de base"

void ajouter1(int *variable)
{
  *variable = *variable + 1;
}

...
int toto;

toto = 0;

Serial.print("avant : toto=");Serial.println(toto);
ajouter1(&toto);
Serial.print("apres : toto=");Serial.println(toto);

Voilà, et ça compile. Mais value n'a pas l'air de prendre correctement la bonne valeur. Qu'en pensez-vous ?

boolean value = 0;
boolean *Pvalue = &value;

function_1(){
 boolean new_value = 1;
 function_2(Pvalue,new_value); //le passage de value se fait comment sous arduino ??
}

function_2(boolean *Pvalue, boolean new_value){
 *Pvalue = new_value;
}

salut en regardant ton code value est initialisé a 0 il ne change donc pas !

que cherche tu a faire exactement?

tu peut au choix passer des variable a tes fonction de trois façon diférente:

1-la plus simple par recopie de la variable

int ma_variable=1;

ma_fonction( ma_variable);

void ma_fonction(int une_variable){

serial.println(une_variable);
}

dans ce code on initialise la variable ma_variable a 1 on la passe a la fonction et cette derniere l'affiche

2-un peut plus compliqué par pointeur
un pointeur est une variable qui ne contien pas la variable pointer mais l'adresse memoire de celle si
on utilise alors l'étoile:

int ma_variable=1;

ma_fonction( &ma_variable);

void ma_fonction(int *une_variable){

serial.println(*une_variable);
}

lorsque l'on passe la variable a la fonction on doit la faire précédé de l'esperlouette le "and" sur le clavier cela a pour effet de ne pas copier la variable ma_variable , mais de transmetre l' adresse memoire ou cette derniere est enregistré.

lorsque dans la fonction on va travailler sur la variable on la fera précédé de "*" pour indiqué que l'on travaille sur la variable pointer par cette adresse.

Attention le pointeur et du type de la varible pointé.

3- une autre façon est de passé par référence

int ma_variable=1;

ma_fonction( ma_variable);

void ma_fonction(int &une_variable){

serial.println(une_variable);
}

c'est asser "simailaire" dans sont fonctionement au pointeur avec moins de prise de téte de syntaxe.

Finalement, mon code est bon ! c'était mon algo derrière qui avait un os !

Merci bien !

tibo7:
Voilà, et ça compile. Mais value n'a pas l'air de prendre correctement la bonne valeur. Qu'en pensez-vous ?

boolean value = 0;

boolean *Pvalue = &value;

function_1(){
boolean new_value = 1;
function_2(Pvalue,new_value);
}

function_2(boolean *Pvalue, boolean new_value){
*Pvalue = new_value;
}