je suis les leçons de démarrage du kit que j'ai reçu avec la carte UNO R3.
Je suis à peine arrivées à la leçon 5 que je reçois ce message incompréhension:
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\MyDigital_Inputs.ino:4:5: error: redefinition of 'int ledPin'
int ledPin = 5;
^~~~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\Digital_Inputs.ino:5:5: note: 'int ledPin' previously defined here
int ledPin = 5;
^~~~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\MyDigital_Inputs.ino:5:5: error: redefinition of 'int buttonApin'
int buttonApin = 9;
^~~~~~~~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\Digital_Inputs.ino:6:5: note: 'int buttonApin' previously defined here
int buttonApin = 9;
^~~~~~~~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\MyDigital_Inputs.ino:6:5: error: redefinition of 'int buttonBpin'
int buttonBpin = 8;
^~~~~~~~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\Digital_Inputs.ino:7:5: note: 'int buttonBpin' previously defined here
int buttonBpin = 8;
^~~~~~~~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\MyDigital_Inputs.ino: In function 'void setup()':
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\MyDigital_Inputs.ino:10:6: error: redefinition of 'void setup()'
void setup()
^~~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\Digital_Inputs.ino:10:6: note: 'void setup()' previously defined here
void setup()
^~~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\MyDigital_Inputs.ino: In function 'void loop()':
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\MyDigital_Inputs.ino:17:6: error: redefinition of 'void loop()'
void loop()
^~~~
C:\Users\hmica\OneDrive\Documents\Arduino\code\Lesson 5 Digital Inputs\Digital_Inputs\Digital_Inputs.ino:17:6: note: 'void loop()' previously defined here
void loop()
^~~~
exit status 1
Compilation error: redefinition of 'int ledPin'
est-ce que vous pourriez m'aider ? Je suis certaine de mon branchement.
Merci d'avance
L'IDE Arduino va chercher tout seul les ino du même répertoire ? Dans mon souvenir (je n'utilise plus l'IDE d'Arduino depuis belle lurette) quand on ouvre un ino avec l'IDE, seul celui-ci est compilé, c'est curieux... Mais sans plus d'info difficile de répondre - @helene_88 pouvez-vous nous dire ce qu'il y a à côté de votre fichier ? Et par la même occasion, quel code contient-il ?
Sinon tu fais l'essai, tu réinstalles l'IDE ARDUINO, tu fais un petit programme tout simple avec quelques variables. Tu dupliques le même fichier ino et tu le renommes différemment dans le même répertoire et tu auras le même genre d'erreurs que @helene_88
Bonne soirée à toi
PS : si tu lis les messages d'erreurs tu le comprends.
D'accord, au temps pour moi... Mais un tel mode de fonctionnement doit bien avoir une utilité, que je n'arrive pas à saisir - y a t-il une raison à ça ?
Bonjour @pandaroux007
Il n’y a pas d’utilité particulière mais il ne faut créer qu’un seul fichier avec setup() et loop() et ne pas redéfinir une variable ou une fonction. Il faut également tenir compte de l’ordre alphabétique de la compilation.
Personnellement je n’ai jamais essayé et je n’y vois pas une utilité particulière. Mais c’est possible.
PS : mes sources : ChatGPT et pour en savoir plus l’IA donne un descriptif particulièrement bien conçu avec des exemples Elle ajoute également que ce n’est pas vraiment utile et source d’erreurs.
Tout simplement découper son code en plusieurs morceaux, comme tu le fais lorsque tu ajoutes des .cpp et des .h dans le répertoire de ton projet. Sauf que tu n'as pas besoin de faire d'include puisque l'IDE concatène tout les fichiers.
Arduino n'a fait que recopier Wiring.
Wiring s'est inspiré de Processing.
Processing a-t-il inventé setup() et loop(), je ne sais pas.
J'ai eu une fois une information que c'était encore plus ancien que processing.
Utilité ?
Faciliter le travail pour ceux qui n'aiment pas travailler sur des fichiers avec trop de lignes, mais qui ne veulent pas prendre un tuto de C/C++.
Tu mets setup() et loop() dans le fichier principal et les autres fonctions dans des fichiers séparés.
Danger :
A trop simplifier sans donner les explications ni fixer les limites, on fait plus de mal que l'on aide.
Rien ne vaut un tuto sur la programmation en fichiers séparés.
Il ne faut pas oublier que le compilateur ne voit jamais le fichier ino.
L'IDE Processing/Wiring/Arduino transforme au préalable le fichier ino en un vrai fichier C++.
C'est pour cela que tous les fichiers ino doivent être concaténés.
A noter que platformIO est plus proche d'un fonctionnement plus classique où il faut faire soi-même les déclarations préalables des fonctions.
setup() et loop() dans le fichier ino principal -> celui qui est ouvert par l'IDE.
les autres fonctions dans autant de fichiers ino que l'on veut
il ne peut pas y avoir de problème d'ordre alphabétique.
Le fonctionnement de l'IDE est connu :
C'est l'IDE qui ajoute en tête du programme main.cpp les déclarations de toutes les fonctions, y compris celles de setup() et loop().
Ces déclarations sont obligatoires, sinon si le compilateur rencontre un appel à une fonction dont il n'a pas été averti il génère une erreur.
Comme il y a concaténation et création d'un fichier unique l'IDE fait l'ensemble des déclarations.
Il y a problème si les fonctions setup() et loop() sont déplacées dans des fichiers ino.
Si on met setup() dans le fichier "A.ino" et loop() dans le fichier "B.ino", setup() s'éxécutera avant loop() et ce sera OK.
Si on inverse (setup dans B.ino et loop dans A.ino), loop() tentera de s'exécuter avant setup() et là cela ne fonctionne pas.
Concaténer les fichiers c'est aussi perdre la possibilité de réemploi ultérieur.
Il me semble que ce qui s'appelle une" bibliothèque" est seulement des fichiers qui sont déposés dans un emplacement réservé et connu de l'IDE.
Je n'ai pas vu de différence de fond, seulement de forme, entre la programmation en fichiers séparés et une bibliothèque.
La concaténation par ordre alphabétique peut poser problème.
Par exemple si les variables globales sont définies dans un fichier varglo.ino, celui ci sera concaténé à la fin et on aura des erreurs de variables non déclarées car définies après leur utilisation.
De toute façon si on veut découper le code en plusieurs fichiers il vaut beaucoup miuex avoir un seul fichier .ino et des fichiers .cpp .h.
C'était sous-entendu, mais tu as raison : c'est mieux en le disant, que les définitions restent avec setup et loop dans ce que j'appelle le fichier principal.