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

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
bibliothèque Commanders+Accessoires
« le: octobre 17, 2017, 10:34:31 pm »
Bonsoir,

J'ai repris les exemples fournis dans la bibliothèque Accessoires pour actionner un aiguillage type Jouef 2 solenoïdes (via ULN2003).
Je tente de l'actionner avec un bouton poussoir, ou bien un interrupteur et hélas ça ne se passe pas comme prévu  :'(

voici le code:
#include <Commanders.h>
#include "Accessories.h"

ButtonsCommanderPush push;
ButtonsCommanderSwitch boutonAiguillageGauche;

// Accessories
AccessoryMotorTwoWays aiguille;

// Drivers
PortTwoPins port;

#define DCCID_DROIT   DCCINT(20, 0)
#define DCCID_DEVIE   DCCINT(20, 1)

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

void setup()
{
  Serial.begin(115200);
 
  Commanders::begin(ReceiveEvent, LED_BUILTIN);
  Accessories::begin();
 
  I2CCommander.begin(0x10); // I2C Slave identifier.
 
  // Setup of ports
  port.begin(4, 5, DIGITAL);

  // Accessories setups
  push.AddEvent(DCCID_DEVIE);
  push.begin(DCCID_DROIT,8);
 
  boutonAiguillageGauche.AddEvent(DCCID_DROIT, 6);
  boutonAiguillageGauche.AddEvent(DCCID_DEVIE, 7);
  boutonAiguillageGauche.begin();
 
  aiguille.beginTwoWays(&port, DCCID_DROIT, DCCID_DEVIE, 255, 250);
}

void loop()
{
  unsigned long id = Commanders::loop();
 
  if (id != UNDEFINED_ID)
  {
    // Renvoie l'événement reçu de Commanders, vers les accessoires...
    Accessories::RaiseEvent(id, (ACCESSORIES_EVENT_TYPE) Commanders::GetLastEventType(), Commanders::GetLastEventData());
  }
 
  Accessories::loop();
}

j'ai activé le mode debug pour voir ce qu'il se passe sur la console série:
au démarrage:
Commanders V1.40
Developed by Thierry Paris.
(c) Locoduino 2016-2017

*** Setup Commanders started.

Accessories V1.0
Developed by Thierry Paris.
(c) Locoduino 2016-2017

*** Setup Accessories started.
*** Setup Commanders Finished.
Commander event : Address : 20 / MOVE ON
Commander event : Address : 10020 / MOVE OFF
*** Setup Accessories Finished.

Si j'actionne mon interrupteur, rien ne se passe et aucune réaction de la ledbuiltin, ou des sorties vers l'aiguillage.

Si j'appuie sur le bouton poussoir:
Commander event : Address : 10020 / MOVEPOSITIONID
ButtonsCommanderButton id:10020 selected !
Same position : Cant move !
Same position : Cant move !
Same position : Cant move !
Same position : Cant move !
Same position : Cant move !
Same position : Cant move !
....
et au bout de plusieurs dizaine de lignes du même message, l'arduino redémarre (il n'a pas dû aimé :()

Pouvez vous me venir en aide ?

Merci.

PS: quand le TCO local fonctionnera, je voudrais envoyer les ordres via I2C avec un autre Arduino.

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #1 le: octobre 17, 2017, 11:31:42 pm »
C'est une erreur de ma part, corrigée dans la version 1.01 disponible sur Framagit : https://framagit.org/locoduino.org/Accessories/blob/master/Accessories.zip.

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #2 le: octobre 18, 2017, 07:26:53 pm »
Thierry,

Je viens de récupérer tes nouvelles sources: ça fonctionne en TCO local !   :D
sortie console:
Citer
Commander event : Address : 20 / MOVEPOSITIONID
ButtonsCommanderButton id:20 selected !
4 / 5 PortTwoPins MoveRightDir()
4 / 5 PortTwoPins MoveStop()
Commander event : Address : 10020 / MOVEPOSITIONID
ButtonsCommanderButton id:10020 selected !
4 / 5 PortTwoPins MoveLeftDir()
4 / 5 PortTwoPins MoveStop()

maintenant je m'attaque à l'envoi/réception par I2C et je rencontre à nouveau des petits soucis:
j'ai repris l'exemple I2CSender.ino de Commanders.
j'ai ajouté quelques lignes de debug dans I2CCommander.cpp pour me sortir les données reçues par I2C.
au 1er appui sur un bouton-poussoir, la sortie d'aiguille réagit bien:
Citer
I2CCommander::ReceiveHandler: chars read : 7
data received from I2C: 20 0 0 0 5 0 0
Commander event : Address : 20 / MOVEPOSITIONID
4 / 5 PortTwoPins MoveRightDir()
4 / 5 PortTwoPins MoveStop()

par contre un second appui sur BP ne donne rien sur la sortie:
Citer
I2CCommander::ReceiveHandler: chars read : 7
data received from I2C: 20 0 0 0 5 1 0
Commander event : Address : 20 / MOVEPOSITIONID
Same position : Cant move !

coté sketch I2CSender.ino, je met juste la commande envoyée:
1er appui: Commanders_I2C_SendEvent(0x10, 20, COMMANDERS_EVENT_MOVEPOSITIONID, 0);
2eme appui:  Commanders_I2C_SendEvent(0x10, 20, COMMANDERS_EVENT_MOVEPOSITIONID, 1);

si par contre pour le 2eme appui je met:
 Commanders_I2C_SendEvent(0x10, 10020, COMMANDERS_EVENT_MOVEPOSITIONID, 1);
ma sortie d'aiguille réagit bien et je peux faire bouger correctement l'aiguillage à chaque appui sur le BP.

Mon interrogation:
Je pensais que le dernier argument de Commanders_I2C_SendEvent() indiquait la sous-fonction à activer sur l'ID indiqué.

De mon point de vue, je trouve bizarre en TCO que l'appui sur le BP fasse changer l'adresse reçue par CommanderEvent,
à moins qu'il n'y ait plus de notion d'adresse mais seulement des ID unique lier aux événements ajouter aux boutons...
mais pourquoi alors déclarer comme ceci les 2 actions que le BP gère:
push.AddEvent(DCCINT(20,1));
push.begin(DCCINT(20,0),PIN_BP);

Peux tu m'éclaircir mon interrogation ?
Merci.
« Modifié: octobre 18, 2017, 07:33:28 pm par bagou91 »

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #3 le: octobre 18, 2017, 08:31:47 pm »
Je vois que tu progresses, c'est bien. La différence vient de la non utilisation de DCCINT du côté de l'envoyeur. Parce que DCCINT(20,1) donne 10020 ! C'est pour ça que ça marche quand tu mets 10020 du côté de l'envoyeur, interprété ensuite à la réception comme '20,1' . Pour être cohérent, tu devrais ajouter la macro DCCINT trouvée dans DccCommander.hpp, au source de l'envoyeur et l'utiliser pour définir le message à envoyer :

#define DCCINT(id, acc)      ((acc) * 10000UL + (id))

Commanders_I2C_SendEvent(0x10, DCCINT(20,0), COMMANDERS_EVENT_MOVEPOSITIONID, 0);
Commanders_I2C_SendEvent(0x10, DCCINT(20,1), COMMANDERS_EVENT_MOVEPOSITIONID, 0);

Le dernier argument n'a pas de sens pour un moteur à deux positions, c'est l'id de l'événement qui fait le boulot.

Dernier point, je n'avais pas imaginé que quelqu'un ferait un appel à AddEvent avant begin ! Mais je constate avec plaisir que ça marche quand même...

Pour tenter de répondre à ta question que je crains de ne pas avoir totalement comprise, un bouton poussoir dispose d'une liste d'événements. Le begin pose le premier, les AddEvent suivants en ajoutent (ou l'inverse  8) ). Le fait d'appuyer sur ce bouton va envoyer le premier événement. L'appui suivant enverra l'événement suivant, et ainsi de suite jusqu'à la fin de la liste. A ce moment là on recommence au début.

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #4 le: octobre 18, 2017, 08:46:36 pm »
OK je comprend mieux d'où vient ce "10020" que m'affiche la sortie console.

Je vais faire les modifications pour prendre en compte cette macro.

J'avais bien compris la liste d'événements associé au BP.
Ma dernière question (interrogation) est résolue par ce que tu m'as répondu sur la macro :)

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #5 le: octobre 18, 2017, 10:03:34 pm »
J'ai réussi à envoyer les commandes correctement par I2C  :D
en PJ le sketch.

Maintenant j'aimerai réutiliser le principe de la librairie Accessoire au niveau des déclarations des boutons et des ID d'événements liés.
Ceci afin de rendre plus propre et plus structurer le code.

Seulement à chaque fois que j'utilise ma fonction d'envoi de trame I2C, l'arduino freeze et ne répond plus et rien ne se passe au niveau réception.
Sur la console, la sortie est incomplète, par exemple:
Citer
10020 5 0
Commander event : Address : 10020 / MOVEPOSITIONID
I2C send Commanders event: 10020/5/0
I2C sender

Voici le code:
#include <Commanders.h>
#include "Accessories.h"
#include <Wire.h>

ButtonsCommanderPush push;

#define CONSOLE

#define ADDR_I2C 0x10

#define DCCID_DROIT   DCCINT(20, 0)
#define DCCID_DEVIE   DCCINT(20, 1)

bool Commanders_I2C_SendEvent(uint8_t inID, unsigned long inEventID, COMMANDERS_EVENT_TYPE inEventType, int inEventData)
{
#ifdef CONSOLE
  Serial.print(F("I2C send Commanders event: "));
  Serial.print(inEventID, DEC);
  Serial.print(F("/"));
  Serial.print((char) ('0' + (char)inEventType));
  Serial.print(F("/"));
  Serial.println(inEventData, DEC);
#endif
 
  Wire.beginTransmission(inID);

  int nb = Wire.write((const uint8_t *)&inEventID, sizeof(unsigned long));
  nb += Wire.write((char )inEventType);
  nb += Wire.write((const uint8_t *)&inEventData, sizeof(int));

#ifdef CONSOLE
  Serial.print(F("I2C sender : nb byte transmitted : "));
  Serial.println(nb, DEC);
#endif

  Wire.endTransmission(true);

  return true;
}

void ReceiveEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEvent, int inData)
{
  COMMANDERS_PRINT_EVENT(inId, inEvent, inData);
  //if (inId != UNDEFINED_ID){
  //  Commanders_I2C_SendEvent(ADDR_I2C, inId, inEvent, inData);
  //}
}

void setup()
{
  Serial.begin(115200);
 
  Commanders::begin(ReceiveEvent, LED_BUILTIN);
  Accessories::begin();
 
  // Setup of the buttons, one by accessory
  push.AddEvent(DCCINT(20, 1));
  push.begin(DCCINT(20, 0),4);
}

void loop()
{
  unsigned long id = Commanders::loop();
 
  if (id != UNDEFINED_ID)
  {
    //Commanders_I2C_SendEvent(ADDR_I2C, id, Commanders::GetLastEventType(), Commanders::GetLastEventData());
    // Renvoie l'événement reçu de Commanders, vers les accessoires...
    Accessories::RaiseEvent(id, (ACCESSORIES_EVENT_TYPE) Commanders::GetLastEventType(), Commanders::GetLastEventData());
  }
 
  Accessories::loop();
}

J'ai laissé commenter les endroits où j'utilise la fonction d'envoi I2C pour montrer les divers endroits ou j'ai testé sans succès.

Si tu as une idée du problème, je suis preneur :)

Merci de ton aide.

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #6 le: octobre 20, 2017, 09:20:27 am »
Pour moi, le problème vient de l'utilisation d'Accessories ici qui n'est pas justifié. Le rôle d'Accessories, si on simplifie au maximum, est de recevoir des événements qu'elle va traduire en niveaux HIGH/LOW sur les broches de l'Arduino. Ma version de ton code:

#include <Commanders.h>
#include <Wire.h>

ButtonsCommanderPush push;

#define CONSOLE

#define ADDR_I2C 0x10

#define DCCID_DROIT   DCCINT(20, 0)
#define DCCID_DEVIE   DCCINT(20, 1)

bool Commanders_I2C_SendEvent(uint8_t inID, unsigned long inEventID, COMMANDERS_EVENT_TYPE inEventType, int inEventData)
{
#ifdef CONSOLE
  Serial.print(F("I2C send Commanders event: "));
  Serial.print(inEventID, DEC);
  Serial.print(F("/"));
  Serial.print((char) ('0' + (char)inEventType));
  Serial.print(F("/"));
  Serial.println(inEventData, DEC);
#endif
 
  Wire.beginTransmission(inID);

  int nb = Wire.write((const uint8_t *)&inEventID, sizeof(unsigned long));
  nb += Wire.write((char )inEventType);
  nb += Wire.write((const uint8_t *)&inEventData, sizeof(int));

#ifdef CONSOLE
  Serial.print(F("I2C sender : nb byte transmitted : "));
  Serial.println(nb, DEC);
#endif

  Wire.endTransmission(true);

  return true;
}

void setup()
{
  Serial.begin(115200);
 
  Commanders::begin(LED_BUILTIN);
 
  // Setup of the buttons, one by accessory
  push.begin(DCCINT(20, 0),4);
  push.AddEvent(DCCINT(20, 1));
}

void loop()
{
  unsigned long id = Commanders::loop();
 
  if (id != UNDEFINED_ID)
  {
    Commanders_I2C_SendEvent(ADDR_I2C, id, Commanders::GetLastEventType(), Commanders::GetLastEventData());
  }
}

Le problème du plantage vient peut être de l'utilisation d'Accessories sans aucun accessoires déclaré !

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #7 le: octobre 20, 2017, 07:03:42 pm »
bonsoir,

Je viens de tester en enlevant la partie Accessoires:
Toujours le même freeze de l'arduino lorsque j'appuie sur le bouton poussoir.

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #8 le: octobre 22, 2017, 03:23:46 pm »
Je reproduis le freeze sur mon nano. Il semble qu'en réalité la fonction Wire.EndTransmission() attende indéfiniment un accusé de réception ou similaire depuis le bus. Ce qui n'arrive pas puisque, en tout cas chez moi, il n'y a rien au bout...

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #9 le: octobre 23, 2017, 10:09:46 am »
Sur ma plateforme de test, j'ai bien un device slave sur l'I2C: un arduino nano avec le sketch qui active un aiguillage (celui en début de ce sujet).
Avec le 1er sketch d'envoi I2C que j'ai fait (PJ du 18/10 22h03), cela fonctionne bien.

C'est en essayant d'associer la bibliothèque Commanders et l'envoi I2C avec la fonction récupérer dans l'exemple I2C_Sender que cela freeze.
En recherchant sur le net, je trouve beaucoup de sujets sur des problèmes de freeze similaire en I2C...

Je testerai ce soir avec une librairie I2C alternative et revérifierai le bon fonctionnement avec mon 1er sketch.

bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #10 le: octobre 23, 2017, 09:27:36 pm »
bonsoir,

j'ai revérifié mes 2 sketchs:
dans celui intégrant la librairie Commanders, j'avais oublié Wire.begin() dans le setup()  :-[

Ca fonctionne bien à présent !  :D

je joint le sketch entier.

lapive

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #11 le: mai 15, 2018, 01:09:13 am »
Bonjour Thierry,

Tout d'abord MERCI pour la création et le PARTAGE de ce merveilleux duo, Accessories et Commanders, qui nous facilite grandement la programmation de nos petits Arduino !

C'est en USANT et ABUSANT de tes deux bibliothèques que je me suis retrouvé dans des cas ou mon arduino NANO et arduino PRO avaient des comportements erratiques allant parfois jusqu'au RESET.

Voici le .ino pour le test d'un bouton poussoir et d'un relais:
#include <Commanders.h>
#include <Accessories.h>

const int buttonPin = 3;     // broche du poussoir
ButtonsCommanderPush Bouton;
PortOnePin           Port;
AccessoryLight       Relais;

void ReceiveEvent(unsigned long inId, COMMANDERS_EVENT_TYPE inEventType, int inEventData)
{
Accessories::ReceiveEvent(inId, (ACCESSORIES_EVENT_TYPE)inEventType, inEventData);
}

void setup()
{
Serial.begin(115200); // console ARDUINO PC

Commanders::begin(ReceiveEvent);
Accessories::begin();

Bouton.begin(100, buttonPin);
Port.begin(4, DIGITAL_INVERTED);
Relais.begin(&Port, 100);
    PRINT_COMMANDERS()
PRINT_ACCESSORIES
}

void loop(void)
{
Commanders::loop();
Accessories::loop();
}
Après avoir activé les modes debug des bibliothèques, ainsi qu'ajouté beaucoups de print supplémentaires dans le fichier Accessory.cpp, voici ce que j'ai remarqué:
L'affichage de multiples "Debounce : Cant move !" et puis parfois un RESET !

Console:
Opening port
Port open

Commanders V1.60.0
Created by Thierry Paris.
(c) Locoduino 2016-2018

*** Setup Commanders started.

Accessories V1.1.1
Developed by Thierry Paris.
(c) Locoduino 2016-2018

*** Setup Accessories started.
AccessoryBaseLight OFF
AccessoryBaseLight SetState OFF
********* Commanders List
Commander: ButtonsCommander
    Push - Pin :3
        Event Id: 100 / Event type: MOVEPOSITIONID
********* End of List
********* Accessories List
    Light : ID 100 / Fading Step: 0 / Fading Delay: 0 / Blinking Delay: 0 / [PortOnePin pin: 4 (DIGITAL_INVERTED)]
********* End of Accessories
*** Setup Commanders Finished.
*** Setup Accessories Finished.
GetLastMoveTime : 0 GetDebounceDelay : 58823
Heap size:65
Stack size:47
Free ram:1383
Debounce : Cant move ! ++++++++++++++++++++++++++
GetLastMoveTime : 0, GetDebounceDelay : 58823
Heap size:65
Stack size:47
Free ram:1383
Accessory id 100, Event 5, Data 0 Action ADD event **************************
ButtonsCommanderButton id:100 selected !
GetLastMoveTime : 0 GetDebounceDelay : 58823
Heap size:75
Stack size:28
Free ram:1392
Debounce : Cant move ! ++++++++++++++++++++++++++
GetLastMoveTime : 0, GetDebounceDelay : 58823
Heap size:75
Stack size:28
Free ram:1392
Accessory id 100, Event 5, Data 0 Action ADD event **************************
GetLastMoveTime : 0 GetDebounceDelay : 58823
Heap size:85
Stack size:28
Free ram:1382
Debounce : Cant move ! ++++++++++++++++++++++++++
GetLastMoveTime : 0, GetDebounceDelay : 58823
Heap size:85
Stack size:28
Free ram:1382
... après une longue série .... la fin de l'affichage ... où l'on voit que la RAM dispo = 132 octets !!
Accessory id 100, Event 5, Data 0 Action ADD event **************************
GetLastMoveTime : 0 GetDebounceDelay : 58823
Heap size:1335
Stack size:28
Free ram:132
Debounce : Cant move ! ++++++++++++++++++++++++++
GetLastMoveTime : 0, GetDebounceDelay : 58823
Heap size:1335
Stack size:28
Free ram:132
Accessory id 5, Event 5, Data 0 Action ADD event **************************

On remarque la grande valeur de GetDebounceDelay 58855, valeur que nulle part je ne trouve et que je n'ai pas initialisée.

J'ai fait un affichage de la SRAM libre, et elle diminuait après chaque affichage de "Debounce : Cant move !" se soldant parfois par un RESET.
Le message "Debounce : Cant move" ce situe dans le fichier accessory.cpp dont un extrait ci-dessous:
bool Accessory::IsMovementPending()
{
#ifdef ACCESSORIES_DEBUG_MODE
Serial.print(F("GetLastMoveTime : "));
Serial.print(GetLastMoveTime());
Serial.print(F("\tGetDebounceDelay : "));
Serial.println(GetDebounceDelay());
MEMORY_PRINT_HEAPSIZE
MEMORY_PRINT_STACKSIZE
MEMORY_PRINT_FREERAM
#endif
if (this->IsActionDelayPending())
{
#ifdef ACCESSORIES_DEBUG_MODE
Serial.println(F("ActionPending : Cant move !"));
#endif
return true;
}

if (millis() - this->GetLastMoveTime() <= this->GetDebounceDelay())
{
#ifdef ACCESSORIES_DEBUG_MODE
Serial.println(F("Debounce : Cant move ! ++++++++++++++++++++++++++"));
Serial.print(F("GetLastMoveTime : "));
Serial.print(GetLastMoveTime());
Serial.print(F(", GetDebounceDelay : "));
Serial.println(GetDebounceDelay());
MEMORY_PRINT_HEAPSIZE
MEMORY_PRINT_STACKSIZE
MEMORY_PRINT_FREERAM
#endif
return true;
}

this->SetLastMoveTime();
return false;
}
La conséquence de la très grande valeur (58855 ici) retournée par GetDebounceDelay(), fera que le code ci-dessous retournera TRUE
if (millis() - this->GetLastMoveTime() <= this->GetDebounceDelay())
{
             return true;
}

La fonction Accessory::IsMovementPending(), est appelée par:
void Accessory::ExecuteEvent(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent, int inData)
{
Accessory *acc = GetById(inId);

if (acc != NULL)
{
if (acc->IsMovementPending() || (ActionsStack::FillingStack && inEvent != ACCESSORIES_EVENT_EXTERNALMOVE))
{
ActionsStack::Actions.Add(inId, inEvent, inData);
#ifdef ACCESSORIES_DEBUG_MODE
Serial.print(F("Accessory id "));
Serial.print(inId);
Serial.print(F(", Event "));
Serial.print(inEvent);
Serial.print(F(", Data "));
Serial.print(inData);
Serial.println(F(" Action ADD event **************************"));
#endif
return;
}

if (inEvent == ACCESSORIES_EVENT_MOVEPOSITIONINDEX && (inData < 0 || inData >= acc->GetMovingPositionSize()))
{
#ifdef ACCESSORIES_DEBUG_MODE
Serial.print(F("Accessory id "));
Serial.print(inId);
Serial.print(F(" bad MovePositionIndex event "));
Serial.println(inData);
#endif
return;
}

acc->Event(inId, inEvent, inData);
}
}
D'après ce que je comprends, le retour TRUE de IsMovementPending() va appeler ActionsStack::Actions.Add(inId, inEvent, inData);
c'est cette dernière qui va consommer de la RAM .....

Bref, j'ai testé l'initialisation de debounceDelay=50 dans le constructeur de Accessory et là, plus de RESET, plus de consommmation de la SRAM, et plus de message Cant move !!!!

Il semblerai que debounceDelay prenait "ce qu'il trouvait" en SRAM après l'allumage du NANO ou le upload d'un nouveau programme.

Je joins les copies du moniteur série, ainsi que le fichier Accessory.cpp pour montrer où j'ai inséré les print qui ont permis cet affichage.

J'espère ne pas être trop à côté de la plaque dans les"explications" que j'ai trouvé à mon problème ! Et je fais confiance à Thierry pour me le dire très franchement :) car il s'agit peut-être tout simplement que je ne sais pas utiliser la bibliothèque ! :-[

Toutes mes amitiés à l'équipe de Locoduino qui, on ne se lasse pas de le dire, fait un remarquable travail.
Cyrille


bagou91

  • Jr. Member
  • **
  • Messages: 52
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #12 le: mai 15, 2018, 11:52:53 am »
Bonjour lapive,

Merci pour ces infos.

Il est vrai que j'ai aussi constaté ce plantage et reset dans mes nombreux tests, mais je pensais que c'était plus dû à mes appuis sur BP trop frénétiques :)

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 810
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #13 le: mai 15, 2018, 01:38:10 pm »
Tu as tout à fait raison lapive, il manquait une initialisation. A ma décharge, je teste dans Visual-Studio qui introduit un changement lié au mode 'debug'. En Debug, tout est initialisé à 0. Lorsque l'on compile en release pour mettre en production comme l'IDE Arduino, les variables ne sont plus initialisées et prennent ce qui traîne à leur emplacement mémoire comme leur valeur. Voilà pourquoi, 'normalement', j'initialise toujours toutes les données d'une classe même si ça ne parait pas nécessaire à la lecture... C'est ce qui a manqué ici. Mea culpa !

Une version 1.1.2 a été poussée sur Github et devrait pouvoir être récupérée bientôt (il y a un petit délai) depuis l'interface de l'IDE par une mise à jour de la bibliothèque.
Bonne continuation.
« Modifié: mai 15, 2018, 01:59:02 pm par Thierry »

lapive

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : bibliothèque Commanders+Accessoires
« Réponse #14 le: mai 15, 2018, 07:53:21 pm »
Merci Thierry pour la rapidité avec laquelle tu nous a mis à disposition cette nouvelle version.

Un petit clin d'oeil  ;) : tu as omis ton petit Serial.println(F("Accessories V1.1.2")); dans Accessories.cpp
Rien de bien grave !!!  ;D

Si je peux abuser de ta patience, je n'ai jamais fait de bibliothèque pour Arduino et je remarque que le fichier library.properties contient version=1.1.1
Cela aurait-il une incidence sur l'IDE arduino pour rechercher une nouvelle mise à jour ? (j'ai récupéré la version depuis Github)

Très bonne soirée.