# Récupérer la saisie de l'utilisateur dans une fonction

**URL:** <https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182>\
**Category:** Français\
**Created:** [November 9, 2021, 8:04am UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182 "2021-11-09T08:04:42Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![tsonea](https://avatars.discourse-cdn.com/v4/letter/t/a5b964/32.png) [@tsonea](https://forum.arduino.cc/u/tsonea)\
**Post date:** [November 9, 2021, 8:04am UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/1 "2021-11-09T08:04:42Z")

</div>

Bonjour !

Je souhaite récupérer la saisie de l'utilisateur de la console dans une fonction.  
En gros j'ai une fonction qui récupère ce qui a été écrit dans la console et qui retourne le tout en string. Une sorte d'input quoi.

Le problème c'est que j'ai pas de problème pour lire ce qui a été écrit quand je suis dans la void loop() mais impossible de faire fonctionner le même script dans une fonction...

Voilà mon code:

```cpp
String inputStr() 
{
 String str = "";
 while(Serial.available() <= 0) 
  {
      if(Serial.available() > 0)
      {
        str = Serial.readString();
        return(str);
      }
  }
}

```

Merci beaucoup de votre aide !!

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [November 9, 2021, 8:20am UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/2 "2021-11-09T08:20:02Z")

</div>

Si vous voulez écouter le port série (ou gérer un flux asynchrone genre keypad) vous pouvez jeter un oeil à mon [petit tuto sur le sujet](http://forum.arduino.cc/index.php?topic=500683.0)

---

<div class="post-metadata">

**Author:** ![tsonea](https://avatars.discourse-cdn.com/v4/letter/t/a5b964/32.png) [@tsonea](https://forum.arduino.cc/u/tsonea)\
**Post date:** [November 9, 2021, 8:34am UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/3 "2021-11-09T08:34:28Z")

</div>

En regardant votre tuto je retombe sur des choses que j'avais déjà essayé sans succès me^me en modifiant mon code comme cela:

```cpp
String inputStr() 
{
  String r;
  while (Serial.available()) {
    r = Serial.read();
  }
  return(r);
}

```

Cela ne fonctionne toujours pas...  
Arduino lit une string vide et ne check seulement une seule fois si quelque chose est rentré par l'utilisateur. Alors qu'avec la while il devrait rechercher continuellement...

---

<div class="post-metadata">

**Author:** ![kamill](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kamill/32/221875_2.png) [@kamill](https://forum.arduino.cc/u/kamill)\
**Post date:** [November 9, 2021, 9:09am UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/4 "2021-11-09T09:09:12Z")

</div>

Bonjour,

Il suffit de tester si tu as reçu une chaine de caractères dans ta fonction et de ne retourner que si tu as reçu une chaine.

```cpp
String inputStr()
{
  String str;
  while (str.length()==0)
  {
    str = Serial.readString();
  }
  return str;
}

```

Cependant cette manière de faire pose problèmes

- ton programme est bloqué tant que tu n'as pas reçu ta chaine
- il faut éviter d'utiliser la class String qui provoque de la fragmentation mémoire

---

<div class="post-metadata">

**Author:** ![tsonea](https://avatars.discourse-cdn.com/v4/letter/t/a5b964/32.png) [@tsonea](https://forum.arduino.cc/u/tsonea)\
**Post date:** [November 9, 2021, 9:32am UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/5 "2021-11-09T09:32:22Z")

</div>

Ca marche pas non plus l'Arduino ne lis rien... Il y aurait une autre façon de faire ?

---

<div class="post-metadata">

**Author:** ![kamill](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/kamill/32/221875_2.png) [@kamill](https://forum.arduino.cc/u/kamill)\
**Post date:** [November 9, 2021, 9:52am UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/6 "2021-11-09T09:52:37Z")

</div>

Ca doit fonctionner. Met ton programme

---

<div class="post-metadata">

**Author:** ![jpbbricole](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jpbbricole/32/606025_2.png) [@jpbbricole](https://forum.arduino.cc/u/jpbbricole)\
**Post date:** [November 9, 2021, 10:06am UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/7 "2021-11-09T10:06:58Z")

</div>

Bonjour tsonea

> [@tsonea](#):
>
> Il y aurait une autre façon de faire ?

Voilà une façon de faire (Moniteur à 115200).

```arduino

//------------------------------------- Ligne de commandes
bool cmdNouvelleRecue = false; // Si une nouvelle commande a été reçue
String cmdTexte = ""; // Texte de la commande

void setup()
{
	Serial.begin(115200);
	Serial.setTimeout(50);
}

void loop()
{
	serialInput(); // Ecouter la console          

	if (cmdNouvelleRecue) // Si une nouvelle commande depuis la console
	{
		cmdExecute(cmdTexte);
		
		cmdTexte = "";
		cmdNouvelleRecue = false;
	}
}

void cmdExecute(String commande)
{
	Serial.println("Execution de " + commande);
}

/*-----------------------------------------------------------------------
  Réception de commandes depuis le moniteur
'*------------------------------------------------------------------------
*/
void serialInput()                                       
{
  if (Serial.available())
  {
	  cmdTexte = Serial.readString();
	  
	  cmdTexte.replace("\n", ""); // Nettoyer l'entrée
	  cmdTexte.replace("\r", "");
	  
	  cmdNouvelleRecue = true;
  }
}

```

Mais il faut savoir, que, dans le moniteur, tu ne peux pas saisir la saisie de l'opérateur "à la volée", la saisie doit obligatoirement se terminer avec un Enter au clavier.

Cordialement  
jpbbricole

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [November 9, 2021, 12:09pm UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/8 "2021-11-09T12:09:10Z")

</div>

> [@tsonea](#):
>
> je retombe sur des choses que j'avais déjà essayé sans succès

Il y a un code tout fait qui vous prévient quand le séparateur est reçu

Ensuite tout dépend de comment votre code est organisé …

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 8, 2022, 12:09pm UTC](https://forum.arduino.cc/t/recuperer-la-saisie-de-lutilisateur-dans-une-fonction/923182/9 "2022-05-08T12:09:31Z")

</div>

Closed on May 8, 2022, 12:09pm UTC

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
