Go Down

Topic: organisation clair d'un code (Read 430 times) previous topic - next topic

vtec35

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?

dfgh

#1
May 15, 2019, 09:09 pm Last Edit: May 15, 2019, 09:09 pm by dfgh
hello
comme d'habitude, comme si tes fonctions étaient dans le meme onglet que l'appelant

lesept

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.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

kamill

#3
May 15, 2019, 09:35 pm Last Edit: May 15, 2019, 09:37 pm by kamill
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).

vtec35

#4
May 15, 2019, 09:37 pm Last Edit: May 15, 2019, 09:37 pm by vtec35
je vous donne un exemple à la con

Code: [Select]
# 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()

supercc

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

jfs

#6
May 15, 2019, 11:27 pm Last Edit: May 15, 2019, 11:27 pm by jfs
Ce serait pas ça que tu cherches par hasard ?

Pas d'aide par MP !!!

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

vtec35

#7
May 16, 2019, 07:26 am Last Edit: May 16, 2019, 07:43 am by vtec35
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

kamill

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

lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

dbrion06

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.

lesept

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 +,)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

dbrion06

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

vtec35

#13
May 17, 2019, 08:28 am Last Edit: May 17, 2019, 08:33 am by vtec35
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

vtec35

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

Go Up