Go Down

Topic: Rassembler plusieurs sketches pour faciliter la programmation (Read 4588 times) previous topic - next topic

farmer64

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 :
Code: [Select]
void initPesee() {
//Code
}
int poids () {
//code
}

- un sketch "relais" avec
Code: [Select]
void initRelais() {
//Code
}
void changerPin (int pin, boolean valeur) {
//code
}


Le tout utilisé sur un sketch "maitre"

Code: [Select]

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 <relais> 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,

jfs

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

Code: [Select]


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
}


Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

farmer64

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+

jfs

#3
Dec 27, 2013, 12:57 pm Last Edit: Dec 27, 2013, 06:13 pm by Jean-François Reason: 1
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.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

farmer64

Re-

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

A bientôt pour mon prochain problème  ;)

albaflo

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

Je n'ai jamais tenté çà

jfs

Oui, mais tu peux mettre loop dans un onglet, setup dans un autre, dans le suivant les déclarations de fonction ....etc
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

albaflo

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

jfs

Non, il faut considérerça comme un livre avec des chapitres, le tout dans la même fourre.
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

fdufnews


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.

Super_Cinci


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().

albaflo

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

68tjs

Quote
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++.

Go Up