Auteur Sujet: Bibliothèque Commanders  (Lu 827 fois)

petitrain

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
Bibliothèque Commanders
« le: février 25, 2018, 11:28:26 pm »
Bonjour,
  J'essaie de me familiariser avec la bibliothèque Commanders de Thierry:
  Pour les boutons et les switchs, pas de problème!!!
  J'attaque les encodeurs, et là, j'ai un problème :
   - je déclare : ButtonsCommanderEncoder  monEncodeur;
   - dans le Setup() : Commanders::begin(LED_BUILTIN);
                               monEncodeur.begin(100,8,9,0,-4,4);( j'ai monté 4 leds que je voudrais allumer/éteindre avec monEncodeur)
   - dans loop() : unsigned long eventID = Commanders::loop(); // je récupère l'identifiant de monEncodeur
       if( eventID != UNDEFINED_ID)      // Si il a bien l'identifiant,
        value = Commanders::GetLastEventData(); // je mets les valeurs (entre -4 et 4)  dans ma variable value
et je fais un switch ( value) pour allumer et éteindre mes leds successivement

mais ça ne marche pas, y'a quelque chose que je n'ai pas compris, surement dans l'exploitation des valeurs renvoyées par l'encodeur.
Voilà, si quelqu'un veut m'aider, je l'en remercie par avance...

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 443
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #1 le: février 27, 2018, 11:53:19 pm »
Bonsoir

Un encodeur, à la base, c'est fait pour renvoyer une quantité de mouvement : vers l'avant avec +1, vers l'arrière avec -1. La quantité de mouvement de l'encodeur nécessaire pour déclencher un +1 ou un -1 est donnée par le quatrième argument de begin, que je ne vois pas là... Donc on parle d'une vieille version de Commanders, antérieure à la 1.40. Voici quoi faire:

1 - mettez vous à jour sur la bibliothèque.
2 - testez à nouveau en ajoutant le quatrième argument 'MoveIncrement' au begin de l'encodeur.
3 - Si ça ne marche toujours pas, dites le ici et utilisez la balise code (le #) pour votre programme, ou ajoutez le en pièce jointe.
4 - On est pas à l'abri d'un bug que je tracerai beaucoup mieux avec le code complet. Le mode mini/maxi de l'encodeur n'est pas extrêmement testé...

petitrain

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #2 le: mars 01, 2018, 10:14:07 am »
Bonjour,
Merci de votre disponibilité et bravo pour toutes ces bibliothèques très riches en possibilités.
J'avais bien la dernière version de la bibliothèque, mais j'avais suivi l'exemple  "FullDéclarations" fourni avec, où l'argument 'MoveIncrement' n'est pas mentionné. Voilà mon erreur!!!
Je continue donc mon investagation, j'aurai peut-être encore besoin de précision.
Merci encore.

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 443
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #3 le: mars 01, 2018, 10:19:53 am »
Ha ben non, en fin de compte, comme c'est dans un des exemples fournis, c'est plutôt mon problème... Je corrigerai ça pour la prochaine version...

petitrain

  • Jr. Member
  • **
  • Messages: 77
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #4 le: mars 03, 2018, 09:58:21 am »
Encore du boulot en perspective!!!!
Bon, sinon il y a un forum pour se faire dépanner!!!
Encore merci pour tout le boulot , je prépare avec le club des petites centrales "Dccppnanocontroler" , je poste des photos dès que l'on est un peu avancé;

railyRabbit

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #5 le: mai 20, 2018, 03:21:50 pm »
Hello,

Je suis en train d'essayer la lib Commanders, avec le sketch "SimpleButtons". Mais je n'ai aucune réaction, que ce soit sur la LED ou sur le port série, alors que j'ai bien activé le mode DEBUG dans Commanders.h

J'ai essayé avec l'IDE en ligne et local, en retéléchargeant la dernière version depuis Git..  :o
Ça compile bien, mais ça ne réagit pas :(

Une idée ?

(testé avec Uno, IDE local dernière version...)
« Modifié: mai 20, 2018, 03:57:18 pm par railyRabbit »

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 443
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #6 le: mai 20, 2018, 03:39:56 pm »
Après vérification et reproduction du problème, il se trouve qu'il y a eu un changement dans l'ordre des arguments du begin() pour toujours avoir l'identifiant en premier, et l'exemple n'a pas suivi... Le setup de SimpleButtons s'écrit donc :

void setup()
{
Commanders::begin(ReceiveEvent, LED_BUILTIN);

Left.begin(100, 4); // Arduino pin 4, id 100
Dc.begin(101, 6);
Right.begin(102, 8);
pushEPS.begin(103, 10);
pushTJD.begin(104, 11);
}

Je vérifie d'abord les autres exemples, et je pousserai une version corrigée sur Github...
Merci pour le signalement !

railyRabbit

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #7 le: mai 20, 2018, 03:47:27 pm »
Ah super, j'essaye ça tout de suite ça marche nickel maintenant ! 8)
Merci Thierry !!

J'ai finalement réussi à avoir quelques infos sur le port série, en ajoutant un Serial.begin(9600) dans le setup.
Ça vaut peut-être le coup de le rajouter dans le sketch d'exemple ?
« Modifié: mai 20, 2018, 03:50:29 pm par railyRabbit »

railyRabbit

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #8 le: mai 20, 2018, 05:28:41 pm »
Je suis passé à l'implémentation d'un AnalogPushes, mais ça ne répond pas. :-[
Pourtant les valeurs attendues sont bonnes, vérifiées par 2 lignes de code :

/*************************************************************
project: <Commanders>
author: <Thierry PARIS>
description: <Demo sample with push buttons, event handler alternative>
*************************************************************/

#include "Commanders.h"

ButtonsCommanderAnalogPushes Pushes;
 
int values[] = { 0, 270, 518, 774 };
unsigned long ids[] = { 100, 101, 102, 103 };

void ReceiveEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEvent, int inData)
{
COMMANDERS_PRINT_EVENT(inId, inEvent, inData);
}

void setup()
{
Serial.begin(9600);
Commanders::begin(ReceiveEvent, LED_BUILTIN);

Pushes.begin(A0, 4, ids, values, 30);
}

void loop()
{
Commanders::loop();
if (analogRead(A0) < 900)
Serial.println(analogRead(A0));
 }

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 443
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #9 le: mai 21, 2018, 08:37:15 pm »
Effectivement, ça ne marchait plus... C'est corrigé, la version est poussée sur Github. Dis moi si ça marche.

railyRabbit

  • Newbie
  • *
  • Messages: 26
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #10 le: mai 21, 2018, 09:32:13 pm »
Hop, ça marche au poil ! ;D merci !
Je compte m'en servir pour sélectionner des itinéraires...

Marc-Henri

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • Modélisme ferroviaire & électronique
Bibliothèque Commanders: quelques questions...
« Réponse #11 le: août 27, 2018, 12:49:03 pm »
Bonjour Thierry,

Un tout grand merci et un tout grand bravo pour la bibliothèque Commanders qui est très bien structurée. C'est un très bon exemple pour moi qui me (re-)mets au C++ !

J'ai quelques questions:
  • Pour réaliser des extensions, suffit-il d'implanter une classe dérivée de CommanderClass et, pour plusieurs sources d'événements du même type, créer une hiérarchie de classes comme tu l'as fait pour les boutons ?
    Je serais intéressé à gérer des ILS et des détecteurs par consommateur de courant. Ces objets se comportent presque comme des boutons poussoir, mais la détection des rebonds pourrait être différente.
  • Pour I2C, CAN, etc, est-ce bien le pattern du singleton qui assure qu'il y a une seule instance ?
  • J'aurais besoin de créer un événement indiquant que 2 boutons ont été pressés "simultanément". C'est à dire qu'il y a eu une durée minimale durant laquelle les 2 boutons ont été vus comme pressés. Comment pourrait-on le réaliser avec cette bibliothèque ? Je vais y réfléchir...

Meilleures salutations de Suisse romande.

Thierry

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 443
    • Voir le profil
Re : Bibliothèque Commanders
« Réponse #12 le: août 28, 2018, 10:49:08 am »
De rien, c'est un plaisir de voir son travail utilisé...

1 : Pour les extensions, il 'suffit' effectivement de continuer à dériver les classes. Pour les détecteurs en tout genre, une classe dédiée serait la bienvenue. Je n'ai pas d'exemple pratique, c'est pour ça que je ne l'ai pas encore fait... Comme tu dis, ça ressemble beaucoup à un poussoir avec une durée d'activation un peu plus longue.
2 : Oui c'est bien ce pattern qui est utilisé, dans une implantation maison avec une instance statique de la classe CAN/I2C allouée dès qu'on en a besoin.
3 : J'ai en projet d'ajouter des événements 'appui long' ou 'double appui' sur un même bouton poussoir, mais je n'avais pas pensé à un appui simultané sur deux boutons...

Bon courage.