Auteur Sujet: DCCpp 1.37 > 1.4.1 : Erreur de compilation après upgrade librarie  (Lu 5608 fois)

lmollard

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Bonjour,

Je viens de mettre à jour la bibliothèque DCCpp depuis la version 1.3.7 vers la dernière en date (la 1.4.1) et depuis, j’ai les erreurs de compilation ci-dessous (je n’ai pas changé mon programme entre temps, et c'est ainsi sur mes 2 ordinateurs (Linux et Windows 10)), et du coup, impossible de l’utiliser. Cela fonctionne de nouveau quand je downgrade en 1.3.7.

/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotive.cpp:10:1 : error : ’Locomotive’ does not name a type
Locomotive::Locomotive(const char* inName, uint8_t inSpeedRegister, uint16_t inAddress, uint8_t inSpeedMax)
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotive.cpp:25:1 : error : ’Locomotive’ does not name a type
Locomotive::Locomotive(const char* inName, uint8_t inSpeedRegister, uint8_t inFunctionRegister, uint16_t inAddress, uint8_t inSpeedMax)
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:10:1 : error : ’Locomotive’ does not name a type
Locomotive* Locomotives::pFirstLocomotive = NULL ;
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:11:6 : error : ’Locomotives’ has not been declared
bool Locomotives::useFunctionRegister = false ;
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:13:1 : error : ’Locomotive’ does not name a type
Locomotive* Locomotives::get(uint16_t inAddress)
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:29:1 : error : ’Locomotive’ does not name a type
Locomotive* Locomotives::get(const char* inName)
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:45:6 : error : ’Locomotives’ has not been declared
void Locomotives::remove(uint16_t inAddress)
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:49:6 : error : ’Locomotives’ has not been declared
void Locomotives::remove(const char* inName)
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp : In function ’void remove(const char*)’ :
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:49:6 : error : ambiguating new declaration of ’void remove(const char*)’
In file included from /home/lmollard/ArduinoIDE/hardware/arduino/avr/cores/arduino/Print.h:24:0,
from /home/lmollard/ArduinoIDE/hardware/arduino/avr/cores/arduino/Stream.h:26,
from /home/lmollard/ArduinoIDE/hardware/arduino/avr/cores/arduino/HardwareSerial.h:29,
from /home/lmollard/ArduinoIDE/hardware/arduino/avr/cores/arduino/Arduino.h:233,
from /home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:7 :
/home/lmollard/ArduinoIDE/hardware/tools/avr/avr/include/stdio.h:960:12 : note : old declaration ’int remove(const char*)’
extern int remove(const char *pathname) ;
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp : At global scope :
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:53:5 : error : ’Locomotives’ has not been declared
int Locomotives::count()
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp : In function ’int count()’ :
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:57:2 : error : ’Locomotive’ was not declared in this scope
Locomotive* pCurr = pFirstLocomotive ;
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:57:14 : error : ’pCurr’ was not declared in this scope
Locomotive* pCurr = pFirstLocomotive ;
^
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:57:14 : note : suggested alternative : ’perror’
Locomotive* pCurr = pFirstLocomotive ;
^
perror
/home/lmollard/Arduino/libraries/DCCpp/src/Locomotives/Locomotives.cpp:57:22 : error : ’pFirstLocomotive’ was not declared in this scope
Locomotive* pCurr = pFirstLocomotive ;

Auriez-vous une piste à me donner pour faire de nouveau fonctionner mon programme avec la 1.4.1 ?

Question subsidiaire (du coup à propos de la 1.3.7 pour l'instant) : Je n'ai pas trouvé comment désactiver les logs qui apparaissent dans le moniteur série (Message du type : <T1 8068 0 0>) ? Car ils ralentissent terriblement l'exécution du programme. J'ai pourtant bien commenté DCCPP_DEBUG_MODE, DCCPP_DEBUG_VERBOSE_MODE et DCCPP_PRINT_DCCPP dans DCCpp.h.

Par avance, un grand merci pour votre aide.

Bonne journée,
Lionel

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2889
  • 100% Arduino et N
    • Voir le profil
Re : DCCpp 1.37 > 1.4.1 : Erreur de compilation après upgrade librarie
« Réponse #1 le: octobre 04, 2020, 09:55:08 pm »
Plusieurs pistes :

1) vous avez plusieurs bibliothèques DCCp dans votre dossier des bibliothèques.
2) en l'occurrence, vous avez du installer la bibliothèque LaBox qui intègre DCCpp ET le dossier Locomotives
3) la bibliothèque DCCpp 1.4.1 ne contient pas ce dossier Locomotives
4) de quel exemple partez-vous ?

Donc la piste est que vous devez essayer d'abord de supprimer la bibliothèque LaBox et ne garder que DCCpp 1.4.1

5) Méfiez-vous qu'il n'y ait pas d'autre DCCpp ailleurs, notamment la bibliothèque DcDccNanoController
 qui en contient un.

La dernière question (supprimer des DEBUG) est la conséquence de ce qui précède : vous n'avez pas modifié le fichier concerné parce que la bibliothèque utilisée par le compilateur n'est pas la bonne !!

Tenez-nous au courant  :D
« Modifié: octobre 04, 2020, 09:57:55 pm par Dominique »
Cordialement,
Dominique

lmollard

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : DCCpp 1.37 > 1.4.1 : Erreur de compilation après upgrade librarie
« Réponse #2 le: octobre 04, 2020, 10:52:40 pm »
Merci pour votre rapide réponse...

Je suis un peu perdu, car sur mon poste connecté à mon Arduino (Linux en l’occurrence) je n'ai rien que 3 dossiers libraries !!!
Un dans /home/lmollard/Arduino/libraries, un autre dans /home/lmollard/ArduinoIDE/libraries, et un autre dans /home/lmollard/.arduino15/packages/arduino/hardware/sam/1.6.12/libraries, et tous ne contiennent pas les mêmes bibliothèques, mais un seul la biblio DCCpp (le /home/lmollard/Arduino/libraries, et c'est là aussi où s'enregistrent par défaut les sketches (/home/lmollard/Arduino)) ! En revanche, aucun d'entre eux ne contient de plug-in nommé LaBox. Le dossier (pour la 1.4.1) s'appelle bien DCCpp et il contient pourtant le dossier Locomotives (quand il est en version 1.4.1 seulement).

Je pars de l'exemple Mini DCC :

/*************************************************************
project: <Dc/Dcc Controller>
author: <Thierry PARIS>
description: <Minimalist Dcc Controller sample>
*************************************************************/
 
#include "Commanders.h"
 
#include "DCCpp.h"
 
#define EVENT_NONE 0
#define EVENT_MORE 1
#define EVENT_LESS 2
#define EVENT_SELECT 3
#define EVENT_CANCEL 4
#define EVENT_MOVE 5
#define EVENT_START 6
#define EVENT_END 7
#define EVENT_EMERGENCY 8
#define EVENT_FUNCTION0 9
#define EVENT_FUNCTION1 10
#define EVENT_ENCODER 11
 
ButtonsCommanderPush buttonSelect;
ButtonsCommanderEncoder buttonEncoder;
ButtonsCommanderPush buttonCancel;
ButtonsCommanderPush buttonEmergency;
ButtonsCommanderSwitchOnePin buttonF0;
ButtonsCommanderSwitchOnePin buttonF1;
 
// in this sample, only one loco is driven...
int locoId; // DCC id for this loco
int locoStepsNumber; // 14, 28 or 128
int locoSpeed; // Current speed
bool locoDirectionForward; // current direction.
FunctionsState locoFunctions; // Current functions
 
void setup()
{
Serial.begin(115200);
 
buttonSelect.begin(EVENT_SELECT, A0);
buttonEncoder.begin(EVENT_ENCODER, 14, 8, 2);
buttonCancel.begin(EVENT_CANCEL, A3);
buttonEmergency.begin(EVENT_EMERGENCY, A4);
buttonF0.begin(EVENT_FUNCTION0, A1);
buttonF1.begin(EVENT_FUNCTION1, A2);
 
DCCpp::begin();
DCCpp::beginMain(UNDEFINED_PIN, DCC_SIGNAL_PIN_MAIN, 11, A0);
 
locoId = 3;
locoStepsNumber = 128;
locoSpeed = 0;
locoDirectionForward= true;
}
 
void loop()
{
DCCpp::loop();
unsigned long event = Commanders::loop();
 
switch (event)
{
case EVENT_ENCODER:
int data = Commanders::GetLastEventData();
 
if (data > 0)
{
if (locoStepsNumber >= 100)
locoSpeed += 10;
else
locoSpeed++;
if (locoSpeed > locoStepsNumber)
locoSpeed = locoStepsNumber;
DCCpp::setSpeedMain(1, locoId, locoStepsNumber, locoSpeed, locoDirectionForward);
}
if (data < 0)
{
if (locoStepsNumber >= 100)
locoSpeed -= 10;
else
locoSpeed--;
if (locoSpeed < 0)
locoSpeed = 0;
DCCpp::setSpeedMain(1, locoId, locoStepsNumber, locoSpeed, locoDirectionForward);
}
 
case EVENT_FUNCTION0:
if (locoFunctions.isActivated(0))
locoFunctions.inactivate(0);
else
locoFunctions.activate(0);
DCCpp::setFunctionsMain(2, locoId, locoFunctions);
break;
 
case EVENT_FUNCTION1:
if (locoFunctions.isActivated(1))
locoFunctions.inactivate(1);
else
locoFunctions.activate(1);
DCCpp::setFunctionsMain(2, locoId, locoFunctions);
break;
}
}

A noter que pour ce qui est de la lenteur du programme, elle est présente même si je n'initialise pas le Serial port avec Serial.begin. Mais c'est peut être normal, tant que le soucis de DEGUG = Off n'est pas résolu.

Je vais peut être tenter une réinstall propre de Arduino IDE...

Juste une précision pour me rassurer : Il est bien possible, conjointement à DCCpp d'utiliser des servomoteurs (avec Servo.h) et les commander avec les instructions en Microsecondes ?

Encore merci...

dmskd

  • Newbie
  • *
  • Messages: 45
  • Arduino et N
    • Voir le profil
Re : DCCpp 1.37 > 1.4.1 : Erreur de compilation après upgrade librarie
« Réponse #3 le: octobre 05, 2020, 08:47:38 am »
Bonjour,

J'ai eu le même problème avec la bibliothèque DCCpp chargée à l'aide de PlatformIO dans VSCode.
J'ai supprimé le répertoire Locomotives dans DCCpp/src et tout est rentré dans l'ordre.

Cordialement,
Dominique
Cordialement,
Dominique

Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : DCCpp 1.37 > 1.4.1 : Erreur de compilation après upgrade librarie
« Réponse #4 le: octobre 05, 2020, 09:58:06 am »
C'est exactement ce qu'il fallait faire. C'est un développement que j'avais commencé, puis transféré dans LaBox. Il faut supprimer ça dans DCCpp. Et j'ai l'impression que la mise à jour de la bibliothèque par l'IDE ne supprime pas les fichiers en trop...

lmollard

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : DCCpp 1.37 > 1.4.1 : Erreur de compilation après upgrade librarie
« Réponse #5 le: octobre 05, 2020, 09:52:10 pm »
Bonsoir,

Un grand merci pour ces informations qui ont pu solutionner mon problème... J'arrive maintenant à compiler, et en commentant les lignes de debug dans le fichier .h, çà s'est calmé du coté de la console (d'ailleurs, même sans les commenter !!)...

Par contre, j'a 4 servomoteurs sur les pins 3, 4, 5 et 6 dont le fonctionnement est très saccadé quand DCCpp est actif. Après quelques essais, j'ai pu constater que cela semble venir de la ligne suivante présente dans la loop(), car en la mettant en commentaires je retrouve la fluidité des servos (a vrai dire, je mettais çà sur le compte des Serial.print de la console : <T1 8068 0 0>) :

DCCpp::setSpeedMain(1, locoId, locoStepsNumber, cranDcc, locoDirectionForward);
J'ai donc corrigé comme ceci :

    if(cranDcc != previousCranDcc) {
            DCCpp::setSpeedMain(1, locoId, locoStepsNumber, cranDcc, locoDirectionForward);
    }
    previousCranDcc = cranDcc;

Est-ce bien la bonne façon de procéder ou y a t'il une autre raison (mauvais choix dans les Id's de pins, etc...) ?

Encore merci pour votre aide et vos bibliothèques d'une grande qualité...

Bonne soirée,

Lionel


Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 745
    • Voir le profil
Re : DCCpp 1.37 > 1.4.1 : Erreur de compilation après upgrade librarie
« Réponse #6 le: octobre 06, 2020, 03:05:17 pm »
Vu d'ici, ça ressemble à un bouton rotatif qui change de position très souvent, et donc mets à jour sa valeur très souvent. Le dernier argument du begin de l'encodeur correspond justement à ce qu'il est correct d'appeler un mouvement minimum. En dessous, l'événement n'est pas levé... Par défaut c'est fixé à trois crans, mais réduit à 2 dans le code miniDcc. je pense qu'il faut aussi augmenter cette valeur pour réduire le bruit de l'encodeur. Mettre un Serial.println() dans le case EVENT_ENCODER pour voir la fréquence de passage là...
Cela dit la modification apportée va aussi fonctionner, mais uniquement aux bornes mini ou maxi, parce qu'au milieu, la valeur bouge, donc il faut appeler setSpeedMain()...

lmollard

  • Newbie
  • *
  • Messages: 7
    • Voir le profil
Re : DCCpp 1.37 > 1.4.1 : Erreur de compilation après upgrade librarie
« Réponse #7 le: octobre 08, 2020, 09:19:26 pm »
Bonsoir,

Merci pour ces explications. En fait, je me suis inspiré du MiniDCC, juste pour couvrir les fonctions dont j'ai besoin pour faire rouler une machine. Voici, entre autres parties de code, celui que j'ai qui concerne directement DCCpp :

Dans Setup() :
    DCCpp::begin();
    DCCpp::beginMain(255, DCCPP_DIR_MAIN, DCCPP_PWM_MAIN, DCCPP_MAX471_MAIN);
    DCCpp::powerOn();
    DCCpp::setSpeedMain(1, locoId, locoStepsNumber, cranDcc, locoDirectionForward); // Mise à 0 pour commencer

Dans Loop() :
    DCCpp::loop();
Puis après divers calculs, toujours dans Loop():

    cranDcc = round((valeurVitesseReelle) * 129 / matriceConfigsConvois[currentLocoPreset][1])-1;
    if(cranDcc != previousCranDcc) {
            DCCpp::setSpeedMain(1, locoId, locoStepsNumber, cranDcc, locoDirectionForward);
    }
    previousCranDcc = cranDcc;

Je ne m’appuie donc pas sur la totalité du code MiniDCC, et voilà donc pourquoi je n'ai pas le case EVENT_ENCODER.

Plus tard, je m’intéresserai aux fonctions des machines pour les feux, les sons, etc...

J'avais en fait cette demande, car les servos de mon pupitre tournaient très au ralenti si le setSpeedMain() était appelé à chaque passage dans la boucle... Mais avec ce code, les servos ont retrouvé leur fluidité !

Encore un grand merci pour votre fabuleux travail, et site...

Bonne soirée,

Lionel