Ha d'accord c'est ce que j'avais fait mais j'ai vu des choses par rapport a la fonction delay et millis mais je comprends pas faut que je remplace les delay par millis nan ?
faut pas mettre de délais sauf peut être dans le timing de la parole si c'est OK que ce ne soit pas interruptible.
le reste peut être géré soit par millis() soit par une machine à état qui tourne en attendant un évènement.
Ok merci mais comment utiliser la fonction Millis() il faut juste remplacer delay(3000); par millis(3000); ou cette fonction s'utilise différemment???
Vous m'avez parle de faire tourner une machine a état mais du coup j'en est déjà une, vaudrais en faire une 2éme ou juste crée une deuxième boucle état courant ??
Je n'arrive pas à comprendre comment intégrer la fonction millis dans mon programme.
Faut remplacer le delay par millis mais je ne comprends pas.
Merci
Bonsoir j'ai étudier le programe sur le fonction millis j'ai fait quelque test mais je n'arrive pas a intégrer millis dans mon programme car j'ai des delay différent a remplacer.
MERCI
reprenez la machine à état ... on n'a pas vu de code complet avec toutes les transitions
J'ai bien compris qu'il faut faire en sorte que si le programme marche et qu'on appuie il s'arrête mais pour cela il faut que le programme ne s'arrête pas avec les delay ou sinon il faut peut être créé une autre boucle que si on r'appuie s'a passe sur l'état arret
il faut mettre les mains dans le cambouis et coder la machine à état complète - sans délai
Le problème est dans la question : comment transformer delay en millis() ?
On ne peut pas transformer delay() en millis(). Ca n'a pas de sens.
Appeler delay(), c'est prendre un somnifère. Tu le prends, tu dors 30 secondes. Tu roupilles.
Appeler millis(), c'est regarder l'heure. Quelle heure est-il ? 40000 ms après le BIG BANG. Tu ne dors pas, tu sais l'heure qu'il est.
Dans ta vie, tu ne remplaces pas une sieste par un regard à ta montre ?
Comment je sais si les pâtes sont cuites ?
Solution 1 : je prends une pilule pour dormir 10 mn. Quand je me réveille, c'est ok, mais pendant 10 mn je n'ai rien fait. Donc, simple à utiliser ... si je n'ai rien à surveiller.
Solution 2 :je note l'heure de départ, et je regarde l'heure de temps en temps. Quand la différence entre la nouvelle heure et celle de départ dépasse le temps désiré, j'arrête la cuisson.
Donc, plus contraignant (ne pas oublier de regarder l'heure de temps à autre), mais plus compatible avec la vraie vie.
Nous avons donc là 2 comportements différents.
Pour remplacer l'utilsation de delay() par l'utilisation de milis(), ton code va donc devoir lui aussi changer son comportement.
Ce qui implique - bad news - de le réorganiser en ce sens. En pensant constamment : tout ce que j'ai pour m'occuper du temps qui passe, c'est la possibilité de demander l'heure.
très bonne explication @biggil !
pour compléter il existe une troisième solution où ce n'est pas vous qui regardez l'heure:
Solution 3 :Je règle une alarme pour dans 10 minutes. Cette alarme me fera sursauter quand elle va sonner, j'interromprais alors ma tâche en cours pour aller m'occuper des pâtes et puis je reprendrais le cours des mes occupations.
J-M-L:
... j'interromprais alors ma tâche en cours pour aller m'occuper des pâtes et puis je reprendrais le cours des mes occupations ...
et là, du coup, on fait quoi ?
on apprend à se servir des interruptions ?
ou on met en place une FSM ?
ou les deux combinés ?
mais alors là, on vraiment loin, mais très très loin, du sujet d'origine : j'ai du mal à suivre.
Y a des bibliothèques qui font cela
On enregistre une fonction qui sera appelée un peu plus tard
Ce forum a une vocation éducative et la discussion est enrichissante
c'est vrai, j'oubliais les biblis ... celle de Bricoleau (peut-être, je ne me souviens plus) ?
mais ça devient velu de suivre, on ne s'y retrouve plus depuis le début !
Timer1 Pourrait faire l’affaire par exemple
J-M-L:
Solution 3 :Je règle une alarme pour dans 10 minutes. Cette alarme me fera sursauter quand elle va sonner.
Oui mais pour ça il te faut un appareil magique (un reveil, une alarme sur smartphone...)
Tu ne t'en sors pas avec juste une pendule au mur.
Peu-être que cet objet existe dans les bibliothèques Arduino, faut le trouver, apprendre à l'utiliser...
La solution "classique" avec millis() doit être maitrisée par le débutant avant de passer à plus sioux, je pense.
biggil:
Oui mais pour ça il te faut un appareil magique (un reveil, une alarme sur smartphone...)La solution "classique" avec millis() doit être maitrisée par le débutant avant de passer à plus sioux, je pense.
En cuisine quand on veut des œufs à la coque il faut être précis par exemple et on a un sablier ou un petit beeper pour 3 minutes - tout bon cuisinier est équipé et c’est le cas de nos Arduinos !
L’appareil magique - le réveil qui sonne et vous emmène faire quelque chose - est déjà dans votre Arduino, un UNO en a meme trois, ça s’appelle un timer. Je mentionnais cela pour être complet car c’est d’ailleurs avec un timer que millis se met à jour par magie
Mais sinon 100% Oui je suis d’accord maîtriser millis() est fondamental
J'ai l'impression de beaucoup s'éloigner du sujet principal je commence a me perdre.
tu as pigé la différence de comportement entre utiliser delay() et utiliser millis() ?
Oui delay sa stop le programme pendant un certain temps et millis sa prend l'heure au qu'elle on veut qu'une action ce fasse mais ne stop pas tout le programme.
Mais du coup par rapport à mon projet la fonction millis ne marchera pas.
Car ce que je veux faire c'est mon programme ce lance et si la personne n'est pas prête elle peut le stopper en r'appuyant sur ce même bouton donc la machine a état été très bien défini (voir la première page) mais je n'arrive pas à la mettre en action j'avais pensé a la fonction millis mais après des recherches et des réflexions je ne pense pas que ce soit la bonne chose.
Si si c’est la bonne chose dans la machine à état....
Mais si vous ne vous y mettez pas un peu et postez du code complet pour tous les case de la machine ça ne va pas marcher c’est sûr