Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Effectuer une association entre deux tableaux


Sujet :

Arduino

  1. #241
    Membre expérimenté
    Bonjour Jay M

    Excellent,
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Stream* portSerie; // Stream permet de mettre un HardwareSerial ou SoftwareSerial
    je ne connaissait pas.

    Pour le reste, merci pour les remarques, mais j'ai bien spécifié que c'était une première mouture, ainsi le programme sera rendu plus "carré" lors du développement du dialogue bi-directionnel.

    A+
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  2. #242
    Membre expérimenté
    Citation Envoyé par jpbbricole Voir le message
    Excellent,
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Stream* portSerie; // Stream permet de mettre un HardwareSerial ou SoftwareSerial
    je ne connaissais pas.
    ça vient de la façon dont l'héritage entre classes fonctionne en C++

    L'environnement Arduino propose une classe Stream qui gère tout ce qui est flux de caractères/octets en général (vers un fichier, un port série etc) et la classe HardwareSerial hérite de Stream
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    class HardwareSerial : public Stream
    {
    ...


    De la même manière la classe SowftareSerial hérite aussi de Stream
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     class SoftwareSerial : public Stream
    {
      ...


    Donc une instance de HarwareSerial ou de SoftwareSerial sont toutes les deux issues d'une branche commune, ce sont des "spécialisations" de le classe Stream. On peut dire que Serial1 est un Stream avec un comportement spécifique. Idem pour un port émulé, la partie spécifique étant différente.

    La "beauté" de C++ c'est que le compilateur peut donc voir ces deux objets comme des Streams mais si on appelle des méthodes sur ces objets, il sait quand même exactement ce qu'ils sont et ce sont les bonnes méthodes qui sont appelées. ça permet donc d'avoir un code qui s'adapte aux spécialisations, sans pour autant avoir à traiter les instances différemment

  3. #243
    Membre régulier
    Pour info ...
    Bonjour à toutes et tous ...

    oyé, voyez ce que j'ai pu trouver sur un site ...

    https://create.arduino.cc/projecthub...arduino-6a6256

    si des fois ça donne des idées à quelqu'un(e)s !

    Bon WE pour tous au soleil pour la majeure partie d'entre nous !

    Jacques
    Être vieux, c'est être jeune depuis plus longtemps que les autres !

  4. #244
    Membre expérimenté
    Salut Jacques
    Citation Envoyé par Jsiorat Voir le message
    si des fois ça donne des idées à quelqu'un(e)s !
    Alors là!, je te "tire la manche" depuis le début de ce projet pour utiliser des extensions de ports, des MCP23017, avec ça tu pourrais gérer tout tes bp et tes aiguilles en utilisant 2 broches de ton Mega.
    Tu ne pourrai pas gérer tes LED du fait de la bibliothèque utilisée.
    Pour la commande de tes aiguilles, j'essayerai les relais SSR, il faut que je fasse l'essai avec 14V.

    Veux-tu utiliser des des extensions de ports? je te fais une version du programme avec, il n'y aurait plus qu'un Mega?
    Combien as-tu de led en PWM?

    PS:Encore un petit effort et tu passes en LED Neopixel. de ce type
    A+
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  5. #245
    Membre régulier
    Citation Envoyé par jpbbricole Voir le message


    Pour la commande de tes aiguilles, j'essayerai les relais SSR, il faut que je fasse l'essai avec 14V.

    Veux-tu utiliser des des extensions de ports? je te fais une version du programme avec, il n'y aurait plus qu'un Mega?
    Combien as-tu de led en PWM?

    PS:Encore un petit effort et tu passes en LED Neopixel. de ce type

    Bonjour JP,

    Je ne voulais pas te déranger aujourd'hui parce que tu m'as dit que tu étais occupé avec un autre programme ... désolé !
    Des LEDs, leur nombre n'est pas un souci : autant d'aiguillages X 2 (une LED droite, une gauche) plus une dizaine ! LEDs de diamètre 3 mm pour une question de place. Mon TCO est au format d'une feuille A4 ! Quant au NeoPixel, effectivement se serait intéressant, mais elle mesure près de 10 mm de diamètre. Très difficile à mette en place.

    Pour ce qui est des extensions, je dispose de 3 Nano, de 2 PCA96685 et d'une carte shield "Prototype Shield V.5" de chez Elegoo. je dispose aussi de 2 cartes 4 relays Shield Arduino (1 carte = 2 aiguillages !) pour Uno R3, et d'une dizaine de drivers ULN 2003a avec leur base.
    Mais si il faut encore du matériel différent, je ne suis pas contre. Avec AliExpress, c'est une question de temps de livraison

    Alors, je te laisse le choix d'écrire ce qui te semble le plus fiable, et surtout le plus simple pour toi, je pourrai ensuite "étudier" encore un peu plus.
    Tu m'avais parler d'un développement que tu as écrit qui concerne l'écran LCD TFT Kuman. Tu peux me donner des infos ?

    A+ au soleil !
    Jacques
    Être vieux, c'est être jeune depuis plus longtemps que les autres !

  6. #246
    Membre expérimenté
    Citation Envoyé par jpbbricole Voir le message
    Tu ne pourras pas gérer tes LED du fait de la bibliothèque utilisée.
    Quitte à rajouter du hardware pour minimiser le nombre d'Arduino et sans perdre la gradation sur les LEDs, regardez du côté des PCA9685 qui offrent 16 sorties PWM avec une résolution de 12 bits qu'on pilote en I2C.



    Les cartes que l'on trouve (souvent pour des servos) ont des résistances de 220 ohms en série avec toutes les broches PWM - ce qui donne un peu plus de 20mA (sous 5V, le max) par pin donc on obtient une brillance tout à fait correcte. (Une carte complète coûte un peu moins de 4€ en Asie).

    Vous n'auriez plus à utiliser la bibliothèque SoftPWM mais la bibliothèque Adafruit qui permet d'associer une valeur PWM pour une pin donnée (Pour faire le fade il faudrait faire un petit bout de code à appeler en début de loop() par exemple et qui vérifierait s'il y a un changement de PWM à effectuer)

  7. #247
    Membre expérimenté
    Bonjour Jacques
    Citation Envoyé par Jsiorat Voir le message
    Je ne voulais pas te déranger aujourd'hui parce que tu m'as dit que tu étais occupé avec un autre programme ... désolé !
    Pas de souci, j'ai terminé plus vite que prévu.

    Citation Envoyé par Jsiorat Voir le message
    Quant au NeoPixel, effectivement se serait intéressant, mais elle mesure près de 10 mm de diamètre.
    Oupssss, j'avais oublié ce problème de place. Pour ce qui est de la suggestion de @Jay M, d'utiliser des PCA9685, c'est une bonne solution, mais SoftPWM plus possible. L'ENORME avantage de la bibliothèque SoftPWM, c'est qu'elle s'occupe de faire l'allumage et l'extinction en dégradé toute seule, un ordre et hop c'est automatique. Comme tu as des Mega, pourquoi ne pas en utiliser un pour gérer tes LED (sous condition que la limitation citée par @Jay M dans le post #188 puisse âtre modifiée, je vais faire l'essai) ce "MegaLpwm" serait connecté par un port série au Mega principal.

    Citation Envoyé par Jsiorat Voir le message
    Pour ce qui est des extensions, je dispose de 3 Nano...,
    Le problème en suspens, c'est la commande des moteurs d'aiguilles. Ces moteurs sont en 14V AC, si je me souviens. Il y a le relais comme ceux que tu as, les relais SSR, comme je te proposais sou condition d'essai de ma part et dernière proposition, qui prendrait le moins de place, l'ULN2803 sous condition que ton moteur d'aiguille fonctionne q'avec iune alternance du 14V (j'avais des aiguilles Lima en AC qui fonctionnaient très bien avec une diode en série) dans quel cas il faudrait mettre une diode en série dans l'alimentation pour éliminer l'alternance négative.

    Citation Envoyé par Jsiorat Voir le message
    Alors, je te laisse le choix d'écrire ce qui te semble le plus fiable, et surtout le plus simple pour toi, je pourrai ensuite "étudier" encore un peu plus.
    Je ne veux pas t'imposer mes choix, mais faire quelque chose où tu soit le plus à l'aise. Mais la solution câblée "en direct" de toutes ces LED, moteurs d'aiguilles et boutons avec plusieurs Mega va fonctionner, mais on arrivera vite à saturation, surtout que va arriver, en suivant, le gestion des tronçons (je ne sais plus le nom). Je te propose de faire l'essai de "transfert" des bp sur MCP23017, puis si ça fonctionne, les moteurs d'aiguilles. Ce sera, déjà, un bon bout de fait.

    Citation Envoyé par Jsiorat Voir le message
    Tu m'avais parler d'un développement que tu as écrit qui concerne l'écran LCD TFT Kuman...
    Je n'ai pas souvenir, je ne connais pas la bête. J'ai essayé un écran de ce genre (résistif), bof et 3.5"" c'est petit et les gros c'est chère.
    J'ai fait quelques essais avec une feuille Excel avec le dessin de ton circuit en fond, c'est très intéressant!


    Les essais promis, moteur d'aiguille sur SSR ou ULN2803, l'augmentation de la limitation SoftPWM à 20 led, se feront dans le courant de la semaine

    A+
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  8. #248
    Membre régulier
    Citation Envoyé par Jay M Voir le message
    Quitte à rajouter du hardware pour minimiser le nombre d'Arduino et sans perdre la gradation sur les LEDs, regardez du côté des PCA9685 qui offrent 16 sorties PWM avec une résolution de 12 bits qu'on pilote en I2C.

    Bonjour JAY,

    j'ai exactement le même modèle mais avec le n° PCA96685 , 16 x 12 bit PWM, I2C Open=0, Closed=1 ; Elles sont différentes au point de vue électronique ?
    Être vieux, c'est être jeune depuis plus longtemps que les autres !

  9. #249
    Membre régulier
    JP,
    l'ULN2803 sous condition que ton moteur d'aiguille fonctionne q'avec iune alternance du 14V
    Y a trois câbles ! noir, vert et rouge ; 16V~ ==> donc relais obligatoire


    A+
    Être vieux, c'est être jeune depuis plus longtemps que les autres !

  10. #250
    Membre expérimenté
    Bonsoir Jacques
    Citation Envoyé par Jsiorat Voir le message
    Y a trois câbles ! noir, vert et rouge ; 16V~ ==> donc relais obligatoire
    Ou SSR ou ULN2803, je vais essayer.

    A+
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  11. #251
    Membre expérimenté
    Citation Envoyé par Jsiorat Voir le message
    j'ai exactement le même modèle mais avec le n° PCA96685 , 16 x 12 bit PWM, I2C Open=0, Closed=1 ; Elles sont différentes au point de vue électronique ?
    Salut - vous devez avoir un clone chinois simplement, ça doit être la même chose.

  12. #252
    Membre expérimenté
    Citation Envoyé par jpbbricole Voir le message
    L'ENORME avantage de la bibliothèque SoftPWM, c'est qu'elle s'occupe de faire l'allumage et l'extinction en dégradé toute seule, un ordre et hop c'est automatique
    Oui tout à fait et ça rend très bien j'en suis sûr.

    et c'est aussi son inconvénient. la magie prend 20 à 30% du temps de l'arduino, passé dans une interruption (donc non interruptible).

    // We can tweak the number of PWM period by changing the prescalar
    // and the OCR - we'll default to ck/8 (CS21 set) and OCR=128.
    // This gives 1024 cycles between interrupts. And the ISR consumes ~200 cycles, so
    // we are looking at about 20 - 30% of CPU time spent in the ISR.

    // At these settings on a 16 MHz part, we will get a PWM period of
    // approximately 60Hz (~16ms).
    Rajouter des LEDs ça va rajouter du temps passé dans l'interruption ce qui va se faire aux dépends d'autres tâches qui nécessitent des interruptions, comme le port série ou l'I2C.

    Je ne sais pas si l'auteur de SoftPWM avait limité à 20 par souci de place mémoire (il alloue 20 entrées de 8 octets chacune dans un tableau donc 160 octets de RAM) ou si ensuite le système devenait trop "instable".

    Changer le #define sur SOFTPWM_MAXCHANNELS n'est pas compliqué, la bibliothèque va s'adapter, mais il faudra tester si on peut faire le dégradé sur 40 LEDs à la fois et regarder si cela a un impact sur le fonctionnement du reste du système.

  13. #253
    Membre régulier
    Bonjour à tous,
    L'ENORME avantage de la bibliothèque SoftPWM, c'est qu'elle s'occupe de faire l'allumage et l'extinction en dégradé toute seule, un ordre et hop c'est automatique
    Au sujet de SoftPWM, les LEDs doivent rester allumées tant qu'un autre BP n'a pas été pressé ! alors, qu'elles s'allument ou s'éteignent "en douceur" n'est pas la priorité.
    Si ça peut modifier le code en plus simple ...

    A+, Jacques
    Être vieux, c'est être jeune depuis plus longtemps que les autres !

  14. #254
    Membre expérimenté
    Allumer directement sera plus simple - juste un digitalWrite et plus besoin de la bibliothèque ce qui fait que vous pouvez aussi utiliser la proposition de JP pour étendre le pilotage des LEDs en I2C

    Mais ça sera moins joli - soigner les détails c’est important et gratifiant. Ensuite c’est juste une décision de l’effort et du matériel à mettre dans le produit

  15. #255
    Membre expérimenté
    Bonjour Jacques
    Citation Envoyé par Jsiorat Voir le message
    u sujet de SoftPWM, les LEDs doivent rester allumées tant qu'un autre BP n'a pas été pressé ! alors, qu'elles s'allument ou s'éteignent "en douceur" n'est pas la priorité.
    Sage décision , d'autant plus, qu'en y réfléchissant bien, on peut faire plus simple. Lors d'un changement de position d'aiguilles, les LED concernées s'éteignent et s'allument toutes en même temps. L'idée serait de "réserver" une branche d'alimentation 5V pour alimenter les LED d'aiguilles, branche qui serait commandée avec un signal PWM et un MOSFET genre IRF520N, et on garderai cet effet qui est quand même un plus. Je garde ça "sous le coude"
    Pour en revenir aux entrées/sorties, j'ai compté 20 aiguillages, donc 20 x 4 (2 moteurs et 2 LED) = 80 E/S. 80 R/S.
    Avec les MCP23017, on peut en mettre 8 donc 8x16 = 128 E/S, il nous en resterai 48 pour autres choses, + toutes les E/S de l'Arduino Mega qui sont libérées grâce aux MCP23017, as-tu assez pour le reste?
    Au pire, un peut toujours multiplier par 8 les MCP23017 en utilisant un multiplexeur i2C TCA9548.

    A+Bonne journée (Chez nous soleil!)
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  16. #256
    Membre régulier
    Citation Envoyé par jpbbricole Voir le message

    Avec les MCP23017, on peut en mettre 8 donc 8x16 = 128 E/S, il nous en resterai 48 pour autres choses, + toutes les E/S de l'Arduino Mega qui sont libérées grâce aux MCP23017, as-tu assez pour le reste?
    (Chez nous soleil!)
    Cordialement
    jpbbricole
    Du soleil ? en suisse ? moi qui croyais que le smog anglais c'était connecté au-dessus ....
    Diviser pour régner ...
    Je part du principe que : un Mega = le système aiguillage Gare et Triage ( + TCO) ; une autre carte UNO ou Mega pour la sécurité sur les cantons (j'ai 3 circuits donc trois cartes) et je suis en cours de réflexion pour utiliser des cellules photo (qui jouent avec la lumière) pour activer la gestion du courant dans les zones d'arrêt et l'allumage des feux, rouge, orange et vert, de chaque cantons, ou avec des ILS et mini aimants sous les motrices et ouagons (comme disent les belges !) au choix !

    Chez nous ... y a du soleil !

    A+, Jacques
    Être vieux, c'est être jeune depuis plus longtemps que les autres !

  17. #257
    Membre expérimenté
    Bonjour Jacques

    Citation Envoyé par Jsiorat Voir le message
    ...ou avec des ILS et mini aimants sous les motrices et ouagons (comme disent les belges !) au choix !
    Un super truc à explorer, le RFID.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  18. #258
    Membre régulier
    Citation Envoyé par jpbbricole Voir le message

    Un super truc à explorer, le RFID.
    Bonjour JP,

    Alors soleil ou pluie ?

    Sur Locoduino, j'ai vu un tuto intitulé "TCO en processing". J'ai lu, j'ai vu et je suis en train de me passionné pour ce tuto !
    J'ai réussi à créer le plan de ma gare, pour l'exemple et l'apprentissage !
    Ce tuto n'est pas complet, il manque encore l'art et la manière de l'utilisation du TCO créer.
    Connais-tu ce langage ? à mon avis un peu plus compliqué que Arduino
    Pour le fun, je vais écrire le TCO de mon réseau complet, histoire d'en apprendre un plus.

    La gare


    de C3 vers V1


    A+ Cordialement, Jacques
    Être vieux, c'est être jeune depuis plus longtemps que les autres !

  19. #259
    Membre expérimenté
    Salut Jacques

    Je connais ce langage, mais de loin. Je trouve l'idée séduisante, je vais regarder ça, mais une fois que j'ai intégré les extendeurs d'E/S (MCP23017) dans le programme. Petite remarque concernant cette intégration, afin de pouvoir mélanger les ports du Mega et ceux des extensions, j'ai choisi de définir que les numéros de ports < 100 sont ceux de l'Arduino et > 99 ceux des extensions, la centaine-1 donnant le numéro de l' extension, ainsi le port 208 s'adresse à l'extension 1 port 8 /il y a 16 porte E/S par extension)

    Concernant le développement dans Processing, ce qu'il y a à envoyer au programme en cas de clic sur un bp virtuel est exactement ce que tu tapes dans le moniteur de l'IDE c'est à dire
    BP=C1_V2 ou AIG=B1_G.
    Pourrais-tu mettre tes premiers essais Processing en ligne?

    A+
    Bonne journée (Soleil légèrement voilé.)
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  20. #260
    Membre régulier
    Citation Envoyé par jpbbricole Voir le message

    Pourrais-tu mettre tes premiers essais Processing en ligne?
    Ben, voilà ! en zip

    seul le fichier TCO.pde est modifié par moi
    tous les autres sont d'origine.

    je travaille sur une version +++ qui va reprendre le réseau en entier

    Être vieux, c'est être jeune depuis plus longtemps que les autres !

###raw>template_hook.ano_emploi###