LOCODUINO

Bibliothèque DcDccNanoController

Une petite centrale toute prête...

.
Par : Thierry

DIFFICULTÉ :

A travers de nombreux articles sur le site, il est possible de se construire ou de se concevoir une centrale DCC en s’inspirant, voire en copiant généreusement les articles existants proposés par mes confrères et néanmoins amis, et en modifiant tout aussi généreusement les sources qu’ils fournissent. L’idée de cette bibliothèque DcDccNanoController (DDc pour les intimes (le ’c’ est en minuscule pour ne pas faire d’ombre à DDC, l’autre centrale pas nano qui viendra plus tard) ) est un peu différente et propose une centrale quasiment clé en main. Vous fournissez le matériel, vous le gérez dans votre croquis, et DDc vous fourni tout le reste : une interface utilisateur et une centrale DC et DCC !

Depuis longtemps, je fabrique des briques logicielles destinées à une construction plus ambitieuse. Sur ce site, je fournis des bibliothèques prêtes à l’emploi pour faciliter la vie d’éventuels utilisateurs qui n’ont plus qu’à coder un minimum pour s’en servir. C’est l’idée qui a vu naître UAD, remplacée depuis par Commanders (pour gérer les commandes : boutons, potars, encodeurs, bus CAN, SPI ou I2C, etc...) et Accessories (pour piloter les accessoires en tout genre). C’est ensuite EEPROMextent qui permet de sauvegarder de manière structurée et fiable des données dans l’EEPROM en optimisant son usure. Et enfin LcdUi qui permet de construire une interface utilisateur sur un écran LCD sans réinventer la poudre à chaque fois.
La bibliothèque que je vous propose aujourd’hui est un peu la conclusion de cette démarche, la première maison (plutôt une maisonnette ici...) utilisant ces fameuses briques. DcDccNanoController est un nom un peu long, mais qui tente de tout dire en un seul mot : c’est une centrale de pilotage de trains (Controller), apte à l’analogique (DC) comme au numérique (DCC), et basée sur un Arduino Nano. Un Arduino Uno peut aussi faire l’affaire, leurs caractéristiques étant très proches à deux broches près. Le moteur DCC utilisé est bien entendu notre chouchou du moment DCC++, remanié pour les besoins de la cause...
Sur de petits processeurs comme l’Atmel ATMEGA328 qui équipe les Nano et Uno, la mémoire vive SRAM est réduite à 2K, soit 2048 octets. C’est très peu, et cela ne m’a pas permis de faire tout ce que je voulais. Il y a deux conséquences : la centrale présentée aujourd’hui sera simple, et une nouvelle bibliothèque destinée à des modèles plus puissants d’Arduino ou équivalents, comme le Mega, le Due ou plus exotiques comme le STM32 ou les puces Wifi ESP8266 ou ESP32 sera présentée plus tard.

C’est quoi que c’est-y donc ?

DcDccNanoController est donc une centrale DC/analogique permettant de fixer la fréquence PWM de l’alimentation, et bien sûr de piloter une machine dans les deux sens. Pendant le pilotage, une fonction vitesse lente permet de limiter la vitesse à la moitié, et donc de manœuvrer plus précisément.
Du côté DCC/numérique, elle ne peut piloter qu’une seule machine à la fois dont on peut fixer l’adresse, le nombre de pas (14/28/128) et l’adresse de deux fonctions. Elle permet aussi de lire ou d’écrire les Cvs du décodeur. C’est donc plutôt une centrale de locodrome, ou de réglage de décodeur type Sprog.

DCC++ ?

Cela a déjà été dit dans d’autres articles et sur le forum, mais DCC++ est une petite merveille, bien écrite, efficace et performante. Et c’est effectivement ce que j’ai utilisé dans cette centrale. Mais comme la mémoire d’un petit Arduino est réduite, et que d’autre part les possibilités de DCC++ sont naturellement limitées d’origine pour deux shields moteur bien connus (l’Arduino Motor shield V3 et Pololu MC33926 Motor shield), je l’ai à la fois simplifiée et paramétrée afin que l’on puisse l’utiliser avec d’autres fournisseurs de puissance sans taper dans son code. Les deux shields historiques restent bien sûr utilisables...

Simplifiée comment ?

En gros, ne subsiste que le strict nécessaire pour une centrale pilotée par de vrais boutons physiques. Cela veut dire pas d’interface série pour envoyer des ordres, pas d’interface réseau, pas d’objets exotiques comme des aiguillages, des sorties, du stockage EEPROM des CVs... Juste la partie DCC ! Et encore, une seule loco pilotable, une seule voie pilotée en DCC qui fait office de voie principale et de voie de programmation.

Paramétrée comment ?

Le paramétrage de DCC++ dans sa version originale passe par la modification d’un fichier include pour déclarer les différents paramètres, type de shield, type d’interface réseau, etc... Une fois réagencée, la nouvelle interface permet de décider dans le setup() du croquis avec le begin() de la bibliothèque quelles sont les broches utilisées par DCC++. Les modifications de l’include ne sont plus nécessaires.

Besoin de rien, envie de ... quoi ?

Pour fonctionner, outre DCC++ intégrée aux sources de la bibliothèque DcDccNanoController, la bibliothèque LcdUi doit être installée. Et si comme dans mon exemple vous voulez utiliser la bibliothèque Commanders pour gérer les boutons, elle devra aussi être installée, ainsi que DIO2, livrée dans les extras de Commanders et nécessaire à son fonctionnement.

DcDccNanoController

La bibliothèque masque la tripaille : DCC++ bien sûr, mais aussi LcdUi utilisée pour l’interface utilisateur... Ne reste que l’objet principal DcDccController qui fait tourner tout ce petit monde.

Figure 1
Figure 1

Sur la figure 1, les ovales noirs représentent les objets physiques : le boitier avec ses boutons, l’écran et la voie à piloter. Les rectangles bleus sont du code. A l’extérieur de la bibliothèque se trouve le croquis qui reçoit les informations du matériel grâce à Commanders qui transforme un appui sur un bouton par un événement DDc compréhensible par la bibliothèque. A l’intérieur de celle ci, le noyau DcDccController reçoit les événements (bouge vers le haut ou le bas, select ou échap...) et les envoie à LcdUi. Dans LcdUi, la fenêtre en cours à ce moment là reçoit l’événement et fait ce qui doit être fait (affichage sur l’écran, sortie en disant Ok ou échap...). La sortie de LcdUi est traitée dans le noyau de la bibliothèque et éventuellement traduite en ordres pour DCC++ : va plus ou moins vite, allume ou éteint les feux... A son tour DCC++ traduit ces instructions en paquets DCC envoyés sur la voie.
Du côté utilisateur de la bibliothèque, il ’suffit’ de brancher les fils, et de coder le croquis. Facile !

L’exemple

L’exemple "demo" fourni avec la bibliothèque est simplement le code de ma propre centrale branchée à demeure sur un locodrome sans prétention. Le code est donc fonctionnel et utilisé ! Et il ne nécessite qu’une trentaine de lignes utiles destinées à décrire le matériel utilisé... L’exemple a bien sûr fait le choix d’utiliser Commanders pour ses boutons, et LiquidCrystal pour l’écran LCD piloté par LcdUi.

Figure 2
Figure 2

Le code

/*************************************************************
project: <Dc/Dcc Controller>
author: <Thierry PARIS>
description: <Dc/Dcc Nano controller sample>
*************************************************************/

#include "French16.h"
#include "Commanders.h"

#include "DcDccNanoController.h"

#include <LiquidCrystal.h>
#include "ScreenLiquid.hpp"		// Fichier include de DcDccNanoController pour les ecrans pilotes par LiquidCrystal...

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
ScreenLiquid screen;

ButtonsCommanderPush buttonSelect;
ButtonsCommanderEncoder buttonEncoder;
ButtonsCommanderPush buttonCancel;
ButtonsCommanderPush buttonEmergency;
ButtonsCommanderSwitchOnePin buttonF0;
ButtonsCommanderSwitchOnePin buttonF1;

void setup()
{
	Serial.begin(115200);

	buttonSelect.begin(EVENT_SELECT, A0);
	buttonF0.begin(EVENT_FUNCTION0, A1);
	buttonF1.begin(EVENT_FUNCTION1, A2);
	buttonEmergency.begin(EVENT_EMERGENCY, A3);
	buttonCancel.begin(EVENT_CANCEL, A4);
	buttonEncoder.begin(EVENT_ENCODER, 12, 8, 2);

	screen.begin(16, 2, DcDccStringTable, &lcd);

	// Si le premier argument est à 255, seul le DCC est disponible.
	// S'il est à 0, alors seul le Dc est disponible.
	// Sinon l'etat de la broche fixera le mode.
	DcDccController::begin(A5, &screen);
	DcDccController::beginMain(255, DCC_SIGNAL_PIN_MAIN, 11, A6);    // Dir, Pwm, broche capteur courant
}

void loop()
{
	unsigned long eventId = Commanders::loop();

	// Pour LcdUi, UNDEFINED_ID de Commanders ne veut rien dire. Alors il faut le convertir en EVENT_NONE.
	if (eventId == UNDEFINED_ID)
		eventId = EVENT_NONE;

	DcDccController::loop(eventId, Commanders::GetLastEventData());
}

Voilà c’est tout ! Trente deux lignes utiles pour une centrale DCC ! Détaillons un peu :

#include "French16.h"
#include "Commanders.h"

#include "DcDccNanoController.h"

#include <LiquidCrystal.h>
#include "ScreenLiquid.hpp"		// DcDccNaNoControler include file associated with LiquidCrystal...

Première ligne utile, première question... C’est quoi ce French16.h ?
Comme je l’avais écrit dans l’article sur LcdUi, une interface utilisateur c’est d’abord beaucoup de texte. C’est ce que donne French16.h qui comme son nom l’indique concerne une ergonomie en français sur un écran 16 caractères. Dans la bibliothèque DcDccNanoController se trouve aussi English16.h pour ceux que cela intéresse... Il y a bien sûr moyen pour celui qui crée le croquis de remplacer ce fichier par le sien, si et seulement si il respecte les règles en ne changeant que le texte entre guillemets, et en respectant la longueur de ces textes limitée selon l’écran utilisé...
Viennent ensuite des includes plus connus : Commanders pour les boutons, DcDccController lui même, puis LiquidCrystal (livrée avec l’IDE) pour l’écran Lcd. ScreenLiquid, c’est la version LcdUi d’un écran déclaré par LiquidCrystal. Si vous utilisez NewLiquidCrystal (livrée avec LcdUi dans le répertoire extras), vous devrez inclure NewLiquidCrystal.hpp, avec ScreenLiquidNew.hpp pour son équivalent LcdUi .

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
ScreenLiquid screen;

ButtonsCommanderPush buttonSelect;
ButtonsCommanderEncoder buttonEncoder;
ButtonsCommanderPush buttonCancel;
ButtonsCommanderPush buttonEmergency;
ButtonsCommanderSwitchOnePin buttonF0;
ButtonsCommanderSwitchOnePin buttonF1;

Puis arrivent les déclarations : l’écran LiquidCrystal lcd avec les broches utilisées, son pendant LcdUi screen, puis les différents boutons présents sur le boitier. J’ai préféré utiliser des interrupteurs plutôt que des poussoirs pour les fonctions parce qu’en mode analogique ils ont un autre rôle. C’est aussi un moyen de laisser une fonction activée entre deux allumages de la centrale, sans devoir stocker l’état dans l’EEPROM...

void setup()
{
	Serial.begin(115200);

	buttonSelect.begin(EVENT_SELECT, A0);
	buttonEncoder.begin(EVENT_ENCODER, 12, 8, 2);
	buttonCancel.begin(EVENT_CANCEL, A3);
	buttonEmergency.begin(EVENT_EMERGENCY, A4);
	buttonF0.begin(EVENT_FUNCTION0, A1);
	buttonF1.begin(EVENT_FUNCTION1, A2);

	screen.begin(16, 2, DcDccStringTable, &lcd);

	// Si le premier argument est à 255, seul le DCC est disponible.
	// S'il est à 0, alors seul le DC est disponible.
	// Sinon l'etat de la broche fixera le mode.
	DcDccController::begin(A5, &screen);
	DcDccController::beginMain(255, DCC_SIGNAL_PIN_MAIN, 11, A6);    // Dir, Pwm, broche capteur courant
}

Voilà la plus grosse partie : le setup. Comme d’habitude, il ne faut pas hésiter à lire et relire cette partie pour être sûr de ce qui s’y trouve. C’est là que la plupart des problèmes se jouent en général.
Passons sur le Serial.begin() classique pour arriver aux begin() des différents boutons.
Chaque bouton définit ce qui sera son identifiant lorsqu’il sera utilisé. J’ai directement utilisé les différents événements DDc attendus comme identifiants ! Ces événements sont pour la plupart aussi ceux de LcdUi : EVENT_SELECT, EVENT_CANCEL, plus ceux particuliers de DDc comme EVENT_FUNCTION0. Le but est de ne pas avoir de transcription à faire entre l’identifiant du bouton et le message à transmettre à la bibliothèque. Les arguments supplémentaires des begin() concernent les broches utilisées par chaque bouton.
Ensuite, le begin de l’écran LcdUi définit sa taille, la liste des textes utilisés fournie par l’include French16.h, et l’écran LiquidCrystal associé. En réalité, French16.h ne fournit que les chaînes individuelles, c’est DcDccNanoController.h qui les rassemble dans une liste nommée DcDccStringTable utilisée ici en argument.
Une fois l’écran initialisé, ne reste plus que DcDccController lui même.
Le begin donne l’adresse d’une broche en premier argument. Selon l’état de cette broche, la centrale sera en mode DC/analogique ou DCC/numérique. Le mieux est de raccorder un interrupteur sur cette broche ! Si l’on veut piloter uniquement en analogique, il suffit de mettre 0 dans cette valeur. Avec 255, c’est le mode numérique qui est forcé. Toute autre valeur sera utilisée comme numéro de broche. Le second argument donne l’écran LcdUi initialisé à DDc.
Le beginMain définit les broches utilisées en analogique et/ou numérique. Lorsque DCC++ est utilisé avec un shield moteur, la broche PWM de l’Arduino est physiquement renvoyée sur la broche de pilotage du shield. C’est le premier argument, inutile dans mon cas puisque j’utilise un circuit spécialisé, le LMD18200, qui n’a pas besoin de renvoi... C’est pourquoi j’ai 255 pour cette valeur. Le deuxième argument est le numéro de broche associé à l’interruption utilisée par DCC++ et elle est dépendante du modèle d’Arduino utilisé. C’est donc une constante DCC_SIGNAL_PIN_MAIN définie par DCC++ lui même que j’utilise pour la broche de direction. Le PWM est donné par la broche 11, et enfin le niveau de courant consommé est accessible par la broche A6, c’est là qu’est branché le circuit MAX471 qui va mesurer le courant consommé et ainsi lire les valeurs de CV renvoyées par le décodeur.
Si la fonction s’appelle beginMain, c’est que DCC++ permet de piloter une voie principale et une voie de programmation simultanément. Mais dans le cas du Nano Controler, seule la voie principale est utilisée.

Bon, on a fait le plus dur, c’est à dire fixer les rôles et les branchements de tous les intervenants. Reste la fonction loop qui est extrêmement simple puisque l’on va récupérer les événements générés par les boutons grâce à Commanders, et en envoyer l’identifiant directement à DcDccController. Au passage on aura pris soin de transformer l’absence d’événement de Commanders (UNDEFINED_ID), en absence d’événement pour DDc (EVENT_NONE)... Parce que même s’il n’y a pas d’événements en cours et qu’aucun bouton n’a été utilisé il faut quand même donner la main à DcDccController pour qu’il finisse éventuellement d’afficher des choses avec LcdUi...

Le matériel

Comme on a pu le voir plus tôt sur la photo, le boitier est constitué d’un écran LCD 2 lignes de 16 caractères piloté en parallèle 4 fils, d’un encodeur doté d’un bouton poussoir sur son axe, d’un gros interrupteur rouge DC/DCC en haut à gauche, de deux interrupteurs pour les fonctions en dessous, d’un bouton ’échap’ à droite de l’encodeur caché sur la photo et d’un bouton d’urgence générale en haut à droite.
Du côté électronique, un Nano R3, un LMD18200 pour alimenter la voie, un petit circuit de conversion 12V/5V pour alimenter l’Arduino, et un MAX471 pour mesurer la consommation de courant. Sur le dessus, une DEL à droite pour l’alimentation, et deux DELs à gauche pour visualiser l’alimentation de la voie : une DEL allumée, on est en analogique et selon celle qui est allumée on visualise le sens de circulation, deux DELs allumées on est en DCC.

Figure 3
Figure 3

Voici le schéma de ce décodeur. Tous les choix peuvent être remis en cause, mais avec ces éléments là, ça marche !
Au centre bien sûr, le Nano R3 qui peut être remplacé par un Uno, mais dans ce cas il faudra trouver une solution pour brancher le MAX471 ailleurs que sur la broche A6 qui comme l’A7 est inexistante sur un Uno. On voit que presque toutes les broches d’entrée-sortie sont utilisées. Restent seulement les 9, 13 et A7 de disponibles.
Sous le R3, j’ai représenté le connecteur qui relie l’Arduino au reste du matériel. De l’autre côté de ce connecteur on va trouver les deux interrupteurs pour les fonctions F0 et F1, l’encodeur pour la vitesse avec son bouton poussoir ’Ok’ associé mais représenté séparément ici, un poussoir de plus pour ’échap’, puis un gros poussoir rouge pour l’arrêt d’urgence en réalité petit et noir sur mon prototype, et un gros interrupteur rouge également pour sélectionner le mode analogique ou numérique. Enfin l’écran Lcd avec son petit potentiomètre pour régler sa luminosité.
Au dessus du Nano, et sans passer par le connecteur central sur le schéma, alors que dans la réalité tout passe par lui (je n’ai pas voulu surcharger le croquis...), on va trouver la prise d’alimentation principale qui va fournir à la fois le LMD18200 pour la voie, et le Nano via sa prise Vin. Toujours dans la réalité, pour éviter de trop demander au 7805 du Nano, j’ai préféré intercaler un petit convertisseur de tension réglable Chinois... Avant le pont en H est placé le circuit MAX471 qui peut ainsi mesurer le courant demandé par le LMD, et donc la voie. De ce circuit de mesure sort un fil vers la broche analogique A6. C’est elle qui permettra de savoir si une loco répond à une interrogation sur une de ses CVs ! La sortie ’Rs -’ du MAX471 rejoint ensuite le LMD18200.
Lui a son entrée PWM connectée à l’Arduino via la broche 11, et son entrée Dir sur la broche 10, le DCC_SIGNAL_PIN_MAIN qu’on a vu dans le code. Pour éviter tout démarrage intempestif de la loco à la mise sous tension avant même que l’Arduino ne soit alimenté, une résistance de 10k Ohms relie la broche PWM et la masse.
Enfin, comme expliqué plus haut, deux diodes permettent de visualiser la mise sous tension de la voie, placées tête bêches entre les fils de sortie du LMD18200. La diode témoin de mise sous tension de la centrale n’est pas représentée sur le schéma, mais ce n’est pas le plus compliqué à ajouter...

De quoi est capable cette centrale ?

Comme dit dès le départ, il s’agit d’une petite centrale de programmation, capable de ne piloter qu’une seule loco à la fois... A la mise sous tension l’état de l’interrupteur de choix DC/DCC fixe le mode d’alimentation de la voie. Il n’est pas possible de changer de mode sans redémarrer la centrale, c’est une petite protection... Une seconde protection est une demande de confirmation au lancement :

PNG - 1.7 kio

La voie ne sera pas alimentée tant que ’oui’ n’aura pas été répondu. Mon souci est de m’assurer que je ne suis pas en train de mettre une voie en DCC alors qu’une loco analogique se trouve dessus. Les moteurs analogiques n’aiment pas du tout les signaux hachés du DCC... La demande de confirmation est aussi faite en DCC, même si dans la plupart des cas (mais pas toujours, j’ai grillé un décodeur -économique il est vrai- à cause de ça...) les décodeurs acceptent de fonctionner en mode analogique.

Ensuite, on arrive dans le menu DDc principal qui n’a que deux choix : pilotage ou configuration.

Analogique / DC

En analogique, l’interface est très simple. La seule option de configuration permet de fixer la fréquence du PWM utilisée sur les rails. Selon les moteurs, des bruits peuvent se faire entendre sur certaines fréquences, en particulier les plus audibles, entre 200 et 20000 Hz.

PNG - 2.3 kio

Les fréquences disponibles sont de 30, 122, 244, 488, 976, 3906 et 31250 Hertz. Ces fréquences sont imposées par construction par le micro-contrôleur Atmega328 qui équipe les Nano et Uno.
Le pilotage se fait sur l’écran de pilotage avec le bouton encodeur principal pour régler la vitesse. Un appui sur son axe change de sens, et dans ce cas l’affichage passe de

PNG - 1.4 kio

à

PNG - 1.4 kio

. Les ’+’, ’-’ et le sens des ’<’ fixent la direction, le nombre de ’<’ ou ’>’ donne la vitesse. Au dessus de cette barre de vitesse sont rappelés le mode ’Dc’ à gauche, et la fréquence utilisée à droite.
En analogique, les fonctions DCC ne sont bien sûr pas activées, alors le bouton F0 est utilisé pour activer le ’mode lent’ qui change les bornes de la barre de progression à 0 / 50% au lieu de 0 / 100% en temps normal. Cela permet d’avoir plus de précision sur les basses vitesses en manœuvre. En haut à gauche, le texte ’Dc’ se transforme en ’Dc lent’.

PNG - 1.8 kio

Numérique / DCC

Le menu de configuration permet de fixer l’adresse de la locomotive présente sur le réseau, sachant que le programme va interroger le décodeur en entrant dans cette option.

PNG - 2.6 kio

La valeur proposée est donc la valeur actuelle. Une modification de cette valeur ne changera pas la configuration de la loco, elle permettra seulement de piloter une autre loco dont la CV ne serait pas lisible par la centrale...
On peut également fixer le nombre de pas (14 / 28 / 128), puis le numéro de l’adresse de fonction piloté par les interrupteurs F0 et F1.

PNG - 2 kio

Enfin, la dernière option permet de modifier les CVs de la loco présente sur les rails.

PNG - 2.9 kio

On choisi d’abord à gauche le numéro de la variable à configurer :

PNG - 2.7 kio

Lorsque ce numéro sera validé, DDc va interroger la loco présente sur les rails pour en récupérer la valeur actuelle, et l’afficher à droite. Les ’>’ et ’<’ passeront alors autour de cette valeur qui pourra être modifiée.

PNG - 3 kio

Enfin, lorsqu’elle sera validée, elle sera envoyée à la loco. Seul le bouton ’Echap’ permettra de terminer la saisie des CVs et de retourner au menu de configuration de DDc.
L’écran de pilotage reprend les informations importantes :

PNG - 1.6 kio

en haut à gauche le mode ’DCC’ suivi de l’adresse de la loco. A droite deux caractères ’.’ sont présents. Ils représentent les fonctions, et se changent en ’*’ lorsque la fonction correspondante est activée.
En bas, l’écran de pilotage reprend le fonctionnement de l’analogique avec ses ’-’/’+’ et ses ’>’/’<’ !

Bien sûr toutes les configurations DC et DCC sont stockées dans l’EEPROM du Nano.

La bibliothèque est disponible sur la Forge Locoduino.

Réaliser une centrale simple avec un Arduino devient de plus en plus facile. DcDccNanoController est une solution express forcément limitée, mais une autre solution beaucoup plus complète apparaîtra bientôt, basée sur le même matériel externe et les mêmes bases logicielles, mais sur un Arduino plus puissant. A suivre.

35 Messages

  • Bibliothèque DcDccNanoController 6 octobre 2017 14:12, par petitrain

    Bonjour,
    Ce sujet est passionnant, nous en parlions hier soir au club et l’idée a germée de faire une petite centrale pour les membres du club :

    • tester de nouveaux achats en DCC ou en analogique.
    • un bout de rail pour tester les décodeurs nouvellement installés...
    • etc...
      Pouvez vous nous dire ou trouver les ingrédient necessaires ?
      J’ai fait une recherche chez Banggood ou nous nous approvisionnons mais ils n’ont pas ces produits.
      Merci pour le temps passé à instruire les autres !!!

    Répondre

  • Bibliothèque DcDccNanoController 6 octobre 2017 14:25, par Thierry

    Bonjour

    Merci de l’intérêt porté à mon modeste travail... Je me fournis alternativement chez TME en Pologne, chez ICStation ou chez Electrodragon (port payant mais livraison plus rapide). Ces trois fournisseurs sont plus portés vers l’électronique que banggood qui vend aussi des sous-vètements et des produits de beauté ! Par contre, le LMD18200 ne se trouve plus sur ces sites... Le moins cher reste ebay ou aliexpress pour lui.

    Répondre

  • Bibliothèque DcDccNanoController 11 octobre 2017 19:57, par xavier

    Bonjour,
    Merci pour ce petit projet qui me permet de débuter dans le monde du numérique DCC.
    Tes explications sont claires et détaillés, on comprend tout de suite les principes et le fonctionnement.
    Parfait pour débuter ! :)

    Juste 3 remarques :

    • Par rapport au schéma de câblage, j’ai du ajouter +5V à l’encodeur sinon ça ne réagissait pas.
    • Il faudrait indiquer qu’il faut installer préalablement les bibliothèques DIO, Commanders, LcdUi.
    • Si je met la vitesse au maximum, la loco décélère et s’arrête comme ci je mettais en position 0. Si je met la vitesse au maxi-1, la loco accélère bien et avance à vitesse rapide.

    Quelques petites questions tout de même :
    Je me suis acheter mon 1er décodeur DCC : Lenz 10231-02
    J’arrive bien à faire avancer et reculer ma loco.
    Par contre j’ai également câblé des Leds rouge/blanche pour les feux avant/arrière mais elles ne réagissent pas à part un court flash au moment ou je pose ma loco sur les rails alimentés (donc j’en déduis que les Led ne sont pas grillées et sont bien cablées).
    Il y a t il quelque chose de spécial à programmer dans le décodeur ?

    Le décodeur est en réglage d’usine (adresse 0x03, etc...).

    Merci pour ton aide

    PS :
    Je m’émerveille devant le fonctionnement DCC :
    accélération et décélération douce en fonctionnement de base, ainsi que les nombreuses possibilités de programmation offertes en lisant le livret fournit avec :)

    PS2 :
    l’éditeur ne prend pas en compte les lignes vides pour créer des paragraphes.

    Répondre

  • Bibliothèque DcDccNanoController 11 octobre 2017 20:41, par Thierry

    Pour l’encodeur, je n’ai pas mis le 5V parce que je n’en ai pas eu besoin ! Utiliser les pullup de l’Arduino a suffit pour un fonctionnement correct.
    Les bibliothèques nécessaires sont bien spécifiées dans le petit chapitre ’Besoin de rien, envie de … quoi ?’ .
    Pour la vitesse, il y a peut-être un décalage qui donne une vitesse excessive, qui dépasse 255 et donc retombe à zéro ou à peine plus... Le mieux serait d’activer le mode debug pour voir les valeurs de vitesse envoyées à DCC++.
    Pour les fonctions, il y a un petit bug dans la centrale que je devrais corriger rapidement. Le paquet ’fonction’ n’est envoyé qu’une seule et unique fois, contrairement à celui de la vitesse répété à l’infini. Cela signifie que si une coupure de courant intervient, genre faux contact, le décodeur perd l’ordre d’allumer telle ou telle fonction, mais l’ordre de vitesse lui est à nouveau transmis. Je dois faire en sorte que ce paquet DCC de fonction soit lui aussi répété régulièrement.

    Répondre

  • Bibliothèque DcDccNanoController 12 octobre 2017 16:46, par xavier

    Bonjour,
    Merci pour ton retour.
    Autre point sur lequel je m’interroge :
    Ce que tu appelles fonctions F0 F1 sont en fait les noms des interrupteurs et cela n’a rien à voir avec les fonctions définis dans le décodeur DCC (F0 à F12) ?
    En fait si j’ai bien compris, on associe l’interrupteur "F0" à une adresse de registre du décodeur. Et ensuite on affecte une valeur à cette adresse de registre.
    Quand on active l’interrupteur, on active la valeur à l’adresse du registre.
    Est-ce bien cela ?

    Répondre

  • Bibliothèque DcDccNanoController 12 octobre 2017 16:59, par Thierry

    Oui c’est bien ça. On a deux interrupteurs à disposition, qui peuvent activer n’importe quelle fonction entre 0 et 28...

    Répondre

  • Bibliothèque DcDccNanoController 12 octobre 2017 18:23, par xavier

    Je viens de tester en décommentant #define DDC_DEBUG_MODE.
    Dans la console série, j’ai bien le démarrage qui s’affiche jusqu’à *** Setup Finished. Memory used = 668 bytes
    Après plus rien : ni en allant en Config dcc, ni dans Controler loco.
    Autre point :
    j’ai définit F0 = 0, CV 000 = 3
    quand j’appuie sur l’interrupteur F0, mes leds avant/arrière s’allument ensemble.
    Cependant ma doc du décodeur Lenz indique qu’il faut aller au registre 33 et 34 pour configurer les sorties de phares. Le registre 0 n’existe pas / n’est pas documenté.
    Je peux ouvrir un sujet sur le forum pour continuer à discuter de ce projet si tu préfères...

    Répondre

    • Bibliothèque DcDccNanoController 13 octobre 2017 19:38, par xavier

      j’ai trouvé mes réponses :

      • il faut décommenter #define DDC_DEBUG_MODE dans tous les fichiers où on le trouve.
      • lorsque l’on configure l’interrupteur "F0" = 0, on l’associe à la fonction F0 du décodeur.
        Cela porte fortement à confusion. Je pense qu’il serait préférable de nommer les interrupteurs autrement.

      Répondre

      • Bibliothèque DcDccNanoController 13 octobre 2017 21:31

        Les occurrences de #define DDC_DEBUG_MODE ne sont là que pour mes tests. J’ai juste oublié de les enlever, et ce sera fait pour la prochaine version. Le seul vraiment nécessaire est dans DcDccNanoController.h .
        Je ne vois pas trop la confusion possible... J’ai deux interrupteurs qui s’appellent buttonF0 et buttonF1, et par défaut ils activent respectivement la fonction 0 et la fonction 1. Il est possible de changer buttonF0 pour lui faire activer une autre fonction entre 0 et 28. C’est le nom buttonF0/buttonF1 qui dérange ?
        Et oui, il vaudrait mieux ouvrir un sujet DcDccNanoController sur le forum, la discussion serait plus à son aise et mieux partagée.

        Répondre

  • Bibliothèque DcDccNanoController 19 octobre 2017 14:22, par Gerard31

    Bonjour Thierry,

    Je regroupe l’ensemble des modules pour construire la centrale.
    Point d’interrogation.
    Le bouton arrêt d’urgence est-il à contact fugitif ou permanent ?

    Merci et amitiés

    Gérard

    Répondre

  • Bibliothèque DcDccNanoController 19 octobre 2017 15:20, par Thierry

    C’est comme le gros bouton rouge d’une machine outil, un poussoir. Donc plutôt fugitif. Mais on pourrait aussi envisager un interrupteur avec une position arrêt général et une autre marche...

    Répondre

  • Bibliothèque DcDccNanoController 20 octobre 2017 15:31, par petittrain

    Bonjour,
    Quand j’essaie de compiler le sketch arduino, après avoir installer toute les bibliothéques, l’IDE me renvoie un message d’erreur (apparement sur la bibliothèque Commanders) peut-être avez-vous une idée pour résoudre cette énigme !
    Merci d’avance ;
    Je vous joint le code d’erreur :

    Demo:22 : error : ’ButtonsCommanderSwitchOnePin’ does not name a type
    ButtonsCommanderSwitchOnePin buttonF0 ;
    Demo:23 : error : ’ButtonsCommanderSwitchOnePin’ does not name a type
    ButtonsCommanderSwitchOnePin buttonF1 ;
    /Applications/Arduino.app/Contents/Java/libraries/DcDccNanoController/examples/Demo/Demo.ino : In function ’void setup()’ :
    Demo:33 : error : ’buttonF0’ was not declared in this scope
    buttonF0.begin(EVENT_FUNCTION0, A1) ;
    Demo:34 : error : ’buttonF1’ was not declared in this scope
    buttonF1.begin(EVENT_FUNCTION1, A2) ;
    exit status 1
    ’ButtonsCommanderSwitchOnePin’ does not name a type

    Répondre

  • Bibliothèque DcDccNanoController 23 mars 2019 19:13, par dlal

    Bonjour,
    Parmi les projets presentes dans ce site la constructions de ce controleur est la plus importante au moins pour moi que le m’interesse aux lignes secondaires / voies metriques. Pour cette raison felicitations de ma parte.
    Dans cet article nano est alimente en intercalant un petit convertiseur de tension. Alternativement, on peut alimenter la carte arduino par la micro usb en utilisant un chargeur de smartphone 5v.Dans ce dernier cas, Je sais que cette question est assez banale, quelles modofications je dois appliquer sur les branchements proposes dans le schema ?
    Merci d’avance pour la reponse , et pour encore une fois bravo.
    Denis

    Répondre

  • Bibliothèque DcDccNanoController 25 mars 2019 09:27, par Thierry

    Bonjour, et merci...

    Sur mon schéma, il n’y a pas de convertisseur de tension, le Nano est directement alimenté par l’alim de la voie. Ce n’est pas forcément le mieux, et mieux vaut prévoir ce petit circuit pour éviter de faire chauffer le régulateur du Nano...
    Dans le cas de l’USB, je n’ai pas testé, mais je ferais comme ça :

    PNG - 92.3 kio

    Dites moi si ça marche...

    Répondre

  • Bibliothèque DcDccNanoController 25 mars 2019 18:19, par dlal

    Bonsoir Thierry,
    Merci pour le scema.J’ ai deja commence a realiser le projet , j ai fait tout, sauf la partie LMD18200 MAX 471 car je dois attendre ces composants qui sont disponible seulement de la Chine.
    Pour le tranfert du code j ai utilise l’ option ATM328p (old BOOTLOADER) sous Arduino, sinon ca ne marche pas.
    J’ ai donc alimente nano par la USB, selon ton conseil (pratiquement je n ai pas utilise la broche VIN) et j’ ai teste tous les boutons. Jusqu’a ce point tout fontionne comme prevu.
    Une chose que je ne comprends pas est pourquoi, dans le schema modifie, as tu elimine la liaison Gnd-> brake dans LMD 18200 ?

    Merci pour encore une fois.
    Denis

    Répondre

  • Bibliothèque DcDccNanoController 25 mars 2019 20:22, par Thierry

    C’est une erreur ! J’ai détruit l’alim 12v avant de la recréer, et au passage le bout de fil a sauté... Il faut bien sûr le mettre. Je répare l’image.

    Répondre

  • Bibliothèque DcDccNanoController 27 mars 2019 19:16, par dlal

    Bonsoir Thierry,
    Je peux t assurer que ça marche sans problème.
    Je ferai des essaies avec différentes décodeurs et je communiquerai les résultats.
    Mon plan est d utiliser ce contrôleur pour guider les loco dans mon réseau mettique et au le le temps utiliser un arduino plus dcc++ plus ordinateur pour programmation.

    Répondre

  • Bibliothèque DcDccNanoController 28 avril 2019 13:01, par dlal

    Bonjour a tous,
    Finalement le projet est fini.
    L’ arduino est branche a l ordinateur via USB, tandis que l’ LMD 18200 /MAX471 sont branche comme dans le schema et tout fonctionne comme prevu, ou au moins presque tout .
    Seulement au cas analogique l’inversion de la marche, n’ est pas possible.
    Denis

    Répondre

  • Bibliothèque DcDccNanoController 28 avril 2019 22:22, par msport

    Bravo !
    L’inversion de la marche est obtenue en appuyant sur le codeur ...

    Répondre

  • Bibliothèque DcDccNanoController 29 avril 2019 10:07

    Tout comme en Dcc, j’ajouterai... Mais on est pas à l’abri d’un nouveau problème, alors dites nous ce qu’il en est.

    Répondre

  • Bibliothèque DcDccNanoController 29 avril 2019 22:15, par msport

    Et l’inversion de la marche s’affiche néanmoins ?

    Répondre

    • Bibliothèque DcDccNanoController 30 avril 2019 18:51, par dlal

      Oui, l inversion s affiche mais ne fonctionne pas .
      Denis

      Répondre

      • Bibliothèque DcDccNanoController 30 avril 2019 19:10, par msport

        La loco tourne en DCC ? : les deux LED sont allumées ?
        A quelle fréquence êtes vous en DC ? Seule une LED s’allume ?

        Répondre

        • Bibliothèque DcDccNanoController 5 mai 2019 14:33, par dlal

          Bonsoir ’
          Je m excuse pour la réponse retardée,.
          Les deux del s allument au cas dcc.

          Dans le cas dc que seulement 1, intensité de la lumière dépend du voltage, si on fait inversion de la marche allume l autre del, tandis que le 1er
          Del devient éteint.

          Répondre

          • Bibliothèque DcDccNanoController 5 mai 2019 15:56, par msport

            Bonjour,

            puisque les deux LED s’allument l’une après l’autre en DC, le montage fonctionne bien. Ce qui veut dire que c’est après le LMD18200 et les LED qu’il y a un problème (câblage, accessoire ou locomotive ?). Si vous ne voyez pas quoi, déconnectez tout au delà des LED et mettez seulement deux fils, un rail et une locomotive. Vous pouvez tester avec une locomotive DCC, les décodeurs acceptent en général le courant continu. Êtes vous sur que votre locomotive DC fonctionne correctement ?

            Cordialement

            Répondre

  • Bibliothèque DcDccNanoController 20 novembre 2019 20:06, par msport

    Bonjour Thierry,
    le sketch demo.ino ne compile plus avec le version 1.8.10 de l’IDE mais à nouveau en réinstallant la 1.8.9.

    J’ai en erreur :

    Arduino : 1.8.10 (Windows 10), Carte : "Arduino Nano, ATmega328P"

    C :\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C :\Program Files (x86)\Arduino\hardware -hardware C :\Users\Michel\AppData\Local\Arduino15\packages -hardware C :\Users\Michel\Documents\Arduino\hardware -tools C :\Program Files (x86)\Arduino\tools-builder -tools C :\Program Files (x86)\Arduino\hardware\tools\avr -tools C :\Users\Michel\AppData\Local\Arduino15\packages -built-in-libraries C :\Program Files (x86)\Arduino\libraries -libraries C :\Users\Michel\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -vid-pid=1A86_7523 -ide-version=10810 -build-path C :\Users\Michel\AppData\Local\Temp\arduino_build_225782 -warnings=default -build-cache C :\Users\Michel\AppData\Local\Temp\arduino_cache_370711 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avr-gcc.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avrdude.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -verbose C :\Users\Michel\Documents\Arduino\Locoduino\Thierry\Demo\Demo.ino
    C :\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C :\Program Files (x86)\Arduino\hardware -hardware C :\Users\Michel\AppData\Local\Arduino15\packages -hardware C :\Users\Michel\Documents\Arduino\hardware -tools C :\Program Files (x86)\Arduino\tools-builder -tools C :\Program Files (x86)\Arduino\hardware\tools\avr -tools C :\Users\Michel\AppData\Local\Arduino15\packages -built-in-libraries C :\Program Files (x86)\Arduino\libraries -libraries C :\Users\Michel\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -vid-pid=1A86_7523 -ide-version=10810 -build-path C :\Users\Michel\AppData\Local\Temp\arduino_build_225782 -warnings=default -build-cache C :\Users\Michel\AppData\Local\Temp\arduino_cache_370711 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avr-gcc.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5 -prefs=runtime.tools.avrdude.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -verbose C :\Users\Michel\Documents\Arduino\Locoduino\Thierry\Demo\Demo.ino
    Using board ’nano’ from platform in folder : C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.1
    Using core ’arduino’ from platform in folder : C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.1
    Warning : Board attiny13:avr:attiny13a doesn’t define a ’build.board’ preference. Auto-set to : AVR_ATTINY13A
    Warning : Board attiny13:avr:attiny13f doesn’t define a ’build.board’ preference. Auto-set to : AVR_ATTINY13F
    Warning : Board attiny13:avr:attiny13c doesn’t define a ’build.board’ preference. Auto-set to : AVR_ATTINY13C
    Warning : Board attiny13:avr:attiny13d doesn’t define a ’build.board’ preference. Auto-set to : AVR_ATTINY13D
    Warning : Board attiny13:avr:attiny13e doesn’t define a ’build.board’ preference. Auto-set to : AVR_ATTINY13E
    Detecting libraries used...
    "C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC :\Users\Michel\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.1\cores\arduino" "-IC :\Users\Michel\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.1\variants\eightanaloginputs" "C :\Users\Michel\AppData\Local\Temp\arduino_build_225782\sketch\Demo.ino.cpp" -o nul
    Alternatives for French16.h : [DcDccNanoController@1.1.3 arduino_414409@1.1.4]
    ResolveLibrary(French16.h)
    -> candidates : [DcDccNanoController@1.1.3 arduino_414409@1.1.4]
    panic : runtime error : invalid memory address or nil pointer dereference
    [signal 0xc0000005 code=0x0 addr=0x0 pc=0x7855fb]

    goroutine 1 [running] :
    github.com/arduino/arduino-cli/legacy/builder.ResolveLibrary(0x11cc85a0, 0x11cfc157, 0xa, 0x11cfc157)
    /home/jenkins/workspace/arduino-builder-all-cross-cli-inception/src/github.com/arduino/arduino-cli/legacy/builder/resolve_library.go:64 +0x14b
    github.com/arduino/arduino-cli/legacy/builder.findIncludesUntilDone(0x11cc85a0, 0x11d2e580, 0x88ed00, 0x11c80d50, 0x11d22f80, 0x12008100, 0x0)
    /home/jenkins/workspace/arduino-builder-all-cross-cli-inception/src/github.com/arduino/arduino-cli/legacy/builder/container_find_includes.go:358 +0x3b6
    github.com/arduino/arduino-cli/legacy/builder.(*ContainerFindIncludes).Run(0xdebc68, 0x11cc85a0, 0xdebc68, 0x0)
    /home/jenkins/workspace/arduino-builder-all-cross-cli-inception/src/github.com/arduino/arduino-cli/legacy/builder/container_find_includes.go:152 +0x3e5
    github.com/arduino/arduino-cli/legacy/builder.runCommands(0x11cc85a0, 0x11c33e1c, 0x20, 0x20, 0x409a01, 0x3ff, 0x0)
    /home/jenkins/workspace/arduino-builder-all-cross-cli-inception/src/github.com/arduino/arduino-cli/legacy/builder/builder.go:210 +0xbd
    github.com/arduino/arduino-cli/legacy/builder.(*Builder).Run(0x11c63f40, 0x11cc85a0, 0xdebbb4, 0x11c06cb0)
    /home/jenkins/workspace/arduino-builder-all-cross-cli-inception/src/github.com/arduino/arduino-cli/legacy/builder/builder.go:117 +0xb9c
    github.com/arduino/arduino-cli/legacy/builder.RunBuilder(...)
    /home/jenkins/workspace/arduino-builder-all-cross-cli-inception/src/github.com/arduino/arduino-cli/legacy/builder/builder.go:226
    main.main()
    /home/jenkins/workspace/arduino-builder-all-cross-cli-inception/src/github.com/arduino/arduino-builder/main.go:398 +0x6d2
    C :\Program Files (x86)\Arduino\arduino-builder a retourné 2
    Erreur de compilation pour la carte Arduino Nano

    Un conflit de bibliothèques ?

    Répondre

  • Bibliothèque DcDccNanoController 20 novembre 2019 21:05, par thierry

    Bonjour

    Je viens d’essayer, je n’ai pas de problème particulier, tout se compile parfaitement. Tout ce que je peux conseiller au vu de l’erreur (panic : runtime error : invalid memory address or nil pointer dereference) c’est de fermer l’IDE, puis le système, de redémarrer, de mettre à jour les bibliothèques (en particulier DcDccNanopConteoller passée en 1.1.4) et de retenter la compilation. Ce genre d’erreur vient sans doute plus d’un problème interne de l’IDE, que du code du .ino ou d’une bibliothèque...

    Répondre

  • Bibliothèque DcDccNanoController 21 novembre 2019 22:07, par msport

    Bonsoir Thierry,
    fausse alerte,
    installation de l’IDE 1.8.10 sur un autre ordi W7, avec les bibliothèques du github et plus aucune anomalie. Je vais poursuivre sur mon W10.
    Désolé pour le dérangement.

    Répondre

  • Bibliothèque DcDccNanoController 22 novembre 2019 17:54, par msport

    Suite :
    toujours le même problème avec la 1.8.10 et W10
    Mes bibliothèques devaient déjà être à jour, mais j’ai vérifié.
    pour tester j’ai commenté la ligne
    //#include "French16.h"

    La compilation a eu lieu avec la punition méritée :
    ’DcDccStringTable’ was not declared in this scope
    mais permettant de lister les bibliothèques :

    Utilisation de la bibliothèque Commanders version 2.0.1 dans le dossier : C :\Users\Michel\Documents\Arduino\libraries\Commanders
    Utilisation de la bibliothèque DIO2 version 1.5.1 dans le dossier : C :\Users\Michel\Documents\Arduino\libraries\DIO2
    Utilisation de la bibliothèque DcDccNanoController version 1.1.3 dans le dossier : C :\Users\Michel\Documents\Arduino\libraries\DcDccNanoController
    Utilisation de la bibliothèque LcdUi version 1.0.3 dans le dossier : C :\Users\Michel\Documents\Arduino\libraries\LcdUi
    Utilisation de la bibliothèque LiquidCrystal version 1.0.7 dans le dossier : C :\Users\Michel\Documents\Arduino\libraries\LiquidCrystal
    Utilisation de la bibliothèque EEPROM version 2.0 dans le dossier : C :\Users\Michel\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.1\libraries\EEPROM
    exit status 1
    ’DcDccStringTable’ was not declared in this scope

    Est-ce la même pour LiquidCrystal (Adafruit), j’ai déjà eu des problèmes de compatibilité.

    Répondre

  • Bibliothèque DcDccNanoController 20 janvier 2020 23:02, par msport

    Bonsoir Thierry,
    est-ce cette petite centrale déjà très versatile pourrait également recevoir des commandes DCC++ sur son port série. J’ai fait un test sans résultat, je suppose qu’il faudrait compléter le sketch si c’est envisageable.
    Encore merci.
    Cordialement

    Répondre

  • Bibliothèque DcDccNanoController 21 janvier 2020 09:27, par thierry

    Bonjour

    Comme je l’ai expliqué dans l’article, la version de DCC++ utilisée dans cette bibliothèque a été expurgée de tout ce qui n’était pas immédiatement nécessaire pour pouvoir tenir dans un Nano avec ses collègues LcdUi et Commanders. La partie texte a fait partie de la charrette, elle consommait beaucoup de mémoire et n’avait pas d’intérêt ici. Donc non, ce n’est pas possible.

    Répondre

    • Bibliothèque DcDccNanoController 9 octobre 2021 21:56, par msport

      Bonjour Thierry,
      dans LcdUi la possibilité d’utiliser un OLED Nokia 5110 est indiquée en faisant appel à la bibliothèque Adafruit_PCD8544
      l’exemple de cette bibliothèque, pcdtest.ino propose la déclaration :
      Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3) ;
      que j’ai transposée en
      Adafruit_PCD8544 led = Adafruit_PCD8544(7, 6, 5, 4, 3) ;

      Mais en compilant demo.ino, j’ai les erreurs :
      Demo:39:44 : error : no matching function for call to ’ScreenLiquid::begin(int, int, const char* const [23], Adafruit_PCD8544*)’
      screen.begin(16, 2, DcDccStringTable, &lcd) ;

      In file included from C :\Users\miche\AppData\Local\Temp\arduino_modified_sketch_456066\Demo.ino:16:0 :
      C :\Users\miche\Documents\Arduino\libraries\LcdUi\src/ScreenLiquid.hpp:40:7 : note : candidate : void ScreenLiquid::begin(byte, byte, const char* const*, LiquidCrystal*)
      void begin(byte inSizeX, byte inSizeY, PGM_P const *inpStringTable, LiquidCrystal *inpLcd)

      Il faut certainement faire autrement référence pour led.

      Merci pour toute indication.

      Répondre

Réagissez à « Bibliothèque DcDccNanoController »

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

Rubrique « Bibliothèques »

Les derniers articles

Les articles les plus lus