LOCODUINO

Bibliothèque Accessories (2)

Que mettre dans son croquis ?

. Par : Thierry

Cas d’école Prenons un cas simple, la gestion d’une simple DEL via un bouton poussoir et comparons diverses possibilités de codage. D’abord la version classique sans bibliothèques : // Programme 1 const int buttonPin = 2; // broche du poussoir void setup() // initialise la DEL interne de l'Arduino comme sortie (…)

Retourner à l'article

Vous répondez à :

ShiftRegister 74HC595 Arduino Library 24 avril 2023 21:36, par cy83

Bonsoir Msport...

Merci pour votre message et réponse rapide ce matin.
Je me faisais une joie de tester cette nouvelle librairie mais j’ai à nouveau des messages d’erreur. Je pensais qu’il fallait seulement rechercher les libriairies manquantes sur internet, mais ca n’a pas l’air d’être le cas !!!

Je suis sincèrement désolé de solliciter les gens pour si peu. J’essaye de lire le forum en détail mais beaucoup de choses m’échappent...

Voici mon message d’erreur :
In file included from c :\Users\Cyril\Documents\Arduino\libraries\Accessories\src/Accessories.h:605:0,
from C :\Users\Cyril\Documents\MES PROJETS\TRAIN_MINIATURE\Locoduino\Accessories\examples\Locoduino.org\Programme4\Programme4.ino:2 :
c :\Users\Cyril\Documents\Arduino\libraries\Accessories\src/PortExpanderMCP23017.hpp:10:10 : fatal error : Adafruit_MCP23017.h : No such file or directory
#include "Adafruit_MCP23017.h" // Include MCP23017 library

J’ai donc essayé de télécharger la librairie Adafruit_MCP23017.h en vain !!!

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

36 Messages

  • Bibliothèque Accessories (2) 18 décembre 2016 09:05, par Cédric

    Bravo pour ce développement qui représente probablement quelques centaines d’heures de boulot.

    Maintenant il y a tout de même une certaine complexité (probablement nécessaire) qui risque de rendre ce développement difficile à généraliser. Je vous propose non pas de critique mais des suggestions si vous le voulez bien :
    Dans l’exemple, le mélange avec le dcc porte un coup fatal je trouve, même si c’est une possibilité offerte qu’il n’est pas du tout nécessaire d’utiliser.
    On devrait pouvoir encore simplifier en liant les accessoires aux ports directement depuis leur classe peut-être en typant.
    Vous avez créé des classes techniques totalement polyvalentes on pourrait intégrer une nouvelle déclinaison de vos classes pour cette fois mettre du fonctionnel ce qui simplifierait grandement.
    Les cas d’usage sont assez connus dans le milieu du modélisme et pourquoi ne pas faire une bibliothèque métier avec des classes aiguillage (plusieurs types), PN, grande roue, téléphérique, feu de signalisation, Incendie, détection canton, lampadaire, etc. En faisant ça, le code sera très facilement généralisable ainsi que les arduino. Les "pro" pourront toujours créer leur propre type.
    Ce n’est qu’une suggestion et je le répète, je ne critique surtout pas ce travail extraordinaire.

    Répondre

    • Bibliothèque Accessories (2) 19 décembre 2016 17:43, par Thierry

      Bonjour, et merci pour vos remarques (que je ne prend pas pour des critiques :) ).

      Voyons point par point.
      La présence du DCC dans les exemples ne fait que souligner la possibilité de son usage, puis qu’aujourd’hui cette forme de pilotage de loco devient la norme. Mais c’est vrai que c’est tout à fait facultatif.
      Les typages forts dont vous parlez sont exactement l’inverse du but recherché : l’universalité. Comment dire à une DEL qu’elle utilise la broche gérée par un shield L293D et pas une simple broche directe sans typer fortement ce port ? Je veux bien croire que la déclaration supplémentaire que cela engendre créé de la complexité, par ailleurs réduite par rapport à UAD qui nécessitait un Driver en plus... Mais il me semble que c’est le prix à payer pour être ouvert à toutes les configurations possibles et sans doute pas encore imaginées.
      Dans le même ordre d’idées, typer fortement les applications possibles de la bibliothèque revient à faire une bibliothèque spécialisée, et donc limitée à ce qu’elle propose. Le but d’Accessories est précisément de fournir les outils de base pour inventer vos propres animations ! Par ailleurs, Locoduino a déjà des bibliothèques thématiques comme celles sur les animations lumineuses...

      Répondre

  • Bibliothèque Accessories (2) 15 février 2017 12:58, par Roland

    Je lis avec beaucoup d’intérêt ;)
    Avec mes aiguilles LGB, j’ai déjà trouvé le pont-H TB6612FNG pour les piloter...
    J’attend par ailleurs mes interfaces CAN qui viennent de Chine...
    Bref... il n’y a plus qu’à intégrer tout ça... sauf :
    je pensais utiliser les inverseurs d’aiguille (option LGB) pour valider la position...
    le cas échéant en cas de manoeuvre manuelle...
    pas vraiment un problème puisqu’il suffit de "lire" un inverseur...
    mais je pense à coordonner l’état (donc connu) de l’aiguille avec sa commande...
    Comment verriez-vous les choses ?

    Répondre

  • Bibliothèque Accessories (2) 15 février 2017 14:38, par Thierry

    Bonjour. Le problème est intéressant... Je n’ai effectivement pas prévu de remontée d’information, ou de mise à jour de l’état d’un accessoire suite à une intervention extérieure. Ajouter la fonctionnalité se ferait en deux étapes : une fonction de base permettant de mettre à jour l’état sans activation de l’accessoire, et un type d’événement dédié, traité par Accessories::ReceiveEvent(), qui permettrait de mettre à jour l’état depuis l’extérieur de la bibliothèque. Le tout est assez simple à coder. A voir dans un moment creux, sauf si c’est urgent !

    Répondre

  • Bibliothèque Accessories (2) 15 février 2017 20:41, par Thierry

    Après réflexion, j’ai poussé sur la forge une nouvelle version 0.60 d’Accessories qui ajoute une fonction ExternalMove() à tous les moteurs. Il s’agit de forcer l’état courant du moteur à RIGHT ou LEFT. La partie électrique n’est pas sollicitée. Seul l’état interne d’Accessories change. D’autre part un nouvel événement ACCESSORIES_EVENT_EXTERNALMOVE peut être envoyé à Accessories::ReceiveEvent() avec dans l’argument ’data’, la nouvelle valeur de l’état.
    Dites moi si cela répond au problème posé.

    Répondre

    • Bibliothèque Accessories (2) 17 février 2017 18:23, par Roland

      Je n’ai pas encore analysé les mécanismes de manière approfondie...
      L’idée est d’avoir un retour fiable quant à la position effective de l’aiguille et de déclencher toute action nécessaire : informer, verrouiller...

      Répondre

  • Bibliothèque Accessories (2) 17 février 2017 20:09, par pat95

    Bonjour,j’ai réalisé avec l’aide du projet "Réalisation de centrales DCC avec le logiciel libre DCC++ en HTML" avec succès et c’est super. Maintenant je dois réaliser les commandes des appareils de mon réseau avec les bibliothèques "Accessories et "Commanders" et là j’ai une question : je teste le programme 4 des exemples et ça fonctionne mais je souhaite faire les commandes par l’intermédiaire de la console de l’IDE en Serial. Est-ce possible et comment ? j’ai bien essayé de gérer avec les événements mais sans succès... Merci.

    Répondre

    • Bibliothèque Accessories (2) 18 février 2017 10:51, par Thierry

      Oui c’est possible. Commanders a un exemple tout prêt pour ça, c’est SerialCommander. La syntaxe à envoyer sur la ligne série, que ce soit par l’IDE ou un programme, est simple et décrite dans le code source de TextInterpreter.hpp :

      // The accepted syntax is
      // id separator event separator data
      // where id can be a number from 0 to 4 000 000 000,
      // where separator can be ’,’ , ’ ;’ , ’/’ or ’ ’
      // where event can be any string of 9 characters long maximum, but must begin with
      // ’t’ to toggle
      // ’m’ to make a move, data is necessary a COMMANDERS_MOVE_TYPE enum value in this case
      // ’p’ to make a move to a given position, data is necessary in this case
      // ’c’ to change configuration, data is necessary in this case : high byte is the address, low byte the value.
      // and where the data can be a COMMANDERS_MOVE_TYPE enum value if this is a MOVE event,
      // or any number between -32767 and 32768 for a move position event.
      //
      // id can be dccid:dccacc for Dcc id, where dccid is the dcc address and dccacc 0 or 1.
      //
      // ex : 123 means ID 123 toggled
      // ex : 456 | T means ID 456 toggled
      // ex : 789 , p , 100 means ID 789 make an absolute movement to 100 .
      // ex : 20:0 T means Dcc id 20/0 toggled

      Si Accessories est ’branché’ derrière pour recevoir les événements, alors elle exécutera les ordres !

      Répondre

      • Bibliothèque Accessories (2) 18 février 2017 13:54, par pat95

        Merci, je comprenais bien le paragraphe "liaison série exploitation" de commanders mais je n’avais pas intégré les principales lignes de l’exemple de SerialCommander dans mon programme. Maintenant tout fonctionne à merveille je peux saisir mes commandes dans la console IDE et l’appareil exécute. Merci.

        Répondre

  • Event sur HIGH et LOW 23 février 2017 22:11, par Benoit

    Bonjour, Merci beaucoup pour tout ce travail.
    Est-il possible d’avoir des événements sur les changements d’état HIGH vers LOW ?
    En effet, je cherche à gérer ma détection de présence de train par conso de courant.
    Je le gère comme un bouton push. Si détection de courant, passage en état HIGH, génération de l’événement, cela coupe le relais en utilisant un accessoire type light. Mais comment le désactiver s’il n’y a pas d’événement au passage à l’état LOW ?
    Pour un aiguillage, cela permettrait aussi d’économiser une broche l’état LOW représentant un sens, l’état HIGH un autre sens.
    Merci de votre aide

    Répondre

    • Event sur HIGH et LOW 1er mars 2017 12:54, par Benoit

      Bonjour,
      Pour affiner ma remarque, sur les boutons de type switch, il serait intéressant de gérer un événement de passage de HIGH vers LOW. Pour les boutons de type push, ce n’est effectivement pas utile.
      Cdt

      Répondre

  • Bibliothèque Accessories (2) 1er mars 2017 16:47

    Bonjour, et pardon pour le délai.
    Si je comprends bien, il s’agit de savoir quand le switch quitte un état avant d’en atteindre un autre ?

    Répondre

    • Bibliothèque Accessories (2) 1er mars 2017 19:23, par Benoit

      Bonsoir,
      oui, exactement. Si j’ai bien compris le fonctionnement actuel, l’événement est produit uniquement lors du passage de l’état low vers l’état high. Mon idée est de retrouver les changements d’état de la librairie Bounce2 (rose() et fell()).
      Dans le cas d’un aiguillage à 2 positions, cela permettrait de gérer les 2 positions avec une seule broche.
      Dans le cas d’un détecteur d’occupation de voie (que je traiterai comme un switch), cela permet de d’avoir l’événement au moment où le canton est occupé (passage du low vers high dans mon cas) et quand il est libéré, passage du high vers low.

      Répondre

  • Bibliothèque Accessories (2) 30 août 2018 19:49, par Pierre

    Bonjour,

    J’essaie d’utiliser cette bibliothèque pour commander tout simplement mes aiguillages avec des servos moteurs.

    J’ai déjà réalisé un de vos exemples avec un bouton poussoir et ça marche, mais pour remplacer le bouton poussoir par du DCC, là je cale...

    J’ai bien réalisé l’interface avec l’opto-coupleur, et branché sur la broche 3(interruption) de l’Arduino Nano.

    J’ai beaucoup de mal à comprendre où l’on doit mettre dans le programme le n° de l’accessoire ( aiguillage manoeuvré par servo dans mon cas ).

    Exemple : sur mon Intellibox1, si j’appui sur un bouton commandant un aiguillage, à quel endroit du code est-ce que je doit insérer le N° de l’accessoire ?

    Et sous quelle forme ? 1 pour le bouton 1, 2 pour le bouton 2, ou y a t-il un codage particulier à chaque centrale ?

    Cordialement

    Répondre

  • Bibliothèque Accessories (2) 30 août 2018 20:41, par Thierry

    Attention, je pense qu’il y a confusion entre Accessories dont le rôle est de piloter des accessoires, et Commanders qui s’occupe de recevoir les ordres, par des boutons, un bus CAN ou DCC.

    Il y a deux sources importantes d’information :

    1 : la documentation incluse dans toutes mes bibliothèques et que l’on peut consulter en double cliquant sur le fichier extras/Doc/index.html de Arduino/Libraries/Accessories, ou en lançant le fichier StartDoc.bat du même répertoire sous Windows. Elle est en Anglais, mais je pense qu’elle reste compréhensible par le plus grand nombre. Idem pour Commanders, évidemment.

    2 : les exemples. Dans ce cas précis, l’exemple Accessories/examples/Servos est le plus proche de votre besoin. Le numéro 20, celui associé à l’action est bien l’adresse DCC de l’accessoire. Le mieux est de lire la documentation de la classe DccCommanderClass dans Commanders.

    Répondre

    • Bibliothèque Accessories (2) 30 août 2018 22:18, par Pierre

      Bonsoir,

      Evidemment, j’ai confondu Accessories et Commander, mais le sujet est si vaste que l’on se perd facilement.

      Je vais relire tout ça, merci encore de votre super travail.
      .
      Cordialement

      Répondre

      • Bibliothèque Accessories (2) 31 août 2018 19:14

        Bonsoir,

        Je crois avoir trouvé, dans ’Commanders.h’, j’ai commenté la ligne :

        • #define NO_DCCCOMMANDER

        //#define NO_BUTTONSCOMMANDERPUSH
        //#define NO_BUTTONSCOMMANDERANALOGPUSHES
        //#define NO_BUTTONSCOMMANDERSWITCH
        //#define NO_BUTTONSCOMMANDERPOTENTIOMETER
        #define NO_CANCOMMANDER
        //#define NO_DCCCOMMANDER
        #define NO_I2CCOMMANDER
        //#define NO_SERIALCOMMANDER
        //#define NO_EVENTSSEQUENCER

        Je pense que en commentant cette ligne, on évite la routine qui désactive dans le programme ce qui concerne le DCC

        Depuis, la compilation se fait, c’est bien ça ?

        Cordialement

        Répondre

    • Bibliothèque Accessories (2) 31 août 2018 12:25, par Pierre

      Bonjour,

      La compilation de l’exemple Servo, me renvoie systématiquement le message :

      "Dcc commander was not declared in this scope’, ainsi que tous les exemples incluant cette ligne.

      Il me semble pourtant avoir décompacter toutes les bibliothèques, une idée ???

      Cordialement

      Répondre

      • Bibliothèque Accessories (2) 1er septembre 2018 22:28, par Thierry

        Oui, c’est bien ça. Si on compilait tout, la mémoire serait fortement impactée sans réelle utilité. Donc presque tout est désactivé par défaut, il faut activer le nécessaire, et juste ça, dans Commanders.h.

        Répondre

  • Bibliothèque Accessories (2) 11 septembre 2018 11:10, par pat95

    Bonjour,
    J’ai posté un message à Thierry qui n’est plus nécessaire mille excuses.
    J’avais réussi à faire fonctionner le programme 4 de locoduino et après un plantage ordinateur j’ai été obligé de réinstaller l’IDE arduino, la bibliothèque et évidemment le programme 4 ne fonctionnait plus pourquoi ?
    Pour les débutants comme moi ne pas oublier de vérifier les modifs que l’on a fait dans les bibliothèques Commanders et Accessories surtout les "//NO..." vous gagnerez du temps et moins d’énervement. Puis recompléter la librairie d’Aduino qui évidemment des éléments avaient disparu.
    Thierry ne tient pas compte de mon dernier message tout fonctionne.
    Cordialement.

    Répondre

  • Bibliothèque Accessories (2) 11 septembre 2018 11:58

    Ok, c’est noté. Cela dit, je suis conscient du problème posé par la modification de fichiers livrés avec la bibliothèque. Le .h doit de plus être adapté à chaque changement de projet à compiler... Et je suis sans doute le plus impacté puisque pour mes tests je passe mon temps changer de projet, et donc à modifier ce .h ...
    Bref je suis preneur de toute solution alternative permettant de changer le comportement d’une bibliothèque pour un projet précis...

    Répondre

  • Bibliothèque Accessories (2) 2 novembre 2019 16:58, par David

    Bonjour à tous
    Je lis le sujet avec beaucoup d’intérêt et j’essaie de reproduire les différents exemples donnés.

    Mon problème va sans doute vous paraître bête mais je ne parviens pas à faire fonctionner le programme2
    J’ai chargé la librairie, le televersement se fait sans problème et pourtant ma Led ne s’allume pas.
    J’ai également essayé avec les librairies présentes dans le dossier Hystory mais rien n’y fait.

    J’utilise une carte uno (une version non officielle)
    Peut être que le problème viens de là ??
    Si quelqu’un peu éclairer ma lanterne
    Cordialement

    Répondre

  • Bibliothèque Accessories (2) 3 novembre 2019 12:14, par David

    Bonjour a tous

    Je reviens vers vous pour présenter mes excuses pour mon précédent post
    Je me suis rendu compte de mon erreur (vraiment très bête effectivement !) mais cela fait partie de mon apprentissage
    Il semble que je me suis emmêlé les pinceaux entre Commanders et Accessories
    Tout fonctionne comme il faut , je poursuis donc mes investigations
    Un grand merci pour avoir crée ces librairies pleines de promesses en ce qui me concerne
    Très cordialement
    Ps : Peut être que mes 2 derniers messages peuvent être supprimer , histoire de ne pas polluer inutilement la page, merci d’avance

    Répondre

  • Bibliothèque Accessories (2) 4 novembre 2019 09:14

    Bonjour David

    Oui, l’apprentissage passe par des erreurs, Rome ne s’est pas faite en un jour... Bon courage !

    Répondre

  • Bibliothèque Accessories (2) 12 avril 2020 15:48, par Jerome

    Bonjour

    A la fin du programme 2, ne manque t il pas cette ligne :
    Accessories::loop() ; ?

    Le programme 2 ne fonctionnait pas du tout.
    Le programme 3 fonctionnait.
    En comparant le programme 2 avec tous les programmes suivants, je ne vois que cette différence.
    Pour autant, après cette modification, le programme 2 ne conserve pas la LED allumée quand le poussoir est relâché, comme cela se passe dans le 3. Est ce normal ?

    Répondre

  • Bibliothèque Accessories (2) 29 octobre 2021 19:42, par pat95

    Bonsoir à tous.
    Suite à changement de matériel j’en profite pour installer une version plus récente de IDE arduino vers 1.8.16 ainsi que les différentes bibliothèques que j’aie utilisées.
    Et là premier problème avec Accessories j’ai le message d’erreur suivant : #include "SparkFunSX1509.h" // Include SX1509 library. Qu’est-ce cette librairie qui ne m’était pas demandée auparavant ?
    Merci pour votre aide.

    Répondre

    • Bibliothèque Accessories (2) 29 octobre 2021 21:23, par msport

      Eh oui, les bibliothèques intègrent de nouveaux composants quand quelques uns ont besoin de les utiliser ...
      Google donne la réponse et si vous avez besoin de la bibliothèque :

      Voir en ligne : Github

      Répondre

      • Bibliothèque Accessories (2) 23 avril 2023 23:03, par cy83

        Bonjour à vous,

        je découvre LOCODUINO. J’ai réussi a faire marcher mon premier programme pour aiguillages solenoides avec UAD mais j’ai dru comprendre qu’il fallait maintenant utiliser Commanders et accesories.

        J’utilise donc le programme4 pour les aiguillages présents dans les exemples de ACCESSORIES

        L’IDE me dit qu’il manque les librairies Commanders.zip et DIO2.zip que j’ai trouvé dans le répertoire /extras de accesories.

        Par la suite, il me dit qu’il manque le programme #include "SparkFunSX1509.h" // Include SX1509 library que j’ai téléchargé sur le site de GuitHub comme mentionné par msport (29 octobre 2021)
        ==> SX1509_IO-Expander-master.zip

        Maintenant, il me dit qu’il manque le fichier ShiftRegister74HC595.h ?

        c :\Users\Cyril\Documents\Arduino\libraries\Accessories\src/PortExpander74HC595.h:9:10 : fatal error : ShiftRegister74HC595.h : No such file or directory
        #include "ShiftRegister74HC595.h"

        et du coup, je suis perdu !!! merci par avance
        cyril

        Répondre

        • ShiftRegister 74HC595 Arduino Library 24 avril 2023 10:20, par msport

          Ce doit être par là ...

          Voir en ligne : ShiftRegister 74HC595 Arduino Library

          Répondre

          • ShiftRegister 74HC595 Arduino Library 24 avril 2023 21:36, par cy83

            Bonsoir Msport...

            Merci pour votre message et réponse rapide ce matin.
            Je me faisais une joie de tester cette nouvelle librairie mais j’ai à nouveau des messages d’erreur. Je pensais qu’il fallait seulement rechercher les libriairies manquantes sur internet, mais ca n’a pas l’air d’être le cas !!!

            Je suis sincèrement désolé de solliciter les gens pour si peu. J’essaye de lire le forum en détail mais beaucoup de choses m’échappent...

            Voici mon message d’erreur :
            In file included from c :\Users\Cyril\Documents\Arduino\libraries\Accessories\src/Accessories.h:605:0,
            from C :\Users\Cyril\Documents\MES PROJETS\TRAIN_MINIATURE\Locoduino\Accessories\examples\Locoduino.org\Programme4\Programme4.ino:2 :
            c :\Users\Cyril\Documents\Arduino\libraries\Accessories\src/PortExpanderMCP23017.hpp:10:10 : fatal error : Adafruit_MCP23017.h : No such file or directory
            #include "Adafruit_MCP23017.h" // Include MCP23017 library

            J’ai donc essayé de télécharger la librairie Adafruit_MCP23017.h en vain !!!

            Répondre

            • ShiftRegister 74HC595 Arduino Library 24 avril 2023 21:56, par msport

              Télécharger la librairie Adafruit_MCP23017.h :
              ça coince où ?

              Voir en ligne : mizraith / mizraith_MCP23017

              Répondre

              • ShiftRegister 74HC595 Arduino Library 24 avril 2023 22:38, par cy83

                bonsoir,

                Merci pour votre aide.
                Je ne comprends pas pourquoi il n’y a pas un endroit où il y a l’ensemble des librairies nécessaires. Dés que je prends une librairie, j’ai l’impression que ce n’est pas la bonne ..
                JE crois que ce n’est pas fait pour moi pourtant ce n’est pas faute d’essayer de comprendre...
                et pourtant, je charge le programme de base "2 aiguillages" :-( !!!!

                C :\Users\Cyril\Documents\MES PROJETS\TRAIN_MINIATURE\Locoduino\Accessories\examples\Locoduino.org\Programme4\Programme4.ino : In function ’void setup()’ :
                C :\Users\Cyril\Documents\MES PROJETS\TRAIN_MINIATURE\Locoduino\Accessories\examples\Locoduino.org\Programme4\Programme4.ino:32:3 : error : ’DccCommander’ was not declared in this scope
                DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3), true) ;

                C :\Users\Cyril\Documents\MES PROJETS\TRAIN_MINIATURE\Locoduino\Accessories\examples\Locoduino.org\Programme4\Programme4.ino:32:3 : note : suggested alternative : ’Commander’
                DccCommander.begin(0x00, 0x00, digitalPinToInterrupt(3), true) ;

                Commander

                Répondre

  • Bibliothèque Accessories (2) 30 octobre 2021 09:58, par Thierry

    Cela dit, c’est tout à fait vrai que si j’ai bien prévu les exclusions correspondantes aux extenders dans Accessories.h :

    //#define NO_EXPANDER_SX1509
    //#define NO_EXPANDER_74HC595
    //#define NO_EXPANDER_PCA9505_06
    //#define NO_EXPANDER_MCP23017

    Ils ne sont pas utilisés comme il se doit. Je dois faire une nouvelle version de la bibliothèque pour corriger ça. En attendant, comme le dit msport, le bon workaround est de récupérer ces bibliothèques.

    Répondre

    • Bibliothèque Accessories (2) 30 octobre 2021 14:19, par pat95

      Merci pour vos réponses.
      He oui j’aurai dû m’en douter qu’il y aurait des "#define NO_" mais comme mes programmes fonctionnaient avant ma mise à jour je n’ai pas cherché.
      Maintenant ça fonctionne.

      Répondre

Rubrique Bibliothèques

Les derniers articles

Les articles les plus lus