Catégories
Arduino

Arduino 28#: fonctions à retour multiple

Objectifs

  1. A quoi servent les fonctions à retour multiples ?
  2. Savoir déclarer des variables inout dans une fonction
  3. Savoir définir une fonction à retour multiple
  4. Exemples pratiques implémentés sur carte Arduino Mega
  5. Etc.

A quoi servent les fonctions à retour multiples ?

int summul(int a, int b)

{

  return a+b;   //  Syntaxe interdite

  return a*b;

  return a-b;

}

Technique 1: Utilisation d’une variable intermédiaire

int summul(int a, int b, int type)

{

  if type==0

    return a+b;

  else if type==1

    return a*b;

  else

    return a-b;

}

Problèmes

  • Il faut 3 appels pour obtenir les 3 résultats!
  • Solution non optimisée

Technique 2: Utilisation des pointeurs

void summul(int a, int b, int* somme, int* mul, int* diff)

{

  *somme=a+b;

  *mu=a*b;

  *diff=a-b;

}

Avantages

  • 1 seul appel = 3 résultats
  • Variables en entrées/sorties au même temps
  • Pas besoin d’utiliser le mot return

Exemple

// Variables


int maxVal, minVal;

int ValInst;

unsigned int count=0;




void setup()

{

  Serial.begin(9600);

  maxVal=analogRead(A0);

  minVal=analogRead(A0);

}




void loop()

{

  // Lecture de la valeur instantanée

  ValInst=analogRead(A0);




  // Calcul de la valeur Max & Min

  getMaxMin( ValInst, &maxVal, &minVal);







  // Affichage dans le port série

  Serial.print(ValInst); Serial.print(",");

  Serial.print(maxVal); Serial.print(",");

  Serial.println(minVal);




  // Init count

  count+=1;

  if (count==100)

  {

    count=0;

    maxVal=0;

    minVal=255;

  }

   

  // Délai

  delay(10);







}




void getMaxMin( int val_inst, int* val_max, int* val_min)

{

    if (val_inst>*val_max)

      *val_max=val_inst;




    if (val_inst<*val_min)

      *val_min=val_inst;

}

Laisser un commentaire