Objectifs
- A quoi servent les fonctions à retour multiples ?
- Savoir déclarer des variables inout dans une fonction
- Savoir définir une fonction à retour multiple
- Exemples pratiques implémentés sur carte Arduino Mega
- 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;
}