A quoi correspond ce bout de code ?

bonjour à tous et à toutes,

j'utilise un écran oled i2c sur un arduino uno, dans le code fourni pour l'utiliser, je ne comprend pas cette ligne : "SH1106Ui ui ( &display );"

Cela veut-il dire que "SH1106Ui" est renommé en "ui" ? et ce qui est entre (), à quoi ça correspond ? une sorte de variable passé en paramètre ?

je ne sais pas comment chercher ces informations sur internet.

En vous remerciant.

le langage utilisé pour coder en arduino est du C++ qui est un langage "orienté objets", ca veut dire que tu peux "inventer" ou créer des "objets" qui se comportent comme des "types". Au même titre que "int" par exemple est le type entier, tu peux créer des variables des "types objets" que tu veux.

dans ta question "SH1106Ui" semble être donc un objet. Ca veut dire que dans la librairie qui t'es fournie pour l'utiliser il y a une "classe" C++ qui permet de déclarer et définir ce que va faire cet objet. Ainsi tu peux utiliser "SH1106Ui" pour créer des variables de ce "type objet" pour les utiliser.

"ui" est donc la variable de type "SH1106Ui", en langage "informatique" cela s'appelle une "instance" de l'objet. "ui" est donc une instance de l'objet "SH1106Ui". Par la suite tu n'utiliseras donc que "ui" pour accéder aux fonction de ton écran.

En d'autres termes, pour imager la chose, tu peux t'imaginer que "SH1106Ui" est la spécification de ton écran, quelque chose qui dit comment il fonctionne, mais valable donc pour tous les écrans du même type. Puis que "ui" est en fait ton écran à toi, le seul et unique que tu as entre te mains, celui que tu peux ou vas utiliser.

ce que tu trouves entre parenthèses : "(&display)" n'est rien d'autre que le paramètre nécessaire à la bonne création de ton objet, pour qu'il puisse fonctionner correctement.

Si tout cela te semble flou quand même (ce qui est fort probable car ce sont des principes pas forcément évidents au premier abord) tu as deux possibilités :

  1. ne pas essayer de comprendre et utiliser les "recettes de cuisine" que tu trouves dans les tutos : solution séduisante parce que t'auras l'impression d'avancer plus vite mais tu ne comprendras pas ce que tu fais et tu vas t'arracher les cheveux lorsque t'auras des problèmes à résoudre et crois-moi, ca t'arrivera ;
  2. comprendre comment ca fonctionne : je t'invite à consulter des tutos ou de la littérature concernant le C++, c'est là que tout est expliqué... :wink:

Zorro_X a à peu près tout dit. La variable passée en objet est précédée d'une esperluette (&), ce qui veut dire qu'elle n'est pas passée par valeur, mais par référence.
Dans la plupart des cas, en tout cas avec Arduino, quand on passe un objet (variable) en paramètre d'une fonction (entre les parenthèses de la fonction), on le passe par valeur. C'est à dire que l'on écrit fonction(variable). Ainsi lors de l'appel de la fonction, le système évalue la valeur de variable en réalise une copie temporaire en mémoire pour les besoins de la fonction et détruit cette copie temporaire une fois la fonction exécutée. Ainsi si l'on modifie cette variable passée en paramètre dans cette fonction, la variable d'origine restera inchangée en dehors de la fonction.
Dans le cas d'un passage par référence, le mécanisme est différent: on passe comme paramètre l'adresse mémoire de la variable: fonction(&variable). Dans ce cas-là, puisque nous avons directement l'adresse mémoire de la variable, premièrement il n'est pas créé de copie temporaire, ce qui économise de la mémoire (et ça peut suffire à justifier une telle manière de faire, dans certains cas), ensuite il est possible d'avoir accès directement à la variable d'origine, et même de la modifier. Quand la fonction se termine, les modifications effectuées persistent.

Dans ton cas, le nom des objets et variables utilisés me fait penser que tu as deux classes qui rentrent en compte. Une classe qui gère l'affichage (allumer ou éteindre un pixel, etc.) de l'écran, dont display doit être une instance, et une classe qui gère l'interface utilisateur (écrire, tracer une ligne, afficher un menu, etc.), dont ui est une instance. Je suppose que la classe qui gère l'affichage de l'interface utilisateur est conçue pour fonctionner en utilisant la classe qui gère l'affichage.Le passage de display par référence (&display) doit permettre à la première d'accéder directement à la deuxième, pour rendre l'utilisation plus souple.

Et le ronchon de service ajoute que tu n'as pas lu le message de Bienvenue qui demande des titres explicites.

Avec le titre que as mis, et qui ne veux rien dire, tu as obtenu des réponses de qualité mais qui ne pourront pas servir à ceux qui passent par le moteur de recherche du forum avant de poser une question.

C'est quand même dommage pour un forum qui est avant tout un forum de partage.

Tu peux changer le titre en éditant le premier message, j'insiste : pas les derniers mais le tout premier message de ce sujet.
Merci.

68tjs:
Et le ronchon de service […]

:grin:

Merci à tous pour vos explications, ça m'aide beaucoup. Désolé 68tjs, je ne savais pas comment nommer ce thread, je suis pas sûr non plus comment le renommer maintenant :confused:

Franchement tu ne fais aucun effort !
Il y a trois messages épinglés en tête de forum si tu les avais lu tu aurai toutes les informations :

"Bienvenue......... " -> Conseils pour utiliser EFFICACEMENT ce forum
"Faire un nouveau message ....." -> Mode opératoire pour faire un nouveau message
"Editer son message pour les nuls" -> Comment modifier son message ET LE TITRE en particulier

non, ce que je veux dire, c'est : quoi mettre dans le titre pour que se soit plus parlant