Parlons Arduino > Bibliothèques

Bibliothèque Accessories et Expander SX1509

(1/3) > >>

golgoth1009:
Bonjour,
Pour mon réseau analogique, j'utilise un arduino mega avec la bibliothèque Accessories.
J'ai besoin d'ajouter un expander SX1509. Il faut donc apporter des modifications à Accessories pour pouvoir prendre en compte ce type d'expander.
Je voudrais avoir votre avis.
Je comptais rajouter une classe PortExpander qui gérerais les instances vers la bibliothèque fournit par SparkFun pour cet expander et qui permettrai aussi d'intégrer d'autres expanders.
Des modifications sont aussi nécessaires dans la classe Port rediriger vers l'expander si besoin.
Pour éviter de modifier toutes les classes héritant de Port, je comptais rajouter un beginExpander dansla classe Port à appeler avant le begin du port pour préciser si l'accessoire est connecté via l'expander.
Quand pensez-vous ?

Thierry:
Oui, c'est une bonne idée. Elle trottait déjà  dans ma tête depuis un certain temps.
Mon idée initiale était de changer le nommage des pins pour y inclure un numéro d'expandeur. Ainsi il y aurait une classe Expander, dérivée en ExpanderInput, ExpanderOutput et ExpanderPWM, ou avec seulement un type. Chaque expander aurait un numéro entre 1 et 99 (ça devrait suffire, sinon il faut pousser à un peu plus...) et au moment de déclarer un port avec une broche, fusionner le numéro d'expander et celui de sa broche. En gros au lieu de dire pushButton.begin(10) pour la broche 10, on dirait pushButton.begin(1208) pour la broche 8 de l'expander 12... La classe expander permettrait aussi de typer la communication avec lui selon son mode propre : un expandeur 74HC595 n'a pas le même mode de fonctionnement qu'un PCA9685 qui tourne en I²C . Il faudrait que chaque expander ait ses propres fonctions digitalRead et digitalWrite, analogRead/analogWrite et peut être aussi PWMWrite... Bref, c'est du boulot, mais c'est une proposition à creuser.

golgoth1009:
Bonjour,
Je vais essayer d'implémenter ces modifications durant ce mois et je posterai mes propositions.
J'hésite sur la numérotation (soit inclure l'expander dans la numérotation ou raoujter un flag précisant qu'il faut passer par la classe Expander).

Thierry:
L'avantage de cette méthode de 'multiplexage' des numéros c'est qu'il n'est pas besoin de modifier toutes les fonctions qui acceptent une broche, en tout cas pas l'interface de la fonction, et les vieux .ino des utilisateurs continuent de fonctionner sans changement. Ajouter un argument pour chaque broche, c'est tout changer... C'est vrai que l'on peut ajouter aussi des variantes de begin avec plus d'arguments. A toi de voir.
Extraire les valeurs, c'est facile : pin/100 donne le numéro de l'expander, pin%100 donne celui de la broche. Le port doit en interne stocker le numéro d'expander sur un octet à côté du numéro de broche. Ce numéro a besoin d'un entier vu qu'il peut contenir un GPIO_pin_t à cause de l'utilisation de la bibliothèque Dio2.

golgoth1009:
Bonjour Thierry,
J'ai avancé avec une première version fonctionnelle.
J'ai donc créé une classe PortExpander.
Cette classe est uniquement appelé depuis la classe Port.
Comme échangé ensemble, j'ai intégré le multiplexage. De cette façon, c'est entièrement transparent pour les sketchs n'utilisant pas d'expander.
Les sketchs utilisant des expanders ont uniquement besoin de rajouter dans le setup.

--- Code: ---  PortExpander::begin(1, SX1509_ADDRESS , EXPANDER_TYPE::SX1509_IO);

--- Fin du code ---
Pour le moment, j'ai uniquement intégré l'expander sx1509 avec la lib fournit par sparkfun.
Je t'ai mis en pièce jointe les fichiers.
Je n'ai pas intégré les #define pour activer ou non l'expander et les types d'expander, les commentaires pour la doc aussi.
Qu'en penses-tu?

Navigation

[0] Index des messages

[#] Page suivante

Utiliser la version classique