Auteur Sujet: bibliothèque Commanders+Accessoires  (Lu 37242 fois)

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #15 le: mai 15, 2018, 09:52:04 pm »
Ce que c'est de vouloir aller trop vite tout en assurant un service minimum au boulot... Heureusement que le service qualité passe par là ! C'est corrigé, et oui, la version ne devait pas demander à se mettre à jour sans le bon library.properties .

Merci pour la vigilance.

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1716
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #16 le: mai 15, 2018, 09:58:54 pm »
Mmmm, c’est pas le library.properties qui est dans la release qui doit avoir l’attribut version a la même valeur que le nom de la release ?
Cordialement

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #17 le: mai 15, 2018, 10:11:29 pm »
J'ai bien mis 1.1.2 dans library.properties, mais je mets toujours v1.*.* dans le nom de la release... Je pense que le nom n'a pas d'importance et que ce qui compte, c'est le library.properties dans les sources ou le zip associés à une release. Mais je peux me tromper...
Le fait est que SlowMotionServo me permet de remonter dans les versions en réinstallant une vieille version, tandis que Accessories ne me le permet pas... Je ne sais pas si c'est le nom de la release qui est en cause, je n'ai fait que suivre les instructions données dans l'encadré de droite de la page de saisie des releases.
Mais peut être que pour l'IDE Arduino, il faut éviter le 'v' du tag de la release ?

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1716
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #18 le: mai 15, 2018, 10:25:32 pm »
J’en sais rien à vrai dire, la doc n’est pas très claire. Mais dans les libs officielles que j’ai regardées, les nom des releases sont exactement les mêmes que la version dans library.properties.
Cordialement

Jeje_12_34

  • Jr. Member
  • **
  • Messages: 95
  • Double ovale N
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #19 le: avril 13, 2020, 05:20:10 pm »
Bonjour

Je continue mon apprentissage .
Comme je n'ai aucun aiguillage a solénoïde, je suis passé directement à l'exemple  6, celui du passage à niveau sur voie unique.

Je l'ai modifié par l'ajout d'une Led verte allumée et par l'extinction des deux rouges dès que la barrière est grande ouverte.

Je me suis un peu creusé la tète, pour arriver à cela. Mais ca fonctionne (presque) parfaitement.

Pourquoi presque ?
Parce que le premier appui sur le bouton ne fait pas baisser lentement la barrière. Elle descend d'un coup  quand elle reçoit l'ordre de remonter, puis remonte lentement.
Les LEDS font exactement ce que je leur demande.
Et les appuis suivants sur le bouton de déclanchement entrainent une animation parfaite. Ce n'est que le premier appui qui "foire".

Qu'ai je raté  ?

Oui, je sais, je pinaille :)

Merci de votre aide (qui n'urge pas du tout) :)


/* Programme 6 exemple Accessorie modifié par Jerome
 Effets  recherchés par les modifications:
 - en fin d'animation, les LEDS changent d etat après que les barrieres soient levées.
 - une LED verte indique que la passage est autorisé.
 */

#include <Accessories.h>
#include <Commanders.h>
 
#define TEMPO  20000                //duree de l animation, 20 secondes
 
// L'ILS ...
ButtonsCommanderPush boutonILS;     // remplacé par un poussoir sur pin A2 et GND
 
// Le moteur
AccessoryServo PN;                  // "donnée" sur sur pin3
 
// Les DELS
AccessoryLightMulti Dels;           //Deux rouges sur pin7&8, une verte sur pin9.

// Les ports pour connecter le moteur et les DELs.
PortServo portPN;                   //servo
PortOnePin portLight1;              //LED Rouge 1
PortOnePin portLight2;              //LED Rouge 2 (ou une jaune)
PortOnePin portLight3;              //LED Verte

bool etatPN;                        //position de la barriere
 
void setup()
{
  Commanders::begin(LED_BUILTIN);
 
  Accessories::begin();
 
  // Un seul bouton, mais deux événements pour le PN
  boutonILS.begin(1234, 6); // premier événement pour le déclanchement
 
  // Les ports avec leurs broches en digital (pas PWM)
  portPN.begin(3);
  portLight1.begin(7, DIGITAL);
  portLight2.begin(8, DIGITAL);
  portLight3.begin(9, DIGITAL);     //LED Verte
 
  // begin de l'accessoire de 2 Dels qui doivent clignoter à 500ms d'intervalle.
  Dels.begin(0, 3, 500);
   
  // Les DELs avec pour chaque, le port utilisé.
  Dels.beginLight(0, &portLight1);
  Dels.beginLight(1, &portLight2);
  Dels.beginLight(2, &portLight3);
 
  // On fait clignoter les leds...
  Dels.SetBlinking(0, 500);
  Dels.SetBlinking(1, 500);
 
  // Le servo : pas de durée de mouvement, un débattement entre 90 et 160 degres
  // et deux positions stables annoncées avec des identifiants inutiles (mais obligatoires)
  PN.begin(&portPN, 75, 90, 160, 1);
  // Les deux positions sont au mini et au maxi :
  PN.AddMinMaxMovingPositions(456, 789);

 // initialisation barriere ouverte et led verte allumée
 Dels.LightOff();       // extinction des 3 LEDS
 Dels.LightOn(2);       // allumage de la LED Verte.
 PN.MoveMaximum();      //barriere grande ouverte
 Accessories::loop();   // et on fait bouger tout ca.
 }
   
unsigned long dateFermeture = 0;
 
void loop()

  Accessories::loop();
  etatPN=PN.IsMaximumOrGreaterPosition(); // on recupere la position de la barriere : 1 si grande ouverte
 
  unsigned long id = Commanders::loop();
 
  // si l'ils est activé !
  if (id == 1234)
  {
    if (dateFermeture== 0)
    {
      dateFermeture = millis();
 
      // mise en route clignotement des rouges et extinction de la verte.
      Dels.Blink();       //en fait les 3 clignotent, mais on eteint la verte juste apres.
      Dels.LightOff(2);
      //Dels.LightOn(1);  // si on veut garder une rouge fixe.
 
      // mouvement servo : fermeture de la barriere
      PN.MoveMinimum();
 
      // Plus rien à faire, attendons l'étape suivante.
      return;
    }
    else
    {
      dateFermeture = millis();
    }
  }
 
  if (dateFermeture > 0)
  {
    if (millis() - dateFermeture > TEMPO)
    {
      // Fin de l'animation. On ouvre les barrières, puis on éteint les LED
      PN.MoveMaximum();   //on ouvre les barrieres
      if(etatPN == 1)     // 1 si la barriere est en haut
      {
      Dels.LightOff();    // extinction des 3 LEDS
      Dels.LightOn(2);    // allumage de la LED Verte.
      dateFermeture = 0;
      }
      //sinon on ne modifie pas l etat des LEDS
  }
}
}
Le néophyte de service !
Adhérent AFAN

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #20 le: avril 13, 2020, 05:54:02 pm »
Là comme ça, le seul bémol que je mettrais sur ce code, c'est l'usage de Accessories.loop() dans  le setup... Dans un mouvement de servo avec une durée comme le tien (75ms entre deux petits mouvements), c'est à chaque appel d'Accessories.loop() que le mouvement est fait. Il en faut donc plusieurs, voire beaucoup pour faire le mouvement complet !
« Modifié: avril 13, 2020, 06:19:25 pm par Thierry »

Jeje_12_34

  • Jr. Member
  • **
  • Messages: 95
  • Double ovale N
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #21 le: avril 13, 2020, 06:20:56 pm »
Merci  Thierry .

Je précise que ce comportement était présent avant mes modifications et que justement, j'ai mis une partie initialisation dans le setup pour essayer d'y pallier.

Si on supprime toute la partie initialisation,  le sketch fonctionne parfaitement, dès le deuxième appui sur le bouton.  :)

Le néophyte de service !
Adhérent AFAN