Article Arduino de LR 802 (mai 2014)

Toutes les discussions sur l'Arduino !

Modérateur : MOD

Avatar du membre
jlb
Fécond
Messages : 686
Enregistré le : jeu. 04 oct. 2012, 15:38
Echelle pratiquée : N
Prénom : Jean-Luc
Site Internet : http://modelleisenbahn.triskell.org

Re: Article Arduino de LR 802 (mai 2014)

Message par jlb » lun. 16 juin 2014, 22:35

Bonsoir Pierrot,

Oui tu peux programmer de telle sorte que les deux fonctions soient traitées en même temps. Il faut juste compter le temps de manière différente.

Si tu as programmé la partie servos, tu doit avoir une temporisation faible dans loop, quelques millisecondes.

Pour ajouter les feux rouge clignotant, il suffit, au lieu d'utiliser delay, de compter le nombre de passage dans loop. Je m'explique.

Supposons que le delay que tu as mis dans loop soit de 5ms et que tu veuilles faire clignoter tes feux rouge avec une période de 1s soit 1000 ms. Il faut

1 - allumer le feux
2 - compter 500/5 = 100 passages dans loop sans rien faire
3 - éteindre le feu
4 - compter 100 passages dans loop sans rien faire

et reprendre à 1

Il te faut 1 variable qui indique si le feu clignote ou nom, appelons la clignote (un boolean)
1 variable qui te permet de compter, appelons là compteur (un byte)
1 variable qui indique si le feu est allumé ou éteint, appelons là etat_feu (un boolean, si true, le feu est allumé, il ne le sera effectivement que si clignote est true)
boolean clignote = false;
boolean etat_feu = true;
byte compteur = 100;
Dans loop, ça donnerait quelque chose comme ça (j'ai pas testé) :
if (clignote) {
  if (etat_feu) {
    digitalWrite(pinFeuRouge,HIGH);
  }
  else {
    digitalWrite(pinFeuRouge,LOW);
  }
  compteur--;
  if (compteur == 0) {
    compteur = 100;
    etat_feu = ! etat_feu; // inverse l'état du feu
  }
}
Il suffit ensuite de mettre clignote à true dès que la vitesse des servo est différente de 0 et le mettre à false dès que la vitesse est égale à 0.
Modifié en dernier par jlb le mar. 17 juin 2014, 09:27, modifié 1 fois.

Pierrot
Messages : 31
Enregistré le : mer. 30 août 2006, 18:36
Echelle pratiquée : H0
Localisation : AUBAGNE 13400
Âge : 81

Re: Article Arduino de LR 802 (mai 2014)

Message par Pierrot » mar. 17 juin 2014, 08:04

Bonjour jlb

Merci pour ta réponse rapide qui est très explicative.
Comme je débute en programmation, je vais approfondir ton résonnement car j'ai le servo lent.

Avatar du membre
jlb
Fécond
Messages : 686
Enregistré le : jeu. 04 oct. 2012, 15:38
Echelle pratiquée : N
Prénom : Jean-Luc
Site Internet : http://modelleisenbahn.triskell.org

Re: Article Arduino de LR 802 (mai 2014)

Message par jlb » mar. 17 juin 2014, 09:35

Pour bien faire, il faudrait forcer l'extinction des feux si clignote est faux car en l'état si le mouvement du servo se termine alors que le feux est allumé, il restera allumé.

Comme ceci
if (clignote) {
  if (etat_feu) {
    digitalWrite(pinFeuRouge,HIGH);
  }
  else {
    digitalWrite(pinFeuRouge,LOW);
  }
  compteur--;
  if (compteur == 0) {
    compteur = 100;
    etat_feu = ! etat_feu; // inverse l'état du feu
  }
}
else {
  digitalWrite(pinFeuRouge,LOW);
}

Pierrot
Messages : 31
Enregistré le : mer. 30 août 2006, 18:36
Echelle pratiquée : H0
Localisation : AUBAGNE 13400
Âge : 81

Re: Article Arduino de LR 802 (mai 2014)

Message par Pierrot » mar. 17 juin 2014, 18:02

Bonsoir jlb

Je viens de voir ton message ci-dessus, il remplace ce que je dois entrer dans loop

Ce soir je devrais pouvoir englober dans mon programme de commande des barrières ce que tu m'a appris dans tes deux derniers messages

Je te tiendrai au courant, mais ça risque d'être un peu long. Merci encore.

Pierrot

Avatar du membre
jlb
Fécond
Messages : 686
Enregistré le : jeu. 04 oct. 2012, 15:38
Echelle pratiquée : N
Prénom : Jean-Luc
Site Internet : http://modelleisenbahn.triskell.org

Re: Article Arduino de LR 802 (mai 2014)

Message par jlb » mar. 17 juin 2014, 18:19

Oui, c'est tout à fait ça.

Avatar du membre
Alain60
Prolixe
Messages : 1954
Enregistré le : ven. 25 janv. 2008, 19:47
Localisation : 60600 clermont
Âge : 69

Re: Article Arduino de LR 802 (mai 2014)

Message par Alain60 » ven. 20 juin 2014, 10:35

mon réseau fonctionne en automatique avec une gare cachée.
un train passe de temps en temps soit dans un sens soit dans l'autre sens et parfois même il arrive que deux trains partent de la gare cachée et viennent a se croiser sur la partie visible . :coeur2: :coeur2:
pendant ce temps la,je fais des manœuvres et compose des trains pour les lancer sur le réseau après avoir arrêté un train qui a son tour va être (trié).
avec ce système,pas besoin de blocs-canton vu qu'il n'y a toujours qu'un train qui roule(horreur des trains qui se mordent la queue ) :siffle: :siffle:
cependant,je voudrais que mes signaux fonctionnent comme en réalité,pour cela,je voudrais qu'a chaque signal,il y ai une pédale qui me colle deux relais temporisé (un a 30 secondes et l'autre a 1 minute)
avec les contacts de ces relais,je passerai au rouge avec les deux relais collés
a l'orange au bout de trente secondes quand le premier relais retombera et retour au vert quand le deuxième relais retombera.
je recherche donc,le plan (le plus simple possible)d'un relais temporisé.
sans CI si possible.
si quelqu'un a ça????? : :lol: :lol: :lol: :lol:

Avatar du membre
jlb
Fécond
Messages : 686
Enregistré le : jeu. 04 oct. 2012, 15:38
Echelle pratiquée : N
Prénom : Jean-Luc
Site Internet : http://modelleisenbahn.triskell.org

Re: Article Arduino de LR 802 (mai 2014)

Message par jlb » ven. 20 juin 2014, 10:54

Bonjour,

Sans CI :D

Tu n'es sans doute pas au bon endroit pour cette question. Ici c'est Arduino, donc micro-contrôleur.

Ceci dit, ce que tu veux est trivial à faire avec un Arduino et tu n'as pas besoin de relais :

Pédale = capteur de passage, à brancher sur une E/S de l'Arduino. Et 3 LED du feu à brancher sur 3 E/S de l'Arduino. Matériel autre que l'Arduino (un Pro Mini à 2€) : la pédale et le signal. Point. l'Arduino dispose de ~20 broches utilisable en E/S numérique donc tu peux gérer 4 ou 5 signaux avec un seul Arduino

Si tu veux en savoir plus, je suis à ta disposition.

Cordialement

Pierrot
Messages : 31
Enregistré le : mer. 30 août 2006, 18:36
Echelle pratiquée : H0
Localisation : AUBAGNE 13400
Âge : 81

Re: Article Arduino de LR 802 (mai 2014)

Message par Pierrot » mer. 25 juin 2014, 15:18

jlb bonjour

Ton programme pour la commande des feux clignotants que j'ai rajouté à mon programme de barrières fonctionne parfaitement.
Je suis arrivé à faire clignoter les feux dès que les barrières commencent à se baisser et à faire arrêter de clignoter dès que les barrières sont entièrement relevées, et là les Leds sont jusqu'à maintenant restent toujours éteintes.
Je vais m'attaquer à la programmation des butées en utilisant qu'un seul pas de réglage qui sera de l'ordre de un demi degré ce qui me semble suffisant pour régler mes barrières séparément en position haute et en position basse.

Merci de ton aide et félicitation pour ce que tu a écrit sur la manœuvre des aiguilles par servomoteurs, qui ma permis de faire de la programmation pour la première fois, comme quoi tout est possible.

Salutations

Pierrot

Guillaume22
Papotier
Messages : 145
Enregistré le : dim. 29 sept. 2013, 08:20

Re: Article Arduino de LR 802 (mai 2014)

Message par Guillaume22 » jeu. 26 juin 2014, 09:29

Bonjour,
si tu peux copier ton programme arduino sur le forum, je pourrai essayer de regarder ton problème.

Pierrot
Messages : 31
Enregistré le : mer. 30 août 2006, 18:36
Echelle pratiquée : H0
Localisation : AUBAGNE 13400
Âge : 81

Re: Article Arduino de LR 802 (mai 2014)

Message par Pierrot » ven. 27 juin 2014, 18:16

Bonsoir Guillaume22

Merci pour ta proposition, mais je voudrai arriver de moi-même à résoudre le programme car cela me permet d'apprendre. Si je n'y arrive pas, je ne manquerai pas de poser des questions.
De toute manière je ne manquerai pas de vous tenir au courant de mon projet.

Salutations

Pierrot

Pierrot
Messages : 31
Enregistré le : mer. 30 août 2006, 18:36
Echelle pratiquée : H0
Localisation : AUBAGNE 13400
Âge : 81

Re: Article Arduino de LR 802 (mai 2014)

Message par Pierrot » ven. 15 août 2014, 17:30

Bonsoir

Pour la programmation de mon PN, je fait le réglage des butées manuellement, c'est-à-dire que je modifie une fois pour toute à la demande les valeurs des angle_Min et angle_Max. La commande par les 2 poussoirs marche à merveille.


Dans l'article Arduino de LR 802 (mai 2014) il y a une partie que je ne comprend pas il s'agit de:

// Conversion de la tension analogique en numéro d'ils

La valeur K donne le numéro d'ils, et au dessus la valeur repere semble la donner aussi.

Je n'ai pas testé ni fait le montage pour localiser les ils, mais je voudrai me servir de ce programme pour commander par des capteurs IR l'ouverture et la fermeture de mon passage à niveau.

Merci pour votre aide qui est très précieuse pour moi car comme je vous l'ai déjà dit, c'est la première fois que je fait de la programmation.

Pierrot

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Re: Article Arduino de LR 802 (mai 2014)

Message par Arduino » sam. 16 août 2014, 18:04

Bonjour Pierrot,

Je vais essayer de répondre à ta question concernant le programme que j'ai publié pour suivre un train (LR802, mai 2014).

Dans le programme principal, repere indique bien le numéro de l'ILS déclenché par le train. Pour trouver quel est le numéro de l'ILS déclenché, on fait appel à une fonction qui s'appelle num_ILS. Cette fonction va comparer la lecture de la tension sur l'entrée analogique A0 avec différents seuils et pourra ainsi déterminer quel ILS a été déclenché (voir pour cela le tableau 4 ou bien la figure 2). Pour faire la comparaison, on utilise une variable locale k et c'est la valeur de cette variable k qui est retournée au programme principal. Et à ce moment là, repere ne fait que recopier la valeur qui est retournée par la fonction num_ILS. Au final, repere et k ont donc la même valeur.

Toutes les variables définies dans une fonction, sont des variables locales (sauf si on décide autrement), c'est-à-dire qu'elles ne sont pas connues du programme principal, mais uniquement de la fonction. En opérant ainsi, cela évite d'écraser par inadvertance une variable de fonction par une mauvaise manipulation dans le programme principal (et réciproquement). A la fin de la fonction, on retourne la valeur qui nous intéresse au programme principal qui la recopie dans une variable bien à lui.

Tu pourras en apprendre plus sur la portée des variables sur le site du constructeur Arduino (en anglais), mais tu peux aussi relire le paragraphe de l'article qui traite de la fonction calculant la surface d'un rectangle. A l'intérieur de cette fonction, les côtés du rectangles s'appellent x et y alors que dans le programme principal, les arguments transmis sont a et b. Lors de l'appel de la fonction, x prend la valeur a et y prend la valeur b. Ce que la fonction transmet à la fin est resulat qui vaut x * y, et sa valeur est affectée à la variable S du programme principal qui est la surface cherchée.

N'hésites pas à me dire si ce n'est toujours pas clair ; il est normal quand on débute d'avoir du mal à comprendre la portée des variables. Mais rappelle toi qu'en donnant des noms différents (dans une fonction) pour des choses identiques, on se préserve des erreurs dues au changement involontaire de la valeur d'une variable cruciale pour le programme.

Cordialement.

Christian

Pierrot
Messages : 31
Enregistré le : mer. 30 août 2006, 18:36
Echelle pratiquée : H0
Localisation : AUBAGNE 13400
Âge : 81

Re: Article Arduino de LR 802 (mai 2014)

Message par Pierrot » mar. 19 août 2014, 08:11

Christian bonjour et merci

Ta réponse m'a permis de mieux comprendre la programmation au niveau des fonctions.
J'avoue que lorsque j'avais lu ton article sur le traitement de la fonction surface_rectangle, je n'avais pas compris où tu voulais en venir. Maintenant je comprend mieux.

Je vais donc pouvoir continuer mon programme pour la commande d'ouverture et de fermeture de mon PN par des capteurs IR.

Salutations

Pierrot

Avatar du membre
Arduino
Prolixe
Messages : 1698
Enregistré le : mer. 25 sept. 2013, 16:14

Re: Article Arduino de LR 802 (mai 2014)

Message par Arduino » mar. 19 août 2014, 11:46

Dans l'article, la fonction calculant la surface d'un rectangle n'a aucun intérêt pour un modéliste ferroviaire ; si j'en ai parlé, c'est simplement pour expliquer comment on peut passer des arguments à une fonction et comment on peut récupérer un résultat.

Dans le modélisme ferroviaire, nous utilisons plutôt des fonctions qui réalisent une séquence de programme (par exemple allumage des LED dans un certain ordre et rythme, pour simuler une enseigne de commerçant). Ces fonctions ne renvoient pas forcément de résultat. Dans l'article du LR802, la fonction renvoie le numéro de l'ILS déclenché, ce qui permet de situer facilement nos trains sur notre réseau. :wink:

Il est très important en programmation de savoir utiliser des fonctions ; cela simplifie l'écriture du programme. Dans le prochain article à paraitre, on apprendra à utiliser des bibliothèques, ce qui nous permettra de concevoir des montages en utilisant le travail des autres ! ! ! :D

Christian

Répondre