Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Help variante de "huit boutons, huit servos"

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Re: Help variante de "huit boutons, huit servos"

Publié: Lun 20 Nov 2017, 15:04 
voici ou j'ai pris le model pour mes deux TCO précédent,http://modelleisenbahn.triskell.org/spip.php?article59#forum577
Image
Image
mon alim des servomoteur est externe contrairement au schéma, les quatre BP de gauches ne sont pas installés (réglages des fin de course des servos)
merci
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 21:49
Echelle pratiquée: HO
Prénom: yannick

Re: Help variante de "huit boutons, huit servos"

Publié: Lun 20 Nov 2017, 15:21 
simplebouton.h, est ce cela?
Image
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 21:49
Echelle pratiquée: HO
Prénom: yannick

Re: Help variante de "huit boutons, huit servos"

Publié: Lun 20 Nov 2017, 21:10 
Oui, je connais ce tuto mais un peu dur pour quelqu'un qui débute...
- charlieplexing, boutons indexés sur une broche analogique, tout cela est très intéressant mais il vaut mieux commencer plus humblement.
La bibliothèque,je pense que c'est la bonne, à toute fin utile je vous joints le lien https://forum.arduino.cc/index.php?topic=375232.0
Savez-vous installer une bibliothèque dans l'IDE d'Arduino ? il y a une excellente page sur le forum LOCODUINO.
De mon coté j'ai fait un petit croquis de ce que j'ai imaginé suite à nos discutions
- 1 seul Arduino (puisqu'il ne gère pas les zones d'occupations, ni les leds)
- 5 entrées pour les 5 boutons poussoirs (choisir un modèle de tableau, 1 r t momentané)
- 5 sorties pour les leds qui vont indiquées soit l'entrée, soit la sortie.
- 8 sorties pour les servos des Aiguilles.
- rx et tx (broches 0 et 1) doivent restées libres.
20 broches, on est bon.
Les broches analogiques (A0...A5) peuvent se programmer en entrée/sortie digitales .
La table de vérité : par convention on note aiguille en position droite =0 et déviée = 1. (ça n’influera pas le code, c'est juste plus lisible);
Le T.C.O. A vous de jouer.. :lol:
Si on est sur la même longueur d'onde, on peut commencer le code sinon dites-moi ce qu'il faut modifier.
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 52
Inscrit le: Ven 04 Juil 2014, 12:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Help variante de "huit boutons, huit servos"

Publié: Lun 20 Nov 2017, 21:58 
Image
Voilà le dessin qui était resté chez moi.
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 52
Inscrit le: Ven 04 Juil 2014, 12:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Help variante de "huit boutons, huit servos"

Publié: Lun 20 Nov 2017, 22:06 
Voilà l'image, je pensai qu'on pouvait mettre des pdf, mais, apparemment non.
Image
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 52
Inscrit le: Ven 04 Juil 2014, 12:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Help variante de "huit boutons, huit servos"

Publié: Mar 21 Nov 2017, 13:21 
Voilà un bout de code, il concerne la voie 1 et ne prend donc en compte que les aiguilles A1 pour l'entrée dans le faisceau et les aiguilles A5,A6,A7,A8 pour la sortie.
Code: Tout sélectionner
#include <simpleBouton.h>

simpleBouton boutonVoie1(2); // Création d'un objet bouton sur la broche 2.
// mettre ici le code pour les autres boutons

#include <Servo.h>
Servo aiguilleA1; // Création d'un objet servo que l'on va attachera à la broche 7.
Servo aiguilleA5; // Création d'un objet servo que l'on va attachera à la broche 11.
Servo aiguilleA6; // Création d'un objet servo que l'on va attachera à la broche 12.
Servo aiguilleA7; // Création d'un objet servo que l'on va attachera à la broche 13.
Servo aiguilleA8; // Création d'un objet servo que l'on va attachera à la broche A0.
// mettre ici le code pour les autres servos

const byte ledVoie1 = 19; // On attache la broche A5 à une variable ledVoie1.
// mettre ici le code pour les autres leds

boolean compteurVoie1 = 0;
// mettre ici le code pour les autres compteurs

void setup() {
  pinMode(ledVoie1,OUTPUT);
// mettre ici le code pour les autres leds
  aiguilleA1.attach(7);
  aiguilleA5.attach(11);
  aiguilleA6.attach(12);
  aiguilleA7.attach(13);
  aiguilleA8.attach(14);
// mettre ici le code pour les autres servos

}
void loop()
{
/***************************GESTION DES BOUTONS******************************************/
  boutonVoie1.actualiser();
    if(boutonVoie1.vientDEtreEnfonce()) { compteurVoie1=!compteurVoie1; }
  // mettre ici le code pour les autres boutons
 
/**************************GESTION DES AIGUILLES ET DES LEDS ***************************/
/* La gestion des servos( angle de déviation de 0 à 180°) necessite de positionner le servo à 90°
* en position médiane du déplacement des aiguilles. Les tests sont à faire pour chaque servo.
* Arbitrerement et pour la comprehension du code on admet que pour déplacer l'aiguille en position droite
* le servo aura un angle de 70° et pour la position déviee de 110°.
*/
  if(compteurVoie1 == 1)
  {
    digitalWrite(ledVoie1,LOW);
     aiguilleA1.write(110); 
  }
  if(compteurVoie1 == 0)
  {
    digitalWrite(ledVoie1,HIGH);
     aiguilleA5.write(70);
     aiguilleA6.write(70);
     aiguilleA7.write(70);
     aiguilleA8.write(70);
   
  }
// mettre ici le code pour les autres aiguilles en suivant la table de vérité
}


Il suffit de répéter le code pour les autres voies.
Ne connaissant pas votre niveau , si vous avez du mal à comprendre, demandez des explications.
Ce programme est très basique et pourrait être beaucoup amélioré mais ça marche et c'est simple à comprendre.
N'hésitez pas à utiliser les bibliothèques que d'autres mettent à disposition.
Quelques pistes pour améliorer :
- Une bibliothèque intéressante, VarSpeedServo.h, elle permet de régler l'angle de déplacement du servo, la vitesse de déplacement du servo , et un argument permet d'attendre que le premier servo ait fini son déplacement avant de faire fonctionner le suivant. C'est très intéressant pour construire des itinéraires, ça permet de ne pas avoir de grand pics de courant sur l'alim.
- Une autre piste intéressante, c'est l'emploi des leds programmables WS2812
on les trouve pas très chères, elles se commandent avec une seule broche de l'arduino et on peut avoir des millions de couleurs différentes .
Voilà, bon courage, tenez-nous au courant de l’avancement des travaux.
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 52
Inscrit le: Ven 04 Juil 2014, 12:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Help variante de "huit boutons, huit servos"

Publié: Mar 21 Nov 2017, 20:11 
ET ben si moi j'bosse le dimanche, toi tu arrête pas! :applause: je vais bosser sur le reste du sketch et te faire voir si c'est ok, Au faite,question au passage, le fait de vérifier un sketch fait sur Arduino, lors de la compilation du croquis, si pas de messages d'erreur, cela indique t'il que le programme marche? avant de téléversé et essayer?
pour mon utilisation, le temps de déplacements des servos est de l'ordre de 2 sec et les mini_maxi son 1000 et 2000 et le PMW et coupé en fin de course. ce que tu as fais est tout simplement nickel!, j'avais simplement mis une LED par direction d'aiguillage pour être sur de leur déplacement mais c'est inutile, par contre, pour les aiguilles qui ne sont pas impliquées dans un parcours, pourquoi les remettre en alignement, peut on ne pas les asservir ?.
Pour revenir au prog que j'utilise, c'est vrai que c'est compliqué je serais incapable de le créer mais je comprend le fonctionnement, j'ai réussi à le modifier pour 5 aiguilles seulement.
Cordialement, je te tiens au courant des que j'aurais le temps de bosser dessus.
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 21:49
Echelle pratiquée: HO
Prénom: yannick

Re: Help variante de "huit boutons, huit servos"

Publié: Mar 21 Nov 2017, 22:39 
quand tu vérifie un sketch que tu viens d'écrire, l'IDE ne renvoie que les erreurs de syntaxe : une mauvaise inclusion de variable, une faute de syntaxe,etc...
elle ne dit pas, pour autant, si ton code va marcher (dommage, d'ailleurs!!)
Une erreur courante et qui arrive à tout le monde, c'est d'écrire dans la condition d'un if() : if(compteurVoie1 = 0){fait quelque chose;} et bien, tu n'auras pas d'erreur alors que ta condition ne sera jamais vérifiée.
Il faut écrire, bien sur if(compteurVoie1 ==0){fait quelquechose;}
Pour les aiguilles, tu as tout à fait raison, si elles ne sont pas consernées, inutiles de les faire fonctionner.
Je vois que pour tes servos, tu emploies la fonction writeMicroseconds() et surement un temps de latence pour avoir un mouvement lent; si tu rencontres des soucis pour mettre ça en oeuvre, je te conseille d'utiliser la bibliothèque VarSpeedServo.h plus facile, on en reparles....
Bon courage et bon train.

P.S. est-ce que tu n'as des mouvements intempestifs des servos au démarage?
chez moi, c'est le cas et je ne sais pas trop comment résoudre ça!
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 52
Inscrit le: Ven 04 Juil 2014, 12:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Help variante de "huit boutons, huit servos"

Publié: Mer 22 Nov 2017, 09:16 
bonjour, oui j'ai des mouvements intempestifs (enfin surtout mes servos), j'ai lu quelque part de mettre un inter sur l'alim des servo et de les "allumer" quelque secondes après avoir mis sous tension la carte UNO (ou autre) pour lui laisser le temps de se réinitialiser et de lire l'eeprom, mais je t'avoue ne pas avoir tenté.
Pour ce qui est des déplacements des servos, je vais essayer les deux méthodes
on verra, par contre, comment fait tu pour mettre le sketch "ici" et l'en sortir vers l'IDE
cordialement
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 21:49
Echelle pratiquée: HO
Prénom: yannick

Re: Help variante de "huit boutons, huit servos"

Publié: Mer 22 Nov 2017, 11:29 
en fait je suis perdu sur l'affectation des broches. :siffle:
pour reprendre:
les servos de la broche 2 à 9:
les LED's de la broche 10 à 13 et A5:
les boutons de la broche A0 à A4
car dans le "bout de code" tu dis : aiguilleA8.attach(14);
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 21:49
Echelle pratiquée: HO
Prénom: yannick

Re: Help variante de "huit boutons, huit servos"

Publié: Mer 22 Nov 2017, 16:37 
pour mettre le sketch sur le forum : dans l'IDE---> édition ---> copier pour le forum ; sur le forum --->cliquez sur la balise code--->collez entre les deux .
du forum vers l'IDE : cliquez sur tout sélectionner---->puis copier/coller dans l'IDE dans un nouveau fichier.
D'une manière arbitraire, j'avais décider d’accrocher les boutons sur les broches 2,3,4,5 et 6 , les servos sur les broches 7,8,9,10,11,12,13 et 14 , les leds sur les broches 15,16,17,18 et 19. Les broches A0... A5 peuvent s'écrire 14...19. J'ai pris l'habitude d'écrire 14 à 19 quand je m'en sers pour des entrées/sorties digitale et A0...A5 pour des entrées analogiques.
Mais, tu peux faire comme tu veux, du moment que le compilateur retrouve ses p'tits!!!
Le nom des variables, c'est pareil, tu donnes les noms qui te parlent.
J'ai pris l'habitude de les écrire en minuscule et, comme on n'a pas le droit à l'espace, je mets une majuscule au début des autres mots , j'aime bien des noms qui définissent bien les concepts et pas des abréviations, car, après quelques mois, je ne m'y retrouve plus.
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 52
Inscrit le: Ven 04 Juil 2014, 12:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Help variante de "huit boutons, huit servos"

Publié: Mer 22 Nov 2017, 20:22 
Bon! ça c'est fait!,
mais est ce que c'est bien fait???
[*]
Code: Tout sélectionner
#include <simpleBouton.h>
simpleBouton boutonVoie1(2); // Création d'un objet bouton sur la broche 2.
simpleBouton boutonVoie2(3); // Création d'un objet bouton sur la broche 3.
simpleBouton boutonVoie3(4); // Création d'un objet bouton sur la broche 4.
simpleBouton boutonVoie4(5); // Création d'un objet bouton sur la broche 5.
simpleBouton boutonVoie5(6); // Création d'un objet bouton sur la broche 6.

#include <Servo.h>
Servo aiguilleA1; // Création d'un objet servo que l'on attachera à la broche 7.
Servo aiguilleA2; // Création d'un objet servo que l'on attachera à la broche 8.
Servo aiguilleA3; // Création d'un objet servo que l'on attachera à la broche 9.
Servo aiguilleA4; // Création d'un objet servo que l'on attachera à la broche 10.
Servo aiguilleA5; // Création d'un objet servo que l'on attachera à la broche 11.
Servo aiguilleA6; // Création d'un objet servo que l'on attachera à la broche 12.
Servo aiguilleA7; // Création d'un objet servo que l'on attachera à la broche 13.
Servo aiguilleA8; // Création d'un objet servo que l'on attachera à la broche 14.

const byte ledVoie1 = 19; // On attache la broche A5 à une variable ledVoie1.
const byte ledVoie2 = 18; // On attache la broche A4 à une variable ledVoie2.
const byte ledVoie3 = 17; // On attache la broche A3 à une variable ledVoie3.
const byte ledVoie4 = 16; // On attache la broche A2 à une variable ledVoie4.
const byte ledVoie5 = 15; // On attache la broche A1 à une variable ledVoie5.


boolean compteurVoie1 = 0;
boolean compteurVoie2 = 0;
boolean compteurVoie3 = 0;
boolean compteurVoie4 = 0;
boolean compteurVoie5 = 0;

void setup() {
  pinMode(ledVoie1,OUTPUT);
  pinMode(ledVoie2,OUTPUT);
  pinMode(ledVoie3,OUTPUT);
  pinMode(ledVoie4,OUTPUT);
  pinMode(ledVoie5,OUTPUT);

  aiguilleA1.attach(7);
  aiguilleA2.attach(8);
  aiguilleA3.attach(9);
  aiguilleA4.attach(10);
  aiguilleA5.attach(11);
  aiguilleA6.attach(12);
  aiguilleA7.attach(13);
  aiguilleA8.attach(14);


}
void loop()
{
/***************************GESTION DES BOUTONS******************************************/
  boutonVoie1.actualiser();
    if(boutonVoie1.vientDEtreEnfonce()) { compteurVoie1=!compteurVoie1; }
    if(boutonVoie2.vientDEtreEnfonce()) { compteurVoie2=!compteurVoie2; }
    if(boutonVoie3.vientDEtreEnfonce()) { compteurVoie3=!compteurVoie3; }
    if(boutonVoie4.vientDEtreEnfonce()) { compteurVoie4=!compteurVoie4; }
    if(boutonVoie5.vientDEtreEnfonce()) { compteurVoie5=!compteurVoie5; }
   
/**************************GESTION DES AIGUILLES ET DES LEDS ***************************/
/* La gestion des servos( angle de déviation de 0 à 180°) necessite de positionner le servo à 90°
* en position médiane du déplacement des aiguilles. Les tests sont à faire pour chaque servo.
* Arbitrerement et pour la comprehension du code on admet que pour déplacer l'aiguille en position droite
* le servo aura un angle de 70° et pour la position déviee de 110°.
*/
  if(compteurVoie1 == 1)
  {
    digitalWrite(ledVoie1,HIGH);
     aiguilleA1.write(110);
     aiguilleA2.write(70);
     aiguilleA3.write(70);
     aiguilleA4.write(70);
  }
  if(compteurVoie1 == 0)
  {
    digitalWrite(ledVoie1,LOW);
     aiguilleA5.write(70);
     aiguilleA6.write(70);
     aiguilleA7.write(70);
     aiguilleA8.write(70);
   }
    if(compteurVoie2 == 1)
  {
    digitalWrite(ledVoie2,HIGH);
     aiguilleA1.write(70);
     aiguilleA2.write(110);
     aiguilleA3.write(70);
     aiguilleA4.write(70);
  }
   if(compteurVoie2 == 0)
  {
    digitalWrite(ledVoie2,LOW);
     aiguilleA5.write(110);
     aiguilleA6.write(70);
     aiguilleA7.write(70);
     aiguilleA8.write(70);
  }
   if(compteurVoie3 == 1)
  {
    digitalWrite(ledVoie3,HIGH);
     aiguilleA1.write(70);
     aiguilleA2.write(70);
     aiguilleA3.write(110);
     aiguilleA4.write(70);
  }
   if(compteurVoie3 == 0)
  {
    digitalWrite(ledVoie3,LOW);
     aiguilleA5.write(70);
     aiguilleA6.write(110);
     aiguilleA7.write(70);
     aiguilleA8.write(70);
  }
   if(compteurVoie4 == 1)
  {
    digitalWrite(ledVoie4,HIGH);
     aiguilleA1.write(70);
     aiguilleA2.write(70);
     aiguilleA3.write(70);
     aiguilleA4.write(110);
  }
   if(compteurVoie4 == 0)
  {
    digitalWrite(ledVoie4,LOW);
     aiguilleA5.write(70);
     aiguilleA6.write(70);
     aiguilleA7.write(110);
     aiguilleA8.write(70);
  }
   if(compteurVoie5 == 1)
  {
    digitalWrite(ledVoie5,HIGH);
     aiguilleA1.write(70);
     aiguilleA2.write(70);
     aiguilleA3.write(70);
     aiguilleA4.write(70);
  }
   if(compteurVoie5 == 0)
  {
    digitalWrite(ledVoie5,LOW);
     aiguilleA5.write(70);
     aiguilleA6.write(70);
     aiguilleA7.write(70);
     aiguilleA8.write(110);
  }



pour ce qui est de la vitesse des servos, je verrais mais comme la gare est cachée, cela n'a pas vraiment d'importance, seul le bruit généré sera peut être un frein, mais pour l'instant, qu'en pense tu?
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 21:49
Echelle pratiquée: HO
Prénom: yannick

Re: Help variante de "huit boutons, huit servos"

Publié: Mer 22 Nov 2017, 20:58 
Oui, c'est ça !!!!
Il manque une accolade fermante pour clore la loop----->le compilateur ne compilera pas !!!
Sinon, tu peux te passer de bouger les aiguilles qui ne servent pas dans chaque if(), par exemple :
if(compteurVoie1 == 1)
{
digitalWrite(ledVoie1,HIGH);
aiguilleA1.write(110);
}
Attention, les angles de 70° et 110° ne sont que théoriques.
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 52
Inscrit le: Ven 04 Juil 2014, 12:09
Localisation: Haut-Var
Âge: 67
Echelle pratiquée: HO
Prénom: Gérard
Club: CMMF Mouans-Sartout

Re: Help variante de "huit boutons, huit servos"

Publié: Jeu 23 Nov 2017, 09:09 
Bonjour, :D
donc si j'ai bien compris, si je veux ignorer un ou des servo(s) dans les "if", je mentionne uniquement les servos dont j'ai besoin, les autres ne bougerons pas.!!!
Ne faut il pas préciser aux servos qu'ils doivent se repérer par rapport à 90°?

l'accolade fermante doit se trouver sur la ligne juste avant
/*********************GESTION DES AIGUILLES ET DES LEDS ***************************/
comme ceci:
}
/*********************GESTION DES AIGUILLES ET DES LEDS ***************************/

dernière question, je n'ai pas essayé le sketch car je n'ai plus de UNO disponible, :)
nous avons dis qu'une pression "fait" les aiguilles d'entrées,
mais est ce que deux pressions successives "font" les sorties ?. je pense que oui car c'est défini par l'état d'allumage des LED's (HIGH ou LOW) c'est bien ça ?
OUPS Aprés modif d'accolade, et compilation... :(
Image
j'ai du oublier quekchoze
je relonge
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 21:49
Echelle pratiquée: HO
Prénom: yannick

Re: Help variante de "huit boutons, huit servos"

Publié: Jeu 23 Nov 2017, 11:01 
L'IDE ne trouve pas le fichier simpleBouton.h donc es-tu certain d'avoir bien importé cette bibliothèque dans ton IDE ?
Va dans le menu Croquis > Inclure une bibliothèque et regarde déjà si elle existe. Sinon, il faut l'importer avec Ajouter la bibliothèque .ZIP ...
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1688
Inscrit le: Mer 25 Sep 2013, 17:14

PrécédentSuivant

Retour vers Arduino

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 4 invité(s)