Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - golgoth1009

Pages: [1]
1
Bibliothèques / Re : Bibliothèque Accessories et Expander SX1509
« le: juillet 02, 2019, 09:49:17 pm »
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:

unsigned long expanderId = 0;
if (GPIO_to_Arduino_pin((GPIO_pin_t)inPin) == -1)
expanderId = EXPANDER_PORT_EXPID(inPin);

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.

2
Bibliothèques / Re : Bibliothèque Accessories et Expander SX1509
« le: février 23, 2019, 12:56:59 pm »
Bonjour,

Une version revisitée où j'ai retiré l'enum ExpanderType.
Il faut faire le begin en static directement sur la classe de l'expander voulue. Pour calquer au mieux à ce que tu fais pour les autres classes
De cette manière, l'ajout d'un nouveau type d'epxander ne devrait pas demander de modif à la classe de base ni à l'enum.
  int error = 0;
  error = PortExpanderSX1509::begin(1, SX1509_ADDRESS );
  if (error == 0)
    Serial.println(F("Expander issue"));

3
Bibliothèques / Re : Bibliothèque Accessories et Expander SX1509
« le: février 21, 2019, 11:00:26 pm »
Bonjour Thierry,

J'ai fait les modifications avec l'héritage.
J'ai découvert un bogue lié à la façon dont j'ai intégré l'expander.
Pour ne pas avoir d'impact dans les classes héritant de Port, je démultiplexe à chaque appel de la fonction MovePin().
Mais à la différence de la fonction beginPin(), le pin a pu être modifié si c'est un digital pour utiliser la valeur GPIO.
Pour corriger cela, j'ai ajouté un test supplémentaire dans MovePin():
unsigned long inExpander = 0;
if (GPIO_to_Arduino_pin((GPIO_pin_t)inPin) == -1)
inExpander = inPin / 100;
La question que je me pose:
Est-ce que la valeur multiplexée peut être en conflit avec le pin GPIO (ex: 103 ou 515 peut-il être une pin GPIO) ?
Si non, la correction est suffisante.
Si oui, il faut alors modifier les classes héritant de port pour sauvegarder l'expander id et le passer en paramètre de MovePin().
J'ai testé ma mdif sur arduino uno avec des appels à l'expander et aux I/O de la carte.



4
Bibliothèques / Re : Bibliothèque Accessories et Expander SX1509
« le: février 13, 2019, 10:30:50 am »
Merci !
Je peux faire l'héritage, effectivement, c'est plus logique et plus simple à l'avenir.
Normalement, dans la classe Port, cela devrait être transparent, elle appelle déjà les fonctions génériques statiques digitalWrite et analog de la classe Expander.
Par contre, je sèche pour l'émulateur qui redéfinit les méthodes digital et analog.
Je regarde ça ce weekend.

5
Bibliothèques / Re : Bibliothèque Accessories et Expander SX1509
« le: février 10, 2019, 09:59:02 am »
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.
  PortExpander::begin(1, SX1509_ADDRESS , EXPANDER_TYPE::SX1509_IO);
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?

6
Bibliothèques / Re : Bibliothèque Accessories et Expander SX1509
« le: janvier 12, 2019, 10:33:31 am »
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).

7
Bibliothèques / Bibliothèque Accessories et Expander SX1509
« le: janvier 10, 2019, 01:25:52 pm »
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 ?

8
Pour le fading, j'ai un peu détourné le principe, j'ai mis un pas de 255 et un temps de 500ms,
ça m'a permis de faire un délai d'activation entre l'allumage de ma led au vert et l'activation du canton (juste pour que le train démarre légèrement après le passage au vert)

9
Bonjour Thierry,
J'ai revu ma copie par rapport à ma première proposition pour avoir le fading et blinking cumulé (ici pour le case LIGHT_ON)
if (this->state == LIGHTOFF || (this->IsBlinking() && millis() - this->startingMillis > this->blinkingDelay - FADING_FULL_DELAY))
{
if (this->IsFading())
{
this->currentState = LIGHT_DESCENDING;
this->startingMillis = millis();
this->LightFadingRaw(this->pPort->GetSpeed());
return false;
}
else
{
if (this->IsBlinking())
this->startingMillis = millis();
this->currentState = LIGHT_OFF;
this->pPort->MoveStop();
}
}
Il y a un petit truc à améliorer dans le case Light_Ascending, dans le test une fois l'intensité max atteinte, il faut rajouté un "="
... if (curr >= this->pPort->GetSpeed() || curr <= 0) ...

Un dernier truc, pour le fading_delay, pourrais-tu le transformer en unsigned long au lieu de uint8_t ? (j'ai un cas ou je veux faire un fading très long)
Ton simulateur est vraiment super, j'ai pu tester mon programme (je réalise un circuit de 8 cantons, 3 aiguillages en analogique avec un arduino mega)



10
Bonsoir Thierry,
Je m'aperçois que ma proposition ne restaure le fonctionnement du blink uniquement si le fading n'est pas activé.
Si le fading est activé, le blink fonctionne mais dure le temps du fading (à cause du test isfading dans la condition).
Sur ce, bonne nuit !

 

11
ah oui pardon,
au niveau de la doc, tu indique que le SetDuration() dans Accessory.hpp est utilisé pour le temps du Blink.
Mais, en fait, AccessoryLight, le temps de blink ne peut plus être modifié après le begin().
Il faudrait soit surcharger SetDuration() au niveau de AccessoryLight pour aussi appeller SetBlinking() de AccessoryBaseLight() (et la doc devient ok ;-))
soir créer une méthode SetBlinking au niveau de AccessoryLight (ce que tu as fait pour AccessoryMultiLight).

12
J'ai juste dupliqué le simpleLed.ino et rajouté l'appel au blink. (en fait j'ai testé un midi au taf et je n'ai pas le test à la maison)
Ensuite dans le loop(), sans la modif, le changement d'état ne se fait pas.
Avec la modif, dans l'interface, on voit le changement d'état HIGH/LOW qui s'effectue périodiquement.

13
Bonsoir Thierry,
je l'ai modifié comme ci-dessous et testé grâce à l'émulateur que tu as fait (encore merci!)
case LIGHT_ON:
if (this->state == LIGHTOFF || this->IsBlinking())
{
if (this->IsFading() || (this->IsBlinking() && millis() - this->startingMillis > this->blinkingDelay - FADING_FULL_DELAY))
{
this->currentState = LIGHT_DESCENDING;
this->startingMillis = millis();
this->LightFadingRaw(this->pPort->GetSpeed());
return false;
}
else if (!this->IsBlinking())
{
this->currentState = LIGHT_OFF;
this->pPort->MoveStop();
}
}
break;
case LIGHT_OFF:
if (this->state == LIGHTON || this->IsBlinking())
{
if (this->IsFading() || (this->IsBlinking() && millis() - this->startingMillis > this->blinkingDelay - FADING_FULL_DELAY))
{
this->currentState = LIGHT_ASCENDING;
this->startingMillis = millis();
this->LightFadingRaw(0);
return false;
}
else if (!this->IsBlinking())
{
this->currentState = LIGHT_ON;
this->pPort->MoveLeftDir();
}
}
break;
Je pense que tu n'as pas besoin de mon aide pour fixer ça mais au cas où ;-)

14
Bonjour,
Déjà merci beaucoup pour cette librairie Accessory qui facilite grandement la gestion de mon réseau.
J'ai découvert une régression sur la bibliothèque >1.0 concernant la gestion du blink() dans BaseAccessoryLight::ActionEnded().
Sur les cases Light_On et Light_Off, il faut rajouter des tests sur les cas LIGHTBLINK pour rentrer dans le if et il faut aussi empêcher de changer le current_state si le temps n'est pas écoulé (rajouter un else if).
J'ai fait ces modifs et cela refonctionne.
Il est aussi intéressant de rajouter SetBLink(..) dans AccessoryLight (comme cela est fait dans AccessoryMultiLight).
Utiliser SetDuration ne fonctionne pas pour AccessoryLight (petite erreur dans la doc)


Pages: [1]