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 - Matou

Pages: [1]
1
Vos projets / Re : Commande de PN avec des capteur IR FC-51
« le: juillet 09, 2021, 08:08:54 pm »
Bonsoir à tous,
La question est un peu vieille, une solution a j'espère déjà été trouvée, mais je vais proposer celle qui me vient à l'esprit :
mettre un capteur de chaque côté du passage à niveau et fermer ce PN dès qu'un au moins des capteurs détecte un train. Quand AUCUN des capteurs ne détecte plus (avec éventuellement un léger temps pour gérer les non-détections fugitives), on ouvre le PN. Cela se fait avec une simple fonction OU (|| en C) sur l'état "il y a quelque chose" des capteurs.
C'est simple, rustique, presque rudimentaire. Attention toutefois : il faut que les capteurs ne soient pas plus éloignés que la longueur du train le plus court, sinon le passage à niveau s'ouvrira au mauvais moment. Donc la temporisation peut aussi servir à cela, sauf si le train s'arrête entre les capteurs.
Plus complexe, un automate d'état où le premier capteur qui détecte un train donne le sens de circulation. A partir de ce moment, on ferme le PN et on l'ouvrira quand l'AUTRE capteur passera de "il y a quelque chose" à "rien". Comme cela, le train peut s'arrêter entre les capteurs, le PN restera fermé. Par contre, il ne faut pas que le train fasse demi-tour entre les capteurs, car le PN restera fermé tant qu'un autre train ne franchira pas le capteur désigné "de sortie". Et là, avec un peu de malchance, on ouvrirait le PN juste quand le train arrivera dessus. Dessiner l'automate d'état est un bon moyen de le comprendre et de le "jouer". Ensuite, la programmation est plus simple.
En gros, il faut étudier les cas réels, trouver ceux qui piègent le programme et décider si on accepte le risque ou pas.

2
J'ai remplacé la liste chaînée par un tableau statique de 20 éléments. Il n'est même pas dimensionné dynamiquement.
Donc il y a environ 1500 octets de programme en moins, et les liens de la liste ne se créeront pas lors de l'initialisation.
J'ai supprimé les raisons des warnings (des const qui manquaient et un unsigned inutile)
J'ai renommé les méthodes update() en loop() dans les classes dérivées d'EntreeSortie, puisqu'elles sont appelées lors de l'appel à loop().
J'ai mis dans la méthode print_config') d'EntreesSorties (le fameux gestionnaire du tableau des EntreeSortie's) l'impression du nombre d'éléments. Comme cela, on peut écrire le programme, puis redimensionner à ce qui est nécessaire. De même, s'il est sous-dimensionné, on verra ce nombre apparaître avant le crash inévitable. Je n'ai pas mis de test de débordement, mais si c'était utile, ce serait facile.

Donc encore une fois merci pour les commentaires, c'est aussi le plaisir de partager.

3
Point important que je n'ai pas écrit dans ma réponse précédente : MERCI pour cette relecture, cela fait toujours du bien au code d'être relu par quelqu'un d'autre.

4
Ce code compile avec l'IDE Arduino chez moi (je suis sous Linux). Il y a peut-être des options de compilations différentes, je suis d'accord que la référence en avant, ce n'est pas bon.
Pour la liste chaînée, oui, la remplacer par un bon vieux tableau ne serait pas un problème, sa souplesse n'a rien d'indispensable.
Je ne fais pas d'allocation-libération dans le fonctionnement, seulement à l'init. Je suis d'accord que ce serait une mauvaise chose en général pour ce type de code.

Je vais donc revoir ces points. Je republierai l'ensemble, mais je ne sais pas quand, car j'ai en ce moment d'autres occupations que je ne devrais pas négliger, même pour un projet qui me passionne... La récréation ne doit pas être plus longue que les cours !

5
Effectivement, j'ai une note dans un fichier :
LinkedList modification : remplacement de false par NULL en ligne 160 de LinkedList.h
J'ai donc dû avoir cette erreur au tout début, te je l'ai contournée avec ce changement.

6
J'ai aussi Servo_MG qui utilise Servo. Servo_MG n'est pas utilisé dans ce projet, mais est présent dans les sources. Serait-ce la raison ?

7
J'ai l'impression qu'il faut ajouter la librairie LinkedList. Effectivement, je l'avais fait, sans la mettre d
ans mes sources.

8
Effectivement, le programme principal n'est ni un cpp, ni un h, j'avais zappé cela. Je répare mon oubli et je mets aussi le schéma en format PDF, car tout le monde n'a pas Kicad.
Et je demande humblement à être excusé.

9
Bonjour,

Je suis débutant en Arduino avec une vie professionnelle -terminée- en informatique (pas en électronique).
Pour commencer, je me suis lancé dans la réalisation d'une alimentation analogique pilotée par un Uno.
J'ai écrit une structure de classes pour les entrées-sorties dans le but de simplifier les boucles loop (et setup).
Une classe mère virtuelle pure EntreeSortie impose trois méthodes à toutes ses dérivées : print_config(), setup() et update().
La classe EntreesSorties (au pluriel) n'est qu'une liste chaînée d'EntreeSortie et ses méthodes ne servcent qu'à appeller la méthode correspondante de chacun
des objets de la liste.
La méthode print_config() permet d'afficher la configuration de chaque objet de la liste. Cela sert à avoir un affichage de l'usage des broches par un programme.
Il est pratique de l'invoquer au démarrage du programme. L'usage me dira si c'est réellement utile ou pas...
Les méthodes setup() et update() sont plus classiques. Avec cette structure, le programme principal devient plus simple.
Je joins les documentations et programmes dans leur état actuel. N'hésitez pas à les utiliser si vous pensez que cela peut vous servir.

Mon alimentation fonctionne actuellement en montage "volant sur table", je l'utilise pour faire rouler une locomotive sur un bout de voie de 2 mètres et demi de long. C'est encore très embrionaire, mais il faut un -second- début à tout.

Pages: [1]