organisation clair d'un code

bonjour,j'ai l habitude de faire mes codes sur un onglet, et c est fatiguant de faire defiler pour debugger, ou autre

et j ai vu que l'on pouvait creer des onglets

du coup si je met chaque void (), dans un onglet, comment je les appel dans ma loop?

hello
comme d'habitude, comme si tes fonctions étaient dans le meme onglet que l'appelant

Les onglets sont de nouveaux fichiers que tu crées dans le même répertoire. Il faut les #include -er dans ton code, en respectant le bon ordre. Si tu inclus un fichier avec une fonction F1 qui appelle une fonction F2, le fichier de cette dernière doit être inclus avant.

Bonjour,

Si ce sont des fichiers .ino, c'est (en principe) comme si tu avais un fichier .ino unique, l'ide se chargeant de les concaténer. Attention cependant ils sont concaténés dans l'ordre alphabétique, ce qui peut poser des problèmes quelquefois.

Si ce sont des fichiers .cpp, il faut inclure la déclaration (void toto();), ces déclarations pouvant être mises dans un fichier .h inclus (méthode recommandée).

je vous donne un exemple à la con

# define entree_gavage  11
# define sortie_gavage  11


unsigned long tempsgavage =20000;
unsigned long timergavage =0;
int detectiongavage =0;
bool premier_remplissage = false;
int debut_timer_gavage = 0;


void etat_entree()
{
   if (digitalRead (entree_gavage) == HIGH)
   {
    detectiongavage = 1;
   }
   else
   {
    detectiongavage = 0;
   }
}
void timer_gavage()
{
  if (debut_timer_gavage != 1)
  timergavage = millis() + tempsgavage;
  if (debut_timer_gavage == 1 && millis() > timergavage)
  {
    digitalWrite(sortie_gavage,HIGH);  //activation de la sortie avec un decalage de 20000ms
  }
}
void gavage()
{

  if (premier_remplissage == true)
  {
    if (detectiongavage == 0)
    {
     digitalWrite(sortie_gavage,HIGH); 
    }
   else
    {
    digitalWrite(sortie_gavage,LOW);
    premier_remplissage == false ; 
    }
  }
  else
  {
       if (detectiongavage == 0 && debut_timer_gavage == 0)
       {
         debut_timer_gavage = 1; 
        }
       else if (detectiongavage == 1)
       {
         digitalWrite(sortie_gavage,LOW);
         debut_timer_gavage =0;
       } 
  }

  
}



void setup() {
  // put your setup code here, to run once:


  pinMode (entree_gavage, INPUT);
  pinMode (sortie_gavage, OUTPUT);
  digitalWrite (sortie_gavage,LOW);

  premier_remplissage = true;
  

}

void loop() {
  // put your main code here, to run repeatedly:

  gavage()
  timer_gavage()
  etat_entree()

}

l’idée etant d’avoir un onglet pour chaque void()

Je ne connais aucun éditeur qui te permet cela. Mais rien ne t'empêche comme dit plus haut de faire un fichier par fonction avec des #include "maFonction.c" à l'endroit ou était ta fonction.

Bon c'est un peu crade mais cela à le mérite d'être clair et de ne pas avoir à s'embêter avec un .h (ou .hpp).

Ce serait pas ça que tu cherches par hasard ?

si si,je met chaque void dans un onglet

mais apres? comment j appel les void dans ma boucle loop?

ci joint copie d ecran que j arrive pas a integrer

Il n'y a pas d'espace entre # et include -> #include

Idem pour define

Normalement, si vous vous plaignez d'avoir trop de lignes, vous pouvez :

a) mettre les "curly braces " ouvrants sur la même ligne que le if, while, for ou la déclaration de fonction correspondante. C'est ce que conseille cpplint, un arbitre des élégances pour les codes C++ commis par google.

b) changer d'éditeur ou attendre que l'IDE Arduino intègre la fonctionnalité de cacher/afficher des blocs (vim, visual basics, eclipse le font parmi des dizaines d'autres éditeurs: le petit problème, c'est que l'ajout d'une fonctionnalité -et souvent des boutons pour en "profiter" - rajoute de la complexité) .

c) découper (ou faire découper: un automate peut le faire mieux qu'un hêtre humain, sans s'ennuyer) votre code en fonctions séparées; nomalement, l'IDE Arduino se débrouille pour en refaire un tout cohérent

d) créer une bibliothèque avec les fonctions qui vous serviront souvent. Si vous faites une erreur dans un bout de code, tous les programmes l'appellant en bénéficieront, ce qui n'est pas top. Mais si vous corrigez cette erreur, la correction se repercutera partout, ce qui est un avantage indéniable par rapport à la programmerie par copier coller.

e) acheter (ou superposer en hauteur) de GRANDS écrans.

Par ailleurs, le cas de lignes top longues est aussi très ennuyeux, et cpplint, création de google, le signale et gémit à juste titre : comment peut on faire tenir des lignes top longues dans certains "smart" "phones" ou des cartes Hollerith?

Enfin, un tout petit détail: C(++) ne retourne pas que rien (void); vous avez parfaitement le droit de comettre des fonctions qui retournent des entiers, des floats .... un peu tout ce que vous voulez, pour peu que ce ne soit pas énorme.

dbrion06:
b) changer d'éditeur ou attendre que l'IDE Arduino intègre la fonctionnalité de cacher/afficher des blocs (vim, visual basics, eclipse le font parmi des dizaines d'autres éditeurs

Ça existe déjà dans l'IDE, il suffit de cocher la bonne case dans les paramètres (CTRL +,)

Normalement, mes codes sont suffisamment superbes pour que j’éprouve le besoin irrésistible de les contempler dans toute leur longueur…Et, toute mauvaise foi mise à part, je tiens à vous remercier pour m’avoir fait découvrir une fonctionnalité bien pratique (l’IDE d’arduino évolue avec une sage lenteur, gage de tests sérieux; sur RPi xxPi, je suis resté jusqu’à il y a 6 mois sur les ports officiels -1.0.x- avant de découvrir qu’arduino s’était résolu à diffuser des binaires tarés pour arms) .

la vache, apres les posts de kamill et lesept, ba j’ai rien compris…

parlez moi gentillement et simplement ^^

en gros des que je créé un onglet ça créé un .ino dans le meme dossier

jusque là ok

donc la question est commen appeler mes .ino dans ma void loop() ou tout autre fonction

kamill:
Il n'y a pas d'espace entre # et include -> #include

que je met un espace ou non ça ne marche pas

de plus je ne suis pas sur que cela soit bloquant, puisque la verif etait ok quand tout le code etait en 1 page

  1. Tes fichiers sources secondaires doivent avoir l'extension .cpp

  2. Regroupe les déclarations de tes fonction et variables dans un fichier .h ou plusieurs
    Il faut y mettre aussi tes macros (#define)

// fichier gavage.h

#ifndef _GAVAGE_H_
#define _GAVAGE_H_

# define entree_gavage  11
# define sortie_gavage  11

extern unsigned long tempsgavage;
// etc.

void gavage();
// etc.

#endif

Dans ton fichier gavage.cpp :

#include "gavage.h"

Inclure gavage.h dans gavage.cpp permet au compilateur de vérifier que les types et prototypes sont cohérents.

Pareil dans ton fichier gavage_test.ino :

#include "gavage.h"

Inclure gavage.h dans gavage_test.ino te permet d'appeler les fonctions de gavage.cpp et d'utiliser ses variables.

Bien sûr tu peux avoir plusieurs .h ou un seul ou tu regroupes tout.

Ça répond t-il à ta question ?

merci c est plus clair, mais au final c est pas non plus innée....

pourquoi l ide ne fait il pas ça en automatique? je vais essayer en debut de semaine pro

Il y a une solution simple, qui permet de garder le code dans un seul fichier, tout en cachant les bouts de code qu'on ne saurait voir:
c'est le repliement de code Folding in Arduino IDE - Programming Questions - Arduino Forum, qui cache/montre (un peu comme un va et vient) les blocs de code ininteressants (ceux dont vous êtes sûr) et les commentaires étalés sur plusieurs lignes (ceux qui ne répondent pas à votre préoccupation actuelle).
Elle a été implantée récemment -entre 2015, où elle manquait et 2018 date de mon lien-, et fort utile.

Nota : un bloc de code n'est pas n'importe quoi, mais une séquence d'instructions entre { et } ... la structure de votre logiciel reste visible....

La solution de HBachetti est extrêmement propre, mais inconfortable pour démarrer (c'est pour ça que le repliement de code permet une transition confortable sans frustration). Si vous la maîtrisez, vous pourrez sans peine créer des bibliothèques, faisant partager des bouts de votre code entre plusieurs projets, avec la garantie que, si une erreur est détectée et corrigée à bon escient, elle le sera partout -le copier coller est une source infinie de confusions-)

l'ide a tout ce qu'il faut ou presque pour le faire en automatique, mais vous ne maîtriseriez pas ce qui est fait (et Arduino est très prudent dans l'introduction de nouvelles fonctionalités ou de nouveaux boutons).
Je ne découperais pas mon code avec un fichier par fonction (ça va générer de la confusion), mais en ensembles de fonctions servant pour un thème/ un périférique donné)

bon j avoue que le replie de code c est un peu plus simple

est ce que quelqu'un accepterais de m envoyer un petit programme basique juste pour bien comprendre la methode de HBachetti

merci

Entre une solution à un seul fichier source et une solution à un fichier source par fonction, il y a un juste milieu.

Il serait plus judicieux de regrouper les macros, fonctions, variables par thème, ou par affinité.

Dans cet exemple : Bitbucket, j'ai regroupé dans deux fichiers tft.cpp et tft.h toutes les méthodes (fonctions) qui ont un rapport avec la gestion d'un écran TFT.
Le programme principal SHT31D-Tft-TempHumSensor.ino est la partie applicative.
On ne peut pas vraiment parler d'exemple simple, mais si tu ne tiens pas compte de l'aspect orienté objet, une classe est un ensemble de fonctions.