calculs sur 2 fonctions

bonjour le Forum,
je n’arrive pas a passer ces 2 fonctions dans une autre fonction.
J’ai 2 fonctions qui me retourne chacune un int.
j’aimerai faire une operation a partir de ces 2 valeurs.

la premiere fonction

int debitConvert(){      // lecture du debit
  sensorValue = analogRead(analogInPin);     
  if (sensorValue > 40 ){ 
    outputValue = ((sensorValue * 3); 

  } else{
    outputValue = (sensorValue *2); 
  return outputValue;
    delay(1000);
    
  }
}

et la 2eme fonction

int debitDemandee() {
  static int tick = 0;
  int i; 
  int debit[4]{250, 500, 750, 1000}; 
int * ptr_debit;
ptr_debit = debit; 
// parcour la synchro du debit
    for (i = 0; i <4; i++){ tick++;
  if (tick == 0) {
ptr_debit = &debit[0]; 
  } else if (tick == 1) {
    ptr_debit = &debit[0]; 
  }else if (tick == 2) {
    ptr_debit = &debit[1]; 
  }else if (tick == 3) {
    ptr_debit = &debit[2]; 
  }else if (tick == 4) {
    ptr_debit = &debit[3];     
  }
return *ptr_debit;
}}

et puis faire
si debitConvert < debitDemande{
action();
mais meme un print ne sort pas.
Pourriez vous me dire ce qui ne va pas ?
merci de votre aide:-)

Salut,
Je ne suis pas une bête en C (je débute mais j’ai une petite connaissance du VB.NET).

Il me semble que tu as un problème dans ta fonction 2.

Je ne comprend pas :

int * ptr_debit;
ptr_debit = debit;

pourquoi “int *”

également, pour moi, la ligne prt_debit = debit ne sert à rien car tu affecte la valeur de prt_debit dans tes if/elseif.

enfin, ta variable tick est en static int, ce qui veux dire que sa valeur sera conservée. elle va donc continuer de s’incrémenter au dela de 4 rendant une valeur nule a ta fonction.

pour eviter cela, j’ajouterai un else ou je verifierai que tick n’est jamais suppérieur à 4.

Enfin, pour l’appel des fonctions, je pense qu’un

if(debitConvert()< debitDemande()){

devrait fonctionner mais je laisse les pro du C te confirmer tout cela (je n’ai que 3 jours d’expérience en C, je ne vais pas la ramenner… Si je me suis trompé, désolé, j’aurai au moins essayé)…

bon Code.

pereplex: Il me semble que tu as un problème dans ta fonction 2.

Je ne comprend pas :

int * ptr_debit;
ptr_debit = debit;

pourquoi "int *"

Ca s'appelle un pointeur ;)

Mais je ne vois absolument pas l'intérêt ici. Sans pointeur :

return debit[tick];

+1 pour le reste des remarques.

J'ajouterai qu'il manque un "=" ici

int debit[4]{250, 500, 750, 1000};

Au final fonction 2 :

int debitDemandee() {
static int tick = 0;
if(tick>4) tick=0;
int debit[4]={250, 500, 750, 1000}; 
return debit[tick++];
}

J’ai corrige selon vos conseils et ca fonctionne correctement. Merci beaucoup de vos reponses. :slight_smile:
et meme si cést pas exactement la bonne reponse, c’est sympa de repondre.
J’aurai aussi aime utiliser la 3eme fonction comme un boolean mais je ne sais pas comment faire…
du genre :

void 3emeFonction(){
bool bascule = false;
if(debitConvert()< debitDemande()){
bascule = !bascule;
actionValve (valve, bascule);}

valve correspond a un clapet motorise.
Si vous pouvez encore m’aider. :-*
merci

[edit] je vais me repondre mais avant je dois reparer l’alim qui a laché.

[edit] la reponse etait dans la question.