Question pour les loops

Bonjour, je suis tout nouveau dans ce monde des arduino.

Mes questions :

Est-ce qu'on peut créer plusieurs loop ?
Si oui, comment, et est-ce qu'elles s'excute toute en même temps ou il y en a qu'une seul à la fois ?

Mon but est d'avoir plusieurs loop (elle ne s'execute pas toute en même temps) et qu'au début de chaqune, il y ait une verification pour savoir si il doit rester dans celle ci ou aller dans une autre.

Deuxieme petite question:

Comment pouvons nous lire une information digitale sur une entrée analogique ?

Merci infiniment pour vos reponses !
Ylan0506

You cannot have two functions with the same name, as you have found

Neither can you use the delay() function if you want the program to do 2 or more things at the same time.

Have a look at "Using millis() for timing. A beginners guide", "Several things at the same time" and look at the BlinkWithoutDelay example in the IDE.

As for the analog input, if you use digitalRead(), you will get the digital input

Question 1
Put the code you want to loop in a separate function. One for each of the processes you want to loop. From within the main loop() function, call each of the other functions if your logic tells you you should. Example,

p-code

unsigned int minute_counter, second_counter

function to count minutes ()
    minute_counter++

function to count seconds()
    secound_counter++

unsigned long minute_time, second_time

loop()
    if millis - second_time > 1000
        second_time += 1000
        function to count seconds()

    if millis - minute_time > 60000
        minute_time += 60000
        function to count minutes ()

Question 2
Same way you read from a digital pin.

Bonjour,

Ton programme ne peut comporter qu'une seule fonction loop(). A toi d'organiser tes fonctions à l'intérieur de cette boucle. Elles seront exécutées les unes après les autres dans cette éternelle boucle.

C'est l'instruction que tu utilises qui détermine si l'arduino fait une lecture analogique (analogRead (pin)) ou numérique (digitalRead (pin)). Attention, toutes les broches ne font pas de lecture analogique.

Tu trouveras plein de réponses à tes questions ici.

Toujours la même incompréhension due à une absence de documentation chez Arduino, il est vrai que le principe est pompé sur processing.
Pourtant l'explication est simple.

Si on ne fait rien au démarrage le micro exécute toutes les instructions qu'il trouve et arrivé à la fin de la mémoire il s’arrête. Pour le relancer il faut appuyer sur le disjoncteur général, arracher la prise ou plus simplement sur le bouton RESET.

Ce n'est pas viable.
Il faut introduire une boucle dont on ne peut pas sortir pour le micro ne parte pas en butée sur la fin de la mémoire.

La structure générale du fichier qui est transmis au compilateur est la suivante (c'est du générique je ne rentre pas dans les détails). Toi tu n'écris que le contenu de setup() et loop(), et le cas échéant de tes fonctions personnelles, et l'IDE créé autour un vrai fichier C++ (voir des tutos de C/C++)

#include<Arduino.h>     //  inclusion  des fichier.h du C++ indispensables
#include <tartenpion.h>  // pour les bibliothèques personnelles ou ajoutées
int machin;
float truc;

void main {
  init() ;// configuration du micro à la mode arduino  ajoutée automatiquement par l'IDE
  setup(); // opérations qui ne s'exécutent qu'une seule fois au démmarage du micro

  While (1==1){  // condition toujours vraie donc dès que l'on sort de la fonction loop() on y rentre instantanément
     loop(); // fonction qui tourne en boucle
  }  // fin de while

} // fin de main

void setup(){
  // opérations qui ne s’exécutent qu'une seule fois
}

void loop() {
   // programme proprement dit
   // on peut appeler des fonctions que l'on a écrit soi-même
   bidule();
   truc_muche();
   }

void bidule(){
  //  code
}

void truc_muche() {
  // code
}

On ne peut avoir qu'une seule fonction loop(), note qu'elle aurait pu s’appeler différemment mais le nom est figé dans l'IDE on ne peut pas le changer.
Le seul point important est qu'elle est enfermée dans une boucle dont elle ne peut pas sortir.

Par contre tu peux pour clarifier la lecture de ton code ou faciliter la réutilisation du code écrire autant de fonctions personnelles que tu veux. Tu peux les appeler aussi bien dans setup() que dans loop()

Si tu veux que le programme réagisse différemment selon certaines informations il faut que tu écrives des fonctions bidules() ou truc_muche() que tu appellera selon le résultat de conditions "if" par exemple.

La lecture d'un tuto de C ou C++ pour débutant est grandement conseillée.

Merci pour toutes les reponses, c'est parfait !

68tjs:
Toujours la même incompréhension due à une absence de documentation chez Arduino, il est vrai que le principe est pompé sur processing.

euh pas d'accord là...

C'est documenté et ça a même été traduit en français avec explication sur le main etc... et le principe de la définition d'état initial et ensuite une boucle infini, ce n'est pas une invention de processing, c'est un design pattern vieux comme la programmation et les machines à état...

et puis comme c'est basé sur une initiative communautaire (même s'ils veulent faire des $$) l'idée c'est le partage... d'où le forum et les divers tutos qui fleurissent un peu partout... faut chercher un peu, acheter un bouquin etc

J'ai peut être pas assez détaillé ma réponse mais pourtant les faits sont parfaitement connus.

Ce qui est pompé de processing c'est :

  • L'IDE
  • le seul besoin d'écrire seulement une fonction setup() et une fonction loop()
  • La non obligation de faire la pré déclaration des fonctions qui est faite automatiquement par l'IDE.

Le pompage s'est fait en poupées russes.

  • Wiring a utilisé Processing pour créer son système de développement publié en 2004.
  • Arduino en 2005, soit un an plus tard, a pompé intégralement Wiring pour publier quelque chose de parfaitement semblable il n'y avait que le micro avr qui changeait mais tout le travail préparatoire avait été fait par le projet Wiring. Le projet Arduino a probablement été initié parce que M Banzi et ses acolytes se sont trouvés sans emploi à la suite de la fermeture de l'institut dans lequel ils étaient professeurs.

Le problème c'est que si Wiring admet sans aucune difficulté son héritage Processing, Arduino a vraiment du mal a admettre que ce n'est pas lui qui a tout fait et en particulier l'héritage Processing et le pompage Wiring.
Actuellement dans "l'IDE Arduino" il existe encore des fichiers qui commencent par un W ou carrément par le mot Wiring.

Si Arduino avait le courage de l'admettre il pourrait donner des explications qui éviteraient bien des incompréhensions.

Oui Arduino a pompé sur Wiring effectivement.

setup() et loop() comme je le dis plus haut c'est un design pattern connu. ça a été abondamment utilisé dans les machines à état des premiers programmes ou dans tous les jeux (on définit les états initiaux et ensuite chaque tour de loop calcule une frame et l'affiche à l'écran (on peut même gérer le nombre de frame par seconde, un peu l'approche avec millis() --> Processing n'a rien inventé là...)

la Notion de génération de code autour du C et C++, c'est aussi très vieux.. vous avez lex et yacc par exemple qui vous générait un code d'analyseur syntaxique en fonction d'une grammaire et il y a des IDE depuis très très longtemps qui offrent une couche d'abstraction.. ça existe depuis la fin des années 80... par exemple j'ai bien joué avec Turbo C ou Turbo C++ (racheté ensuite par Borland)