Problème avec la librairie LiquidCrystal

Bonjour,

Je vais vous exposer le problème que j'ai qui n'est peut être pas forcément courant.
Je programme sur un Arduino mega2560, et j'utilise un programme principal que je vais appeler main.ino dans ce topic pour faciliter la compréhension, suivi d'un fichier.cpp et d'un fichier.h , lorsque j'utilise la ligne de code LiquidCrystal lcd(..,.., etc) dans le main tout fonctionne, sauf que je ne peux pas utiliser de fonction lcd.setCursor() dans le fichier.cpp (car il a besoin de la ligne écrite plus haut) et quand je met cette ligne"LiquidCrystal lcd(..,.., etc)" dans ce fichier.cpp je ne peux plus utiliser de fonction lcd dans mon main (car il manque cette ligne), j'ai alors pensé à mettre cette commande dans les deux fichiers mais ça plante à la compilation..

Si vous avez des solutions..

Merci d'avance

Les fichiers .cpp et .h sont les librairies, qui contiennent les définitions des objets et méthodes disponibles, le code à exécuter est placé dans le main.

C'est bien là qu'il faut instancier les objets pour ensuite faire appel aux méthodes associées.
lcd.setCursor() est à placer dans le programme principal (main) une fois créé lcd.

Je crois avoir compris ton problème

Tu veux qu'un même objet (en l'occurrence lcd) puisse être appelé dans ton programme principal, ainsi que dans le cpp d'une librairie.

Techniquement, tu peux déclarer ton objet dans le .h (en tant que référence vers un objet externe) et l'allouer dans le cpp.

dans le .h
extern LiquidCrystal lcd; //ce qui le rend accessible par tout programme "includant" ce .h

dans le .cpp
LiquidCrystal lcd(...);

Autre solution :
Tu laisses ton objet lcd à l'intérieur de ton .cpp uniquement, et tu ajoutes une fonction positionnerCurseur() dont le prototype est dans ton .h et le corps dans ton .cpp qui appelle lcd.setCursor()

Sur le fond, c'est bizarre que tu aies besoin d'accéder au même objet depuis le programme principal et depuis une librairie. A mon sens, cela ne devrait pas arriver avec un code bien structuré.

Merci de vos réponses je vais tester ça dans la matinée , en fait je veux gérer le déplacement d’un curseur sur un écran lcd, et je voudrais gérer ces déplacements (lcd.setCursor) dans des fonctions présentent dans un fichier.cpp et simplement les appeler dans mon main afin de pas avoir toutes les fonctions dans le main (pour le rendre plus propre) mais par contre mettre dans le setup du main les fonctions d’init du lcd du genre lcd.begin() . Voila si ça peut vous éclairer , merci

W_White:
et simplement les appeler dans mon main afin de pas avoir toutes les fonctions dans le main (pour le rendre plus propre) mais par contre mettre dans le setup du main les fonctions d'init du lcd du genre lcd.begin() . Voila si ça peut vous éclairer , merci

Ce qui n'est pas logique comme le fait remarquer bricoleau.
Si tu déportes des fonctions dans une "librairie" autant tout y mettre.
Rien ne t'empêche de mettre une fonction initialiserLCD dans la librairie et l'appeler depuis ton main. Ainsi le main n'a même pas connaissance de l'objet LCD qu'il n'a pas à manipuler directement.

Si c'est logique c'est juste que je vous expose peut être mal le problème..
J'ai bien sure pensé a faire un fichier.cpp contenant toutes les fonctions pour la gestion du lcd et simplement les appeler dans le main, sauf que ça plante à la compilation car dans le main il faut impérativement qu'il y est la ligne LiquidCrystal(..) sinon ça ne marche pas.. et si je la met il plante car elle est appelée deux fois , dans le main et dans le cpp..