Parlons Arduino > Vos projets

Passage à niveau 2 voies double sens

(1/8) > >>

Pilou3837:
Bonjour,
Completement débutant en Arduino, j'ai tenté de modifier le projet PN TIB de Christian Bezanger pour tenter de l adapter à mon projet .
 * PN_2Feux_Barrieres_SortieSon_InitOuvert.ino
 * *****************************************************************************
 * Programme developpe pour le projet de PN Pierre.
 *2 voies a et b double sens pn delimité par 2 zones Zone a et Zone b
 *2 capteurs de detection de train  en debut et fin de chaque zone
 * Il prend en compte l arrivee du train, le clignotement des feux en simulant
 * une ampoule a filaments, un delai avant mouvement des barrieres,

 * le mouvements des deux barrieres sur 90° d amplitude (depend de
 * la transmission adoptee).
 * Le programme s'initialise barrieres ouvertes
 * La LED_SON est allumee tant que sonnerie doit jouer ; cette sortie commande
 * le module sonore.

Je vous poste mon sketch modifié pour contrôle et recommandation.
Je ne suis pas sur du tout confiant  pour le void loop et la gestion des changements d'état .

Merci de votre aide et de vos conseils

msport:
Bonsoir,

Avant tout formalisez la logique du programme modifié.

ensuite, je vous suggère de vérifier le respect du langage Arduino et d'arriver à un sketch qui passe à la compilation.

Vérifiez les déclarations des variables que vous utilisez et l'usage qui en est fait ensuite.

Pour la mise au point de votre programme, placez des Serial.print sur les variables clés pour savoir où votre programme passe et quelles valeurs vos variables ont là.

Pilou3837:
Merci,
Je vais retourner bosser
Mais cela ne m avance pas beaucoup…
Je suis un vrai débutant je maitrise un tout petit peu
La où je coince entre  autre  c est sur les changements d état des zones occupées ou libres
Et donc comment un capteur devient soit entrant soit sortant
Et pas très à l aise avec les Isr

chris_bzg:
Bonjour,

En tant qu'auteur des articles, je vais essayer de vous donner un coup de main pour arriver au bout de votre projet.

Si j'ai bien compris, votre PN diffère du PN-TIB par le fait qu'il y a deux voies à protéger. C'est donc en comprenant bien le principe de détection décrit au chapitre 1 que vous arriverez à réaliser votre projet. Et déjà, j'aimerais savoir si vous y arrivez car le programme que vous donnez réalise l'ensemble de toutes les fonctions du PN y compris le son.

Or, je pense l'avoir dit, un projet doit se construire par étapes et pour vous, la première étape est déjà de détecter l'occupation des voies. Vous ajouterez le reste ensuite et vous verrez que si cette première étape est réussie, le reste coule de source.

J'ai un peu regardé votre programme ; vous voulez que le programme s'initialise barrières ouvertes. Dans ce cas, pourquoi initialisez-vous à true les variables etatZonePN ? (lignes 39 et 41)

Les capteurs n'ont pas besoin de passer de entrant à sortant : ils ne font que détecter un survol, donc le fait qu'un engin entre ou sort de la zone surveillée. Et ce sont justement les conditions d'initialisation qui font qu'on saura si l'engin entre ou sort. Ces conditions seront à respecter sur les deux voies.

Quant aux ISR, elles ne font que changer le statut de la zone. Et c'est le programme principal qui fait le reste.

J'espère vous avoir un peu aidé. Faites les choses progressivement, étape par étape. C'est à ce prix que vous maitriserez. Je dois encore étudier votre programme pour voir s'il est bien conçu et ceci peut prendre du temps.

Je vous propose donc pour la suite de partir du programme de l'article 1 et le transformer jusqu'à ce qu'il détecte bien les trains sur les deux voies. Le reste viendra en son temps.

Bonne programmation.

Christian

chris_bzg:
Je viens de me pencher sur votre programme.

Tout d'abord, il m'a fallu corriger plusieurs petites choses avant que la compilation puisse avoir lieu. La moindre des choses est déjà de nous donner des programmes qui passent la compilation sans problème. Dans votre programme, des variables n'étaient pas initialisées (old_top_debutISR_a et old_top_debutISR_b par exemple) et des erreurs de syntaxes comme Low à la place de LOW ou encore rising à la place de RISING).

D'ailleurs, pourquoi utilisez-vous RISING alors que mon programme utilise FALLING ? Vos détecteurs sont différents et produisent un signal HIGH au lieu de LOW ? Je ne pense pas.

Encore une fois, il faut y aller par étape. C'est aussi nécessaire pour que nous puissions vous aider car reprendre le programme de quelqu'un demande du temps et plus ce programme est court, moins il en faut et plus on trouve vite ce qui cloche. A partir de là, on vous donnera un programme qui fonctionne et vous le complèterez.

Vous y arriverez, d'autres y sont parvenus alors vous y arriverez.

Bon courage (et ne nous envoyez plus de programme qui ne compilent pas, corrigez les d'abord).

Navigation

[0] Index des messages

[#] Page suivante

Utiliser la version classique