Parlons Arduino > Bibliothèques

Bibliothèque Accessories et Expander SX1509

<< < (3/3)

golgoth1009:
Bonjour Thierry,

Merci pour ces intégrations. J'aime beaucoup les macros pour encoder les pin et expanderid.
J'ai testé la bibliothèque sur un montage réel avec sx1509.
J'ai noté une régression sur le décodage de la pin.
Le bug est le suivant (dans port.cpp):
Si la pin est de type DIGITAL et n'est pas sur un expander, elle est codé pour GPIO (beginPin function).
Ce qui pose un souci dans MovePin, où au moment de son décodage, elle risque d'être interpréter pour un expander.
C'est pour cela que je propose le test suivant dans MovePin et les CheckPin:


--- Code: ---unsigned long expanderId = 0;
if (GPIO_to_Arduino_pin((GPIO_pin_t)inPin) == -1)
expanderId = EXPANDER_PORT_EXPID(inPin);
--- Fin du code ---

Je ne suis pas si cela suffit à supprimer tous les cas (si des conflits peuvent subsister entre l'encodage pour expander et GPIO).

En tout cas, j'ai testé cette modification sur la bibliothèque que tu as publiée, et tout marche parfaitement dans mon cas.

Thierry:
Oui je m'en suis aperçu, et j'ai implémenté une correction que je n'ai pas encore testé. Pour y arriver, j'ai utilisé un bit libre dans le statut d'un port pour désigner l'ensemble d'un port comme expander ou pas. Cela oblige toutes les pins utilisées par un port à être sur un expander ou pas. Du coup, certains ports deviennent incompatibles avec les expanders, comme le port dédié au shield l293d et d'autres... Je ne suis pas sûr de conserver cette correction qui limite un peu trop à mon gout l'usage des expanders.

J'aime bien ta correction, mais il y a une petite possibilité de tomber sur des valeurs identiques entre une broche expander et un Gpio_t ...

A creuser.

Thierry:
Voilà, une nouvelle version 1.2.1 a été poussée sur le Git et rendue disponible à la mise à jour dans l'IDE. En plus du test que tu as ajouté, j'ai mis une vérification au moment du begin() du port pour que l'on voit au plus tôt le problème. J'ai aussi ajouté au tout début, lors de la première loop(), une vérification que toutes les pins expander sont bien accessibles sans conflit avec les GPIO_pin_t.
Cela ne me satisfait pas complètement, j'aurais voulu éviter l'appel de GPIO_to_Arduino_pin() à chaque MovePin. Une fois devrait suffire, mais concrètement je ne vois pas comment sans stocker un bit quelque part, pour chaque pin !

Navigation

[0] Index des messages

[*] Page précédente

Utiliser la version classique