Ecouter le Port Série ou un keypad (applicable à 1 flux de données asynchrone )

La notion de marqueurs

Quand on échange de l'information il faut généralement pouvoir savoir où commence un message et où il se termine.

Dans la vraie vie, quand vous discutez avec quelqu'un au téléphone par exemple, vous entendez un son et vous savez donc que votre interlocuteur a commencé à parler. Vous écoutez et vous répondez.

Si je vous dis:

"Bonjour" "comment ça va ?"

vous avez la possibilité si le premier silence est long, de déterminer que j'ai fini de vous saluer et vous me répondez "Salut", puis vous entendez la seconde partie et vous me répondez "ça va pas mal merci et vous ?"... on aura donc

- "Bonjour"
- "Salut"
- "Comment ça va ?"
- "ça va pas mal merci et vous ?"

si le premier silence est court la discussion sera plutôt

- "Bonjour, Comment ça va ?"
- "Salut, ça va pas mal merci et vous ?"

et si vous êtes malpoli vous pouvez même me répondre pendant que je parle :slight_smile:

Ce qu'il se passe c'est que vous interprétez au fur et à mesure (car votre cerveau bosse) ce que votre interlocuteur dit et quand vous avez compris - où quand il se tait pendant un certain de temps (arbitraire est-ce une pause pour respirer et la phrase n'est pas finie - où a-t-il fini de s'exprimer) - vous avez un message complet et envoyez une réponse ou effectuez une action.

- "Va ranger ta chambre et fais tes devoirs !"
- "Oui papa, bien sûr, tout de suite." + action (enfin pas toujours :slight_smile: )

ça c'est la vraie vie et ça marche pas trop mal car votre cerveau est plutôt puissant et même si deux messages sonores sont mêlées et arrivent à vos oreilles, votre cerveau saura généralement les différencier (la radio et quelqu'un qui vous parle = aucun soucis pour les humains)... Mais pour aider nos petits micro-contrôleurs peu puissant à déchiffrer des ordres ou recevoir des messages, on doit éviter la pollution sonore (bruit sur la ligne) et les aider un peu en utilisant différentes techniques pour leur signaler des choses, du genre:

"Et fais gaffe un peu, je vais te parler" --> marqueur de début de communication
"C'est bon j'ai finis de parler, tu as toute l'info" --> marqueur de fin de communication

Sur un keypad, le "j'ai quelque chose à dire" c'est plusieurs pins qui vont prendre un niveau logique donné pour indiquer quelle touche est appuyée par exemple. le composant port série matériel gère cela aussi au niveau bas pour la gestion de l'arrivée des bits et avec la classe Serial va vous présenter un octet complet une fois reçu.


La classe [url=https://www.arduino.cc/en/Reference/Serial]Serial[/url] (ou Stream en fait) offre des fonctions de haut niveau pour lire des données. Par exemple vous pouvez faire un [url=https://www.arduino.cc/en/Reference/ParseInt]Serial.parseInt()[/url] pour lire un entier.

Cette fonction embarque un peu d'intelligence "humaine" comme lors d'une conversation. Cette fonction écoute, pendant un certain temps, ce qui se dit sur le port série et ignore tout ce qui ne ressemble pas à un chiffre ou un tiret "moins", puis une fois trouvé ce marqueur de début va tenter d'interpréter un entier et arrêter soit au prochain caractère qui ne sera pas un symbole ASCII de chiffre soit attendre un time out (paramétrable). Par exemple si vous envoyez sur le port série [color=red]bonjour[/color][color=blue]1234[/color][color=purple]coucou[/color]

la fonction va laisser tomber la partie [color=red]bonjour[/color], fabriquer le nombre 1234 en lisant [color=blue]1234[/color] sur le port série et s'arrêter en laissant dans le buffer série [color=purple]coucou[/color] puisque la fonction aura reconnu le [color=purple][b]c[/b][/color] comme n'étant pas un chiffre.

mais si vous tapez juste [color=red]bonjour[/color][color=blue]1234[/color] alors la fonction va ignorer la partie [color=red]bonjour[/color], fabriquer le nombre 1234 en lisant [color=blue]1234[/color] sur le port série mais va devoir attendre le timeout (1 seconde par défaut) car elle n'a aucun moyen de savoir si le nombre est arrivé complètement ou pas - et 1 seconde c'est long parfois!

C'est un peu comme dans la vraie vie si je vous demande "combien ça coûte" et que vous dites lentement "mille deux..... cent .... trois euros", tant que je n'ai pas tout entendu je ne sais pas si c'est "1002" ou '1200" ou finalement "1203" car le mot "euros" et mon marqueur de fin de réponse. Cependant vous auriez pu rajouter "et trente deux centimes" après le mot clé, donc tout cela reste un peu arbitraire et on voit bien que pour des raisons de simplicité, avoir un marqueur de début et surtout un marqueur de fin ça aide à bien se comprendre (surtout si on a une intelligence limitée comme nos petits arduinos)