Probleme de retour de fonction

bonjour le forum et ses participants,

je ne comprends pas comment appeler et faire une fonction return a partir d'un void.

J'ai une fonction void qui affiche un resultat sur la valeur du pin :

value = analogRead(analogInPin); // lecture du pin
void maValeur(){
    value2 = calcul sur la valeur;                      
    lcd.print(value2);
    delay(500);
  }

j'aimerai appeler cette fonction mais qu'elle donne la valeur par un return. Ce qui me permettrai de la garder et l'afficher plus tard dans une autre partie du code qui run juste en appelant la valeur quand jén ai besoin en faisant maValeur(); ou... autre chose ? :o Je fais un blocage, quelqu'un voudrait bien m'aider ? Merci

je me repond puisque je dors pas :)

Il faut voir les fonctions et... les ecrire. :D

Une fonction dont le type de retour est "void", ne peut pas retourner de valeur.

Tu dois changer "void" en un type de donnée que ta fonction va retourner.

Par exemple si "value2" est de type int, et que c'est cette valeur que tu veux lorsque tu appelle ta fonction, alors ta fonction devra retourner le même type:

int maValeur()
{
   int value2 = calcul();
   lcd.print( value2 );
   delay( 500 );

   return value2;
}

int resultat = maValeur();
lcd.print( resultat );

Si malgré tout tu ne veux pas changer le type de retour de ta fonction, il y a un autre moyen de lui faire "retourner" une, ou plusieurs valeurs, ça s'appelle le passage par référence:

void maValeur( int &ret )
{
   int value2 = calcul();
   lcd.print( value2 );
   delay( 500 );

   ret = value2;
}

int resultat;
maValeur( resultat );
lcd.print( resultat );

Humm tu te serais pas trompé Guix ?

void maValeur(int* ret )
{
   int value2 = calcul();
   lcd.print(value2);
   delay(500);

   *ret = value2;
}

void loop() {
int resultat;
maValeur(&resultat);
lcd.print(resultat);
delay(1000);
}

Bonjour, Comme j'essaie de comprendre aussi, pourquoi int et pas value2 dans la deuxième fonction ?

J’ai corrigé il restait une erreur dans mon code, après je suis pas sûr que ça ait un lien avec ta question que je ne comprend pas en fait …

Merci de vos reponses mais mais je ne comprends toujours pas.

je cherche a stocker la valeur de analogRead :
valeurBrut = analogRead(…)

des que j’en ai besoin, je la passe dans une fonction de traitement :

int F_traitement(int x){
if (valeur<125) {
retour = x * 100};
lcd.print(retour); }

pour l’afficher ailleur :

Lcd.print(F_traitement(valeurBrut));

Quel serait la bonne ecriture ?
Merci de votre aide

int F_traitement(int x){
  if (x<125) 
  {
        retour = x * 100;
    }
    else
    {
         retour=x;    
    }
    return retour;



}

Voir comme ça plutot. J’ai ajouter le ELSE, donc il te faut modifier cette zone

a+

pour l’afficher ailleur :

Quel serait la bonne ecriture ?
Merci de votre aide

Merci caap pour la reponse rapide :slight_smile: .

En modifiant le code comme tu dis… si je ne fais pas d’erreur…

#include <SoftwareSerial.h>
int valeurBrut = 10;

void setup() {
  Serial.begin(9600); // demarre le moniteur serie
}

void loop()
{
  F_traitement(valeurBrut);
Serial.println( retour );
delay(1000);
    
}
/**************************************************
 *  ESSAI SUR LE RETOUR DE FONCTION
 *************************************************/
int F_traitement(int x){
      int retour = 0;
      if (x<125) {
    retour = x * 10;
    } else {
         retour=x;
         }
    return retour;
}

jái ca comme erreurs :

A_fonction_et_operation_sur_valeur2.ino: In function 'void loop()':
A_fonction_et_operation_sur_valeur2.ino:11:17: error: 'retour' was not declared in this scope
'retour' was not declared in this scope

Il me semblait que declarer un type dans une fonction etait possible.
Qu’est ce qui ne va pas ? :frowning:
Merci

edit : ben oui on peut pas invoquer un retour sans sa fonction

En faisant :

Serial.println((F_traitement(valeurBrut));

ca fonctionne... :-)) merci encore pour vos messages.

en reprenant ton code d'avant

void loop()
{
int retour = F_traitement(valeurBrut);
Serial.println( retour );
delay(1000);
    
}

c'est le "int retour=" qui te permet de mémoriser la valeur que retourne ta fonction. Le 'int' pour la déclaration de la variable 'retour' peut etre fait plus haut dans le code bien sur. a+