LOCODUINO

La bibliothèque ScheduleTable

. Par : Jean-Luc

Devant ce constat, nous vous proposons une bibliothèque originale permettant d’ordonnancer des actions dans le temps. Nous espérons qu’elle vous facilitera la tâche. L’article a été mis à jour avec la version 1.4 de la bibliothèque. La version 1.4 apporte la compatibilité totale avec les ATTiny [1] avec l’accès aux actions sous forme d’objet. (…)

Retourner à l'article

Vous répondez à :

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
Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

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.

    Répondre

    • La bibliothèque ScheduleTable 8 avril 2015 09:35, par Jean-Luc

      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.

      Répondre

  • 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

    Répondre

  • 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 !
    _

    Répondre

    • 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

      Répondre

      • 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
        _

        Répondre

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

          Répondre

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

    Répondre

    • La bibliothèque ScheduleTable 9 janvier 2019 15:14, par alexis

      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.

      Répondre

      • La bibliothèque ScheduleTable 11 janvier 2019 15:43, par Jean-Luc

        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.

        Répondre

  • 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

    Répondre

    • La bibliothèque ScheduleTable 5 janvier 2020 10:19, par Jean-Luc

      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();
      }

      Répondre

  • 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?...

    Répondre

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

    Répondre

Rubrique Bibliothèques

Les derniers articles

Les articles les plus lus