La bibliothèque ScheduleTable
. Par : Jean-Luc
Vous répondez à :
Remarque pertinente SavignyExpress. Effectivement si l’une des actions a une durée d’execution plus grande que le temps qui sépare son début de l’action suivante, l’action suivante démarrera tardivement.
Donc pas de delay(...)
Et surtout pas de boucle infinie.
14 Messages
-
La bibliothèque ScheduleTable 7 avril 2015 13:21, par Savignyexpress
Merci Jean-Luc pour la présentation de cette bibliothèque fort intéressante !
Cette librairie permet le multi-tâches coopératif non pré-emptif. En conséquence, il faut donc que les fonctions appelées rendent la main très rapidement. Si l’une d’elles part en boucle, les timings ne seront plus respectés.
-
Remarque pertinente SavignyExpress. Effectivement si l’une des actions a une durée d’execution plus grande que le temps qui sépare son début de l’action suivante, l’action suivante démarrera tardivement.
Donc pas de
delay(...)
Et surtout pas de boucle infinie.
-
-
Bibliothèque ScheduleTable 18 septembre 2016 07:19, par Jean-Louis
Bonjour,
Je découvre votre site web. Un seul mot : bravo.
Cdlt
Jean-Louis -
Comment des modifier la table d’ordonnancement pendant le programme ? 6 janvier 2019 00:21, par alexis
Tout est dans le titre, je suis en train de faire un programme qui gère des lampe brancher sur relais . Les adresses temporel peuvent être modifier via le terminal sans reset l’arduino. Le problème c’est que ça marche très bien lors d’une première passe mais impossible de modifier la table ou une deuxième fois ou de la suprimer pour mettre de nouvelles adresses.
Repasser par la création de la table une deuxième fois lors du programme fonctionne qu’une seule fois, la deuxième fait bugé le update. Mon programme rest bloqué dessus. C’est très bizare.J’ai retourner le truc dans tout les sens, impossible de faire ce que je veux, (stopper la table avant de remettre start, l’enfermer dans une boucle qui ne joue qu’une fois...)
soit c’est pas possible soit le update bug et reste bloqué.
Aurais-tu une solution pour pour suprimé ou modifier les adresses temporel d’une table sans reset l’arduino ? merci :) Sinon super bibliothèque !
_-
Comment des modifier la table d’ordonnancement pendant le programme ? 6 janvier 2019 10:17, par Jean-Luc
Bonjour,
Il n’est pas prévu d’enlever des actions d’une Schedule Table ni de la détruire. En fait je n’avais pas prévu l’usage que vous en faites. Mais par contre je peux ajouter ce qu’il faut pour pouvoir le faire :
- vider une Schedule Table de ses actions
- Enlever une action en donnant sa date
- supprimer et recréer une Schedule Table
-
Comment des modifier la table d’ordonnancement pendant le programme ? 6 janvier 2019 10:47, par alexis
Oh merci, ce serait super !
_Au début je cherchais à coder en utilisant la technique du Millis(), mais c’était rapidement compliquer à s’organiser avec 4 relais tous modifiables. En fouillant sur le net, j’ai pus trouver votre librarie qui simplifiais beaucoup le programme. Tout marchais jusqu’à ce que je rencontre ces petit problème cités. On va dire que je suis niveau débutant avancée en programtion et éléctronique arduino. J’ai même cherché à l’intérieur de votre bibliothèque pour comprendre le programme ^^.
_Donc oui ce super cool de rajouter des fonctions à votre librairie mais ça risque de vous prendre beaucoup de temps non ? Peux êtree pouvez-vous vous épargner cet peine si vous connaissez une autre libraire de gestion de temps adapté à ce que je souhaite faire ? Ou une autre méthode ? :)Cordialement
_-
Comment des modifier la table d’ordonnancement pendant le programme ? 6 janvier 2019 11:13, par Jean-Luc
Beaucoup de temps, non. deux heures maximum je pense. Disons que ce soir c’est fait si j’arrive à trouver 2h :)
Non je ne connais pas d’autres bibliothèques de ce genre. J’ai cherché avant de la faire, sans succès.(Édit : et je n’ai pas trouvé les 2h, demain soir ça sera fait)
-
-
-
La bibliothèque ScheduleTable 7 janvier 2019 22:46, par Jean-Luc
Bonsoir,
C’est fait pour removeAt et empty. Je n’ai pas fait de release car je souhaite améliorer mais l’API ne changera pas. Vous pouvez récupérer cette préversion sur GitHub.
-
Bonjour,
Écoutez merci beaucoup, je viens d’incorporer ça dans mon code et ça marche parfaitement. C’est vraiment pratique et génial ! Je pense que ça pourra intéresser beaucoup d’autres personnes que moi, car la gestion du temps en C est vraiment pénible. On en arrive rapidement à devoir oublier delay() et on se perd rapidement avec des boucles Milli(). Donc pouvoir changer à volonté en cours de programmes cet sheduleTable déjà très ergonomique à utiliser. Ça la rend indispensable de mon point de vue.
Donc encore une fois merci beaucoup, en attendant la nouvelle version officiel.
Cordialement.-
Bonjour,
Merci pour les compliments :-)
J’ai fait la release 1.4. Elle devrait apparaître dans le gestionnaire de bibliothèques. On peut maintenant détruire et allouer dynamiquement des Schedule Table.
-
-
-
La bibliothèque ScheduleTable 5 janvier 2020 04:19, par Michel
Bonjour et merci pour le partage. Je suis un néophyte de 67 ans. J’ai un projet en cours d’automatisme de porte cochère. La fonction ouvrir() utilise beaucoup delay parce que j’alimente avec une batterie de 2 Ah et je démarre chaque moteur séparément et surtout le contrôle des moteurs(blocage) doit être permanent.
Je ne veux pas abuser mais j’ai beau relire, je ne vois pas comment intégrer votre librairie, si c’est compatible. Votre exemple "closure" semble m’indiquer que oui ?
La fonction :void ouvrir() { action = true; servoB.attach(7); //servo bas servoH.attach(8); //servo haut delay(100); servoB.write(0); // déverrouille le bas; delay(100); servoH.write(0); // déverrouille le haut delay(100); digitalWrite (pinO1, 1); //démarre moteur1 delay(100); moteur1 = true; //retarde la surveillance courant moteur delay(1900); digitalWrite (pinO2, 1); //démarre moteur2 delay(300); moteur2 = true;//délai 300 important delay(100); servoH.write(170); // relache le haut delay(2000); servoB.detach(); //servo bas servoH.detach(); //servo haut } // fin ouvrir»
Voir en ligne : La bibliothèque ScheduleTable
-
Bonjour,
Voici :
#include <Servo.h> #include <ScheduleTable.h> SchedTable<9> porte(5000); Servo servoB; Servo servoH; bool moteur1 = false; bool moteur2 = false; bool action = false; const byte pinO1 = 3; const byte pinO2 = 4; void setup() { porte.at(1, [] { action = true; servoB.attach(7); servoH.attach(8); } ); porte.at(100, [] { servoB.write(0); } ); porte.at(200, [] { servoH.write(0); } ); porte.at(300, [] { digitalWrite(pinO1, HIGH); } ); porte.at(400, [] { moteur1 = true; } ); porte.at(2300, [] { digitalWrite(pinO2, HIGH); } ); porte.at(2600, [] { moteur2 = true; } ); porte.at(2700, [] { servoH.write(170); } ); porte.at(4700, [] { servoB.detach(); servoH.detach(); } ); } void ouvrir() { porte.start(1); } bool boutonPresse() { return true; } void loop() { if (boutonPresse()) ouvrir(); ScheduleTable::update(); }
-
-
La bibliothèque ScheduleTable 5 janvier 2020 15:48, par Michel
Un grand merci. Y a plus qu’à...
Après relecture, j’avais compris start(1) qui permet de jouer la période une seule fois et à la demande.
J’ai fait aussi le test avec les closures... ça fonctionne aussi très bien sans se casser la tête avec millis().
Super cette lib et pas seulement pour un débutant. ☺Voir en ligne : https://www.locoduino.org/spip.php?...
-
La bibliothèque ScheduleTable 6 juin 2021 18:10, par Jean
Bonjour,
Merci pour cette bibliothèque qui est grandement utile quand on ne manie que très peu le millis, cela simplifie vachement les choses.Cependant, il n’est pas très facile de jongler avec le schedule table, si l’on veut des durée de plusieurs heures par tranche de 30 minutes, y aurait-il la possibilité de déclarer :
const unsigned long SECOND = 1000 ;
const unsigned long MINUTE = 60 * SECOND ;
const unsigned long HOUR = 3600 * SECOND ;
const unsigned long TRENTEMINUTES = 30 * 60 * SECOND ;...Et ensuite se servir des valeurs "SECOND ; MINUTE"..ect ? Car j’ai essayé mais cela ne semble pas possible.
Cordialement.