question sur le code C, quel interet d'avoir plus d'un void ....()

Bonjour,
je suis nouveaux dans le monde merveilleux d'arduino !
(5jours sur le code C)

Dans le code C je cherche a comprendre l'utilité de faire plusieurs void loop(), puisqu'il boucle de toute manière !
j'ai vu quelques lignes ici même avec le cas d'une librairie, LCD il me semble. ex: void trucs()

La dernière fois que j'ai écrire dans un langage de programmation c’était du quickbasic a l'époque Dos 6.22
(Un language sous le DOS graphisme limité au ASCII avec a l’époque du windows 3.11 et windows 95)
Et j'ai même réussi a finir un programme il a très bien fonctionné, avant de trouver mieux en freeware.
Je connais donc les grands principe !!
Do ... loop -> do ... while
select ... case -> switch ... case
youpie

Je ne suis pas un habituer des forums pas tapé pas tapé

(mon speudo g1_8008 : j'ai un 8008 CPU intel de 1972 une rareté, 3500 transi pfouuu (cf: wiki))

bonjour,

les histoires de void de loop etc comme tu dit ^^ ça sert à faire différente chose, ton programme principale (loop) boucle a l'infini ce qui permet un programme sans fin, en générale il n'y en a qu'un sauf exception, apres les void truc() ^^ ça, sa sert à faire des fonction breve appelé dans le loop justement, par exemple un void print_lcd(string) serais une fonction qui affiche sur le LCD le string mis en paramètre, ce qui t'évitera de réécrire toute les lignes nécessaire à cette action dans ton loop, voila j’espère que ça ta un peu aidé, sinon je ne vois pas ce que tu ne comprend pas développe :s

Skizo !

Salut,

void loop() est une fonction spécifique d'Arduino : c'est la fonction qui sera exécutée en boucle tant que le système sera alimenté (ou du moins pas planté). Après tu peux avoir d'autres fonctions, void printText(), void sendMessage(), etc... Les fonctions te permettent de découper et structurer ton programme. Elle peuvent être appelées à différents endroits.

Placé dans la définition d'une fonction, le void signifie que celle-ci ne renvoie pas de valeur.

Si tu débutes en C, les tutos du Site du Zéro constituent un bon point de départ.

++

Edit : grillé par skizoh :stuck_out_tongue:

Cela s'appelle de la programmation modulaire :

http://www.siteduzero.com/tutoriel-3-13993-la-programmation-modulaire.html

Bonjour et bienvenue

Si tu commence le C tu as du voir que habituellement, dans un programme en C, tu dois écrire la fonction main() qui est appelée le "point d'entrée du programme:

void main()
{
    printf("Hello world!");
}

Dans l'environnement Arduino, afin de prendre en charge certains éléments, la fonction main() est fournie par l'environnement Arduino et on te demande de créer 2 fonctions :
setup() : appellée une fois par l'environnement Arduino et dans laquelle tu dois placer toutes les initialisations qui ne sont à faire qu'une fois.
loop() : appellée en boucle par l'environnement.

En effet, la fonction main() intégrée dans l'environnement est globalement équivalente à :

void main()
{
    setup();

    while( 1 )
        loop();
}

Il y a d'autres choses mais je les évacue pour la simplicité de l'explication.

Le but est de te forcer à faire un programme basé sur une boucle sans fin afin de traiter les évenements.
Généralement ta fonction loop() ressemble à :

void loop()
{
    if (evenement_1)
    {
        // je fais ce qu'il y a faire pour traiter l'evenement 1
        // ....
    }
    if (evenement_2)
    {
        // je fais ce qu'il y a faire pour traiter l'evenement 2
        // ....
    }
    // .... etc 
}

Comme la fonction loop() est appellée en boucle, tu va continuellement tester les evenements.

Si tu as fait un peu de programmation avant, peut être as tu essentiellement fait des programmes de traitements :
Entrée --> Traitement --> Sortie
Il s'agit de programmes linéaires

Avec Arduino, tu va travailler de manière évenementielle.
Un programme deveint alors un ensemble de :

si ( le contexte est xxxx ET l'evenement se produit )
Alors je fais .....

A+

sesech XP :stuck_out_tongue: et oui pour une fois je peut expliquer un truc :stuck_out_tongue:

Skizo !

A la base il faut bien comprendre qu'un micro-controleur (arduino) ne fonctionne pas comme un micro-processeur (PC).

Dans un PC il y a un système d'exploitation (MacOX, Linux, Windows) qui "occupe" le micro-processeur en permanence.
Dans un micro-controleur il n'y a pas de système d'exploitation, il faut donc "occuper" le micro en permanence sinon dès qu'il est arrivé à la fin des instructions il s'arrête et il faut le relancer avec un RESET.

D'où l'obligation d'avoir une boucle infinie. void loop() est une fonction mise à ta disposition par l'univers Arduino pour te simplifier la tâche, en aucun cas cela a quelque chose à voir avec les ordres loop, for ou while d'une boucle C.
D'ailleurs tu as pu remarquer qu'on écrit void loop() avec les parenthèses obligatoires pour des fonctions.

Les fonctions setup() et loop() sont obligatoires quand on utilise l'IDE arduino mais tu peux ajouter autant de fonctions suplémentaires que tu le juge utile, c'est même recommandé. Elles seront appelées soit de setup() soit de loop()

Je connais donc les grands principe !!
Do ... loop -> do ... while select ... case -> switch ... case youpie

Un petit tour sur le site du zéro m'a quand même l'air de s'imposer :grin:

68tjs:

Je connais donc les grands principe !!
Do ... loop -> do ... while select ... case -> switch ... case youpie

Un petit tour sur le site du zéro m'a quand même l'air de s'imposer :grin:

Tout à fait d'accord ^^

Skizo !

salut,

Je comprend mieux le fonctionnement de la fonction void. merci les mecs.
J'ai toujours en tête le raisonnement d'une programmation en basic, pour moi il va s'apparenté a un "gosub", numero de ligne, "return" !
A la différence qu'il y a possibilité de prendre une variable ou plus mais ne "répond" pas, pas de modif de variable(s).

Aah une autre question me traverse l'esprit, est ce que la fonction appeler sera autorisé à utiliser une variable propre à elle même ?
Variable pour un trucs temporaire, Inutilisé ailleurs, nul part, jamais .

Sinon a ma décharge au debut j'ai tripoter du basic 1.0 sous commodor vic 20, ah ah mon dieu !
Capa la mémoire modifieràa 16ko, un 6502 à 1.01 mhz si je me rappel bien.
Dans le genre les grands principe de base, mais alors de base, base.

lol je comprend ^^ bref pour ta question, tu peut déclarer des variable en local, elle existerons uniquement dans la fonction, et tu peut les faire temporaire pour quel soit détruite quand tu quitte la fonction, sinon tu les déclare en dehors de tout et elle serons présente dans toute les fonctions.

voila =) n'hésite pas si tu a besoin.

Skizo !

Je comprend mieux le fonctionnement de la fonction void

Non ce que tu viens d'écrire montre que tu n'as pas compris : void n'est pas une fonction ! -> direct le site du zéro.

En C il n'y a pas de procédure comme en Basic mais uniquement des fonctions. Une fonction doit normalement renvoyer une quantité.
On écrit
int fonction_exemple(int nbre1,int nbre2)
{
taratata
}
Cela veut dire que l'on fourni deux nombres à la fonction et qu'elle renvoie un entier (int),
On l'apelle ainsi :
int a; // déclaration de la variable avant de l'utiliser
a= fonction_exemple(25,10);

Si la fonction renvoyait un char on écrirait:
char fonction_exemple(int nbre1,int nbre2)

"void" veut dire vide. On l'utilise quand la fonction ne renvoie rien : c'est à dire qu'on l'utilise comme une procédure en basic.

Oublies tous tes vieux souvenir du basic (goto, gosub = dehors ! ) et reprend tout à zéro sur le site du même nom, nombreux sont ceux qui y ont fait ou qui continuent à y faire escale. Sinon tu perdras ton temps.

lol peucheur ^^ sois doux avec lui :stuck_out_tongue: il progresse quand même ^^ allez courage mec le C c'est jamais facile au début, sa peut être compréhensible et venir vite mais faut pas sauter des étapes ^^

Skizo !

Okai...

A chaque fois que je demande quelque chose sur un forum j'ai l'impression de me faire insulté par au moins un bonhomme.
Je suppose que je doit être paranos ... hein quoi qui à parler dans mon dos !
Je suis sur le C avec un arduino depuis : 6 JOURs (Six jours, 1,2,3,4,5,6 -> 6)
La terminologie m’échappe : OUI
J'ai connu le basic et je compare : OUI et je ne compte pas oublier
void = vide, bien reçu mon commandant
Je ne maitrise pas tout mais je me suis déjà écrit un trucs qui j’espère va marcher.

Alors qu'est ce que je ne maitrise pas encore et comment je m'en suis sorti:
Les interruptions je me suis démerder avec 3 IF... pour tester des broches.
Boucle do...while avec select...case à la place d'une FONCTION d'affichage
Je me suis démerder aussi avec une base de temps externe.
J'ai codé le bazar pour multiplexer 5 afficheur 7 segment de récup.
(et une vrai sal..., le brochage étant dans le sens de la longueur !)
Hors de question de prendre une librairie je préfère voir et en prime j'ai pas encore compris le fonctionnement.

Je vais me contenter de faire tourner le trucs sans y toucher et au pire de refaire l'ensemble après coup.
Je vient de comprendre le principe de l'interuption maintenant, là, aujourd'hui (b'hen si)

Pour Le site du zero je suis aller voir j'ai rien vu de clair. Mais alors ClAiR comme de l'eau trouble.
Evidement quelqu'un de trèès gentil va surement me répondre retourner dessus et de rester là-bas
de ne pas revenir avant d'avoir fini mes tables de multiplication ... ou pire écrire 100 fois le mot "fonction".
Je ressent comme un gros Bof !

xDDDD c'était sur ca ^^ mec te braque pas, écoute, les meilleurs prof sont ceux qui répète sans cesse et insiste sur les point fondamentaux, c'est pas méchant du tout, mais tant fait pas on est la pour t'aider et toutes tes questions trouverons des réponse ici, fait toi plaisir c'est la pour ça, en tout k bravo pour le taff déjà réalisé bob le bricoleur ^^ allez tien bon et prend pas ces messages comme des agression vraiment je pense qu'il essaie de bien t'instruire en C ^^ après quand ta les base tout est possible =)

Courage, je t'aiderai des que je le peux, je vais commencer a penser a ton histoire d'afficheur 7 segments, je te sortirai un petit programme tout fait, kdo pour t'encourager ! :stuck_out_tongue:

Skizo !

@g1_8008
Je ne vois pas quoi tu te sens insulté. En ce qui me concerne je t'ai précisé quand tu faisais une erreur en espérant te rendre service.
Je pars du principe qu'il est préférable de corriger les erreurs le plus en amont possible plutôt que de laisser prendre des mauvaises habitudes.
Personnellement j'ai réellement débuter avec le C depuis Juin 2011 après avoir réalisé 30 ans plus tôt quelques petits programme de mesure automatique (Bus HPIB et Basic HP).
Dès mes premiers contacts avec le C j'ai compris que cela n'avait rien à voir avec le Basic et avant de demander de l'aide j'ai commencé à lire ce forum où j'ai découvert le site du zéro et où j'ai appris énormément de choses et où j'en apprend encore.
Maintenant si cette méthode ne te conviens pas tu fais comme tu veux.

bonjour, faut le comprendre c'est dur et c'est vrai que tu y va fort, mais je comprend faut bien faire rentrer les principes fondamentaux car du basic au C il y a un bon pas à franchir, patience il y arrivera ! :slight_smile:

Skizo !