Rassembler plusieurs sketches pour faciliter la programmation

Bonjour à tous,

Je travaille sur un automate de pesée de plusieurs ingrédients, avec un système de pesée d’un côté et des relais de commande de l’autre.
Je voudrais “découper” ma programmation en plusieurs parties, pour faire simple :

  • un sketch “pesée” avec :
void initPesee() {
//Code
}
int poids () {
//code
}
  • un sketch “relais” avec
void initRelais() {
//Code
}
void changerPin (int pin, boolean valeur) {
//code
}

Le tout utilisé sur un sketch “maitre”

void setup() {
initPesee();
initRelais();
}//fin setup

void loop () {
int p=poids();
if ( p>20 ) {changerPin (12, FALSE);}

}//Fin loop

Auriez-vous des suggestions pour faire cela simplement ? J’ai essayé une importation de type include direct, mais mes fonctions ne se définissent pas à la compilation du sketch maitre…
Je n’ai pas trouvé de tuto clair là dessus, et je n’ai pas envie de créer une bibliothèque !!!

Merci de votre aide,

En mettant tout dans la même fenêtre comme ça :

void setup() {
initPesee();
initRelais();
}//fin setup

void loop () {
int p=poids();
if ( p>20 ) {changerPin (12, FALSE);}

}//Fin loop


// declaration des fonctions

void initPesee() {
//Code
}
int poids () {
//code
}

void initRelais() {
//Code
}
void changerPin (int pin, boolean valeur) {
//code
}

Salut J-F,

Merci pour la réponse ! En fait ça je l'avais déjà, mais je voulais me simplifier la lisibilité de mon programme en "rassemblant" plusieurs morceaux de code (facilité de maintenance et clarté me paraissaient meilleurs ainsi !), mais si ce n'est pas possible, pas grave je vais faire comme ça !

Si autres idées n'hésitez pas !

A+

En haut à droite de la fenêtre tu as une fléche dans un carré, si tu cliques dessus, tu peux créer des onglets parallèles au sketch principal, tu codes dedans sans faire de déclaration pour ces onglets, ils sont pris en compte automatiquement.

Re-

Ro ben ça alors... Je l'avais jamais vu ce truc !!!! :astonished:
C'est exactement ce que je cherchais, merci jean-françois !!!

A bientôt pour mon prochain problème :wink:

dans ce cas, il faut toujours respecter le formalisme fonction setup et fonction loop ?

Je n'ai jamais tenté çà

Oui, mais tu peux mettre loop dans un onglet, setup dans un autre, dans le suivant les déclarations de fonction …etc

ok, donc setup et loop ne doivent pas obligatoirement être mis dans chaque onglet ?

Non, il faut considérerça comme un livre avec des chapitres, le tout dans la même fourre.

albaflo:
ok, donc setup et loop ne doivent pas obligatoirement être mis dans chaque onglet ?

setup et loop ne doivent apparaître qu'une seule fois.
En règle générale, les noms de fonctions doivent être unique.

Jean-François:
En haut à droite de la fenêtre tu as une fléche dans un carré, si tu cliques dessus, tu peux créer des onglets parallèles au sketch principal, tu codes dedans sans faire de déclaration pour ces onglets, ils sont pris en compte automatiquement.

J'avais essayé une fois, mais le compilateur ne compile pas dans l'ordre et certaines fonctions d'un autre onglet ne sont pas définies à temps, d'où erreur. j'ai résolu le problème en forçant des #include "xxx.h" pour intégrer les autres onglets (que des fichiers .h) dès le début dans le sketch principal, et ça marche plutôt bien. maintenant, je n'ai plus qu'un sketch principal avec setup() et loop().

va falloir que j'essaie, ça me facilitera peut être la vie, tout au moins ça aidera à la lisibilité si je parviens à faire un fichier par fonction

J'avais essayé une fois, mais le compilateur ne compile pas dans l'ordre et certaines fonctions d'un autre onglet ne sont pas définies à temps

Attention
Cela fonctionne mais il faut bien comprendre que l'IDE Arduino, le compilateur n'y est pour rien, assemble les onglets très bêtement en prenant l'ordre alphabétique du nom donné aux onglets et non pas l'ordre de déclaration dans l'IDE.
Le résultat final est un seul fichier qui est présenté au compilateur
Ce qui fait que si tu nommes un onglet "setup" il a toutes les chances tous les risques d'être ajouté en dernier et donc le compilateur ne retrouvera pas ses petits.

L'astuce que j'ai trouvé est de préfixer les noms des onglets par une lettre qui impose l'ordre d'assemblage.
Ainsi il suffit d'appeler l'onglet setup --> A_setup et l'onglet "loop"--> B_loop et tout fonctionne au poil, idem pour la suite des autres onglet.

Point important : différence entre un onglet xyz.ino et un onglet xyz.cpp ou xyz.c
"De base" les onglets sont enregistrés avec l'extension .ino et sont donc concaténés par l'IDE, le résultat final est un seul fichier qui est présenté au compilateur --> il n'y a pas à se soucier de la portée et de la visibilité des variables.
On peut forcer le nom et donner une extension .c ou .cpp. Dans ce cas l'IDE ne concatène plus et il faudra gérer la portée et la visibilité des variables comme dans tout programme C ou C++.