Help variante de "huit boutons, huit servos"

Toutes les discussions sur l'Arduino !

Modérateur : MOD

Petitrain
Bavard
Messages : 72
Enregistré le : ven. 04 juil. 2014, 12:09
Echelle pratiquée : HO
Prénom : Gérard
Club : CMMF Mouans-Sartout
Localisation : Haut-Var
Âge : 68

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

Message par Petitrain » jeu. 23 nov. 2017, 10:23

Apparemment, il ne trouve pas la bibliothèque simpleBouton.h, est-ce que tu la bien installer ?
L'acolade fermante manquante doit être tout à la fin...
c'est void loop() { ....tu écris là tout ton code qui se répète ....}
En fait, j'ai abandonné l'idée du compteur pour les états d'entrée/sorties car on avait pas besoin de l'état 0 = inactif. Je l'ai remplacé par des variables booléennes ( des variables qui ne prennent que deux positions 0 ou 1)

Code : Tout sélectionner

boolean compteurVoie1 = 0;
boolean compteurVoie2 = 0;
boolean compteurVoie3 = 0;
boolean compteurVoie4 = 0;
boolean compteurVoie5 = 0;
Au départ, elles valent 0. si tu appuies une fois, tu inverses la variable

Code : Tout sélectionner

if(boutonVoie1.vientDEtreEnfonce()) { compteurVoie1=!compteurVoie1; }
chaque appui inverse donc la variable --> elle passe de 0 à 1.
Ce sont ces variables qui définissent l'entrée ou la sortie, les leds ne définissent rien du tout, elles ne sont là que pour t'indiquer ou tu en es.

Code : Tout sélectionner

if(compteurVoie1 == 1)
  {
    digitalWrite(ledVoie1,HIGH);
     aiguilleA1.write(110);
     aiguilleA2.write(70);
     aiguilleA3.write(70);
     aiguilleA4.write(70);
  }
Là, tu demandes à l'Arduino de tester la variable compteurVoie1, si elle est vraie donc si elle est égale à1, alors il exécute ce qui est entre les accolades:
il allume la led, il met les servos dans les positions indiquées.
Pour ce qui est de la position des servos, tu n'as pas besoin de lui dire la position 90° c'est à toi à voir si 70 et110°font bien coller tes aiguilles dans les deux sens, sinon tu auras juste à modifier les valeurs des angles dans ton programme (il n'y a que l'expérience qui te donneras les bonnes valeurs).
Choisir, c'est déjà renoncer!

Avatar du membre
Le Garandiere
Messages : 25
Enregistré le : mar. 07 nov. 2017, 20:49
Echelle pratiquée : HO
Prénom : yannick

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

Message par Le Garandiere » jeu. 23 nov. 2017, 13:28

YES :applause:
Alors y'a pas que moi qui connais pas tout :siffle: mon Arduino à qu'a bien se tenir(enfin pas trop). c'est chose faite, je les ai présentés, et le courant passe bien car:
Image
donc il me faut placer la première LED en début de voie1 par exemple, et l'autre en bout de voie 1 pour différencier l'entrée de la sortie.
Alternativement il y aura:
pression1-entrée
pression1-sortie
etc
reèllement merci, mon prochain sujet sera les photos de mes créations...
Fichiers joints
Capture.JPG

Petitrain
Bavard
Messages : 72
Enregistré le : ven. 04 juil. 2014, 12:09
Echelle pratiquée : HO
Prénom : Gérard
Club : CMMF Mouans-Sartout
Localisation : Haut-Var
Âge : 68

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

Message par Petitrain » jeu. 23 nov. 2017, 18:53

:applause: YES!!!!!
On attend les photos.
Choisir, c'est déjà renoncer!

Avatar du membre
Le Garandiere
Messages : 25
Enregistré le : mar. 07 nov. 2017, 20:49
Echelle pratiquée : HO
Prénom : yannick

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

Message par Le Garandiere » jeu. 23 nov. 2017, 21:20

hello, vous avez un échantillon de mon 1er réseau avec mon avatar, je peu poster là?

Avatar du membre
Le Garandiere
Messages : 25
Enregistré le : mar. 07 nov. 2017, 20:49
Echelle pratiquée : HO
Prénom : yannick

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

Message par Le Garandiere » sam. 25 nov. 2017, 22:17

heuuuuuu, c'est re-moi! :ange3:
pour avoir travaillé en améliorant j'espère mon sketch, pensez vous que cela soit ok car je ne peu toujours pas l'essayer faute de matériel.
j'ai changer la méthode de rotation des servos pour fluidifier et ralentir le mouvement, avec en plus la fonction .detach(); pour stopper l'asservissement des servos et ainsi éviter de moteur diesel sous le reseau.
[...]
int vitesse;
int angle;
const int angleMin = 1000;
const int angleMax = 2000;

[...]
if(compteurVoie1 == 1)
{
digitalWrite(ledVoie1,HIGH);
aiguilleA1.attach(7);
angle = angleMax;
vitesse = -1;
aiguilleA1.detach();
}

[...]
la compilation est sans erreurs
cordialement
PS: ou dois-je poster les photos de mes réseaux svp

Plume
Bavard
Messages : 66
Enregistré le : jeu. 02 juil. 2015, 22:18
Echelle pratiquée : HO
Club : UAICF Nevers Vauzelles
Site Internet : http://modelisme58.free.fr
Localisation : Nevers

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

Message par Plume » dim. 26 nov. 2017, 10:27

Bonjour,

Pour tester le programme, on peut utiliser un simulateur en ligne à l'aide d'une platine d'essai avec Arduino, servomoteur, bouton, LED,...

Voici le lien : https://circuits.io

Ceci peut être très pratique pour réaliser des tests avec des Arduino si nous n'avons pas besoin d'importer des librairies.

Plume

Petitrain
Bavard
Messages : 72
Enregistré le : ven. 04 juil. 2014, 12:09
Echelle pratiquée : HO
Prénom : Gérard
Club : CMMF Mouans-Sartout
Localisation : Haut-Var
Âge : 68

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

Message par Petitrain » dim. 26 nov. 2017, 12:03

Bonjour,
il me semble que le code proposé n'est pas bon :
tu vérifie la condition : if(compteurVoie1 == 1) et si elle est vraie
tu allume la led....OK
tu attaches le servo à la broche 7....Je ne sais pas si ça marche, j'ai essayer chez moi et rien ne se passe?
tu mets à jour tes variables....OK
mais, après tu détaches ton servo sans rien faire, il faut lui dire de faire quelque chose avec tes variables, sinon ça ne sert à rien.
Je ne sais pas ce que tu veux faire avec tes variables, je pense que tu as pris ça sur un autre code mais sans comprendre pourquoi et là, je ne peux pas t'aider !!!
Si tu veux réduire la vitesse de tes servos, sert toi de la bibliothèque VarSpeedServo, c'est le plus simple....
Choisir, c'est déjà renoncer!

Petitrain
Bavard
Messages : 72
Enregistré le : ven. 04 juil. 2014, 12:09
Echelle pratiquée : HO
Prénom : Gérard
Club : CMMF Mouans-Sartout
Localisation : Haut-Var
Âge : 68

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

Message par Petitrain » lun. 27 nov. 2017, 11:00

Bon, le code est dans le micro-contrôleur, les boutons sont placés bien en vue sur le T.C.O, à côté des leds indicatrices....
Pour les servos, il faut un peu bricoler pour qu'ils fassent comme on veut.
Je vous présente ma solution, surement pas la meilleure, et si des gens ont mieux, je suis preneur.
J'ai fait un petit support en cp5mm très simple, collé et vissé, permettant de bien tenir le servo et le petit contact pour l'alimentation du coeur d'aiguille.
Image
Image
Avant de monter mon servo sur son support, je prend soin de le mettre à 90°,
position médiane pour les servos courant ( grâce à l'arduino).
Comme ça, quand je l'installe sur mon réseau, je fixe la tige pour que l'aiguille soit en position médiane.
Plusieurs essais me permettent de régler le servo pour que les angles correspondent bien à la pos. droite ou déviée de l'aiguille.
J'ai un réseau modulaire que je trimballe dans les expos, j'ai fait une petite platine pour chaque module avec un arduino nano;
Image
c'est un jeu d'enfant de relier mon servo grâce aux rangées de connecteurs
Image
Voilà, si quelqu'un a expérimenter d'autres solutions.... :?
Fichiers joints
support(1).jpg
support(2).jpg
P1070673.jpg
P1070674.jpg
Choisir, c'est déjà renoncer!

Avatar du membre
Le Garandiere
Messages : 25
Enregistré le : mar. 07 nov. 2017, 20:49
Echelle pratiquée : HO
Prénom : yannick

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

Message par Le Garandiere » dim. 10 déc. 2017, 15:09

petit coucou, ça ne marche pas comme prévu! :colere:
pour la gestion des LED's pas de souci,
mais pour ce qui est des servos...
j'ai beau y tourner dans tous les sens depuis vendredi soir, rien a faire,
la plupart des servos ont Parkinson avec un débattement de 10 degrés, c'est pas rien, quelqu'un peut il essayer le programme ci dessous et me dire ce qui ne va pas, j'ai comme l'impression que chaque action devrait être enregistrée sous void setup et non void loop.[*]

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();
  boutonVoie2.actualiser();
  boutonVoie3.actualiser();
  boutonVoie4.actualiser();
  boutonVoie5.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);
           }
  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);
      }
   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);
       }
   if(compteurVoie3 == 0) 
  { 
    digitalWrite(ledVoie3,LOW); 
     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); 
     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); 
     aiguilleA8.write(110);
  }}


Petitrain
Bavard
Messages : 72
Enregistré le : ven. 04 juil. 2014, 12:09
Echelle pratiquée : HO
Prénom : Gérard
Club : CMMF Mouans-Sartout
Localisation : Haut-Var
Âge : 68

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

Message par Petitrain » mar. 12 déc. 2017, 10:11

Bonjour,
Ce que tu décris à plus l'air de problèmes avec l'alimentation des servos;
Comment tu alimentes tes servos,il faut les séparer de l'alimentation de l'arduino et tu peux mettre un condensateur au plus prés de chaque servo, genre 10mf minimum à cheval sur le + et le -.
Je ne peux essayer le sketch complet, je n'ai pas tous les servos qu'il faut!
Une autre piste, essaye juste un servo avec son bouton et ses leds, si ça marche, ajoute en un autre et ainsi de suite....
Sur mon réseau, j'emploie la bibliothèque VarSpeedServo.h et, à chaque fois, dans loop() j'appelle la fonction .atach() puis .write() et enfin detach.
et je n'ai pas de problème. J'ai essayé avec la bibliothèque Servo.h mais ça ne marche pas.
Bon courage.
Choisir, c'est déjà renoncer!

Zebulon91
Bavard
Messages : 90
Enregistré le : dim. 16 mars 2014, 17:39
Echelle pratiquée : HO
Prénom : Michel
Club : AMF Villebon/Yvette
Localisation : Villebon sur Yvette (91)
Âge : 51

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

Message par Zebulon91 » mer. 13 déc. 2017, 10:12

@LeGarandiere: Vérifie aussi l'alimentation des servos : bien que souvent ils fonctionnent sous 5V, la tension nominale d'utilisation est de 5.6V voir 6.4V... Si la tension d'alimentation n'est pas stable, la mesure de position est erratique, et du coup, ils bougent tot le temps ou émettent des bruits de sifflement.
La solution évoquée par Petitrain - à savoir d'insérer un .attach avant de positionner, puis un .detach après le mouvement est aussi une bonne solution.
Quoi qu'il en soit, ton code en tant que tel, n'est pas la cause de ces tremblements.

Avatar du membre
Le Garandiere
Messages : 25
Enregistré le : mar. 07 nov. 2017, 20:49
Echelle pratiquée : HO
Prénom : yannick

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

Message par Le Garandiere » jeu. 14 déc. 2017, 22:14

ben non y a rien a faire,
en créant le sketch pour une voie, cela marche mais il reviens cycliquement toute les deux secondes un cadencement de droite a gauche très régulier au servo, ce qui fait que j'aurais voulu la fonction "detach" comme ci-dessous

Code : Tout sélectionner

  { 
    digitalWrite(ledVoie1,HIGH); 
    aiguilleA1.attach(7);
    aiguilleA1.writeMicroseconds(2000);
    aiguilleA1.detach();
   }
    if(compteurVoie1 == 0) 
  { 
    digitalWrite(ledVoie1,LOW);
    aiguilleA1.attach(7);
    aiguilleA1.writeMicroseconds(1000);
    aiguilleA1.detach();
    
}}

les LED fonctionnes mais aucun asservissement du servo, et si j’enlève la ligne "detach" ça marche, je ne dois pas faire comme il faut, mais j'ai beau regarder les différents sites, je ne vois pas mon erreur.
le même scketch pour les cinq voies donne le même résultat ( en ayant pris soin de séparer l'alim des servos)
je galère :cry:

Avatar du membre
Le Garandiere
Messages : 25
Enregistré le : mar. 07 nov. 2017, 20:49
Echelle pratiquée : HO
Prénom : yannick

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

Message par Le Garandiere » jeu. 14 déc. 2017, 23:36

en fait je viens de m’apercevoir de quelque chose par hasard:
voici mes recherches
En partant de ton schéma à main levée PETITRAIN . En supprimant les 5 LED's reliées coté masse pour refaire mon programme comme mon cahier des charges du départ: les cinq images ci-dessous.
Le Garandiere a écrit :en fait voici ce que je recherche en images, 5 étapes distinctes suivant quel BP est appuyé, n'oubliez pas que je suis en analogique, je conduis un train a la foi, mais je suis preneur de tes connaissance petit train car moi du coté arduino, je n'en ai aucune.
ImageImageImageImageImage
sur ces schémas les LED ne seront plus, seront conservées uniquement les cinq LED's branchées coté +5V (du schéma), et disposées au centre de chaque voie, en utilisant toujours mes cinq boutons pour choisir ma voie (entrée/sortie) et ainsi allumer la LED correspondante, voici le sketch que j'ai 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 = 2;
boolean compteurVoie2 = 2;
boolean compteurVoie3 = 2;
boolean compteurVoie4 = 2;
boolean compteurVoie5 = 2;

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();
  boutonVoie2.actualiser();
  boutonVoie3.actualiser();
  boutonVoie4.actualiser();
  boutonVoie5.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 à 1500ms 
* 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 1000ms et pour la position déviee de 2000ms.
*/
    if(compteurVoie1 == 1) 
    {digitalWrite(ledVoie1,HIGH); 
    digitalWrite(ledVoie2,LOW);
    digitalWrite(ledVoie3,LOW);
    digitalWrite(ledVoie4,LOW);
    digitalWrite(ledVoie5,LOW);
    aiguilleA1.writeMicroseconds(2000);
    aiguilleA5.writeMicroseconds(1000);
    aiguilleA6.writeMicroseconds(1000);
    aiguilleA7.writeMicroseconds(1000);
    aiguilleA8.writeMicroseconds(1000);}
 
    if(compteurVoie2 == 1) 
    {digitalWrite(ledVoie1,LOW); 
    digitalWrite(ledVoie2,HIGH);
    digitalWrite(ledVoie3,LOW);
    digitalWrite(ledVoie4,LOW);
    digitalWrite(ledVoie5,LOW);
    aiguilleA1.writeMicroseconds(1000);
    aiguilleA2.writeMicroseconds(2000);
    aiguilleA5.writeMicroseconds(2000);
    aiguilleA6.writeMicroseconds(1000);
    aiguilleA7.writeMicroseconds(1000);
    aiguilleA8.writeMicroseconds(1000);}
    
    if(compteurVoie3 == 1) 
    {digitalWrite(ledVoie1,LOW); 
    digitalWrite(ledVoie2,LOW);
    digitalWrite(ledVoie3,HIGH);
    digitalWrite(ledVoie4,LOW);
    digitalWrite(ledVoie5,LOW);
    aiguilleA1.writeMicroseconds(1000);
    aiguilleA2.writeMicroseconds(1000);
    aiguilleA3.writeMicroseconds(2000);
    aiguilleA6.writeMicroseconds(2000);
    aiguilleA7.writeMicroseconds(1000);
    aiguilleA8.writeMicroseconds(1000);}
    
    if(compteurVoie4 == 1)
    {digitalWrite(ledVoie1,LOW); 
    digitalWrite(ledVoie2,LOW);
    digitalWrite(ledVoie3,LOW);
    digitalWrite(ledVoie4,HIGH);
    digitalWrite(ledVoie5,LOW);
    aiguilleA1.writeMicroseconds(1000);
    aiguilleA2.writeMicroseconds(1000);
    aiguilleA3.writeMicroseconds(1000);
    aiguilleA4.writeMicroseconds(2000);
    aiguilleA7.writeMicroseconds(2000);
    aiguilleA8.writeMicroseconds(1000);}

    if(compteurVoie5 == 1)
    {digitalWrite(ledVoie1,LOW); 
    digitalWrite(ledVoie2,LOW);
    digitalWrite(ledVoie3,LOW);
    digitalWrite(ledVoie4,LOW);
    digitalWrite(ledVoie5,HIGH);
    aiguilleA1.writeMicroseconds(1000);
    aiguilleA2.writeMicroseconds(1000);
    aiguilleA3.writeMicroseconds(1000);
    aiguilleA4.writeMicroseconds(1000);
    aiguilleA8.writeMicroseconds(2000);}}
l'idée est de ne garder que les
if(compteurVoie(x) == 1)
pour faire allumer une seule LED a la foi!
(jusque là ça va vous suivez au fond) :D
le principe fonctionne si je part du choix de la voie 1, puis de la voie 2-3-4-5, bref uniquement crescendo, car dés que je reviens en arrière, les LED's ne s’éteignent pas :roll: sauf si je sollicite le bouton deux fois de suite. ET C'EST LA! LORSQUE DEUX LED SONT ALLUMEES SIMULTANÉMENT QUE LE SERVO FAIT CE SACCADEMENT CYCLIQUE, exactement le même phénomène du sketche initial:

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();
  boutonVoie2.actualiser();
  boutonVoie3.actualiser();
  boutonVoie4.actualiser();
  boutonVoie5.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 à 1500ms 
* 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 1000ms et pour la position déviee de 2000ms.
*/
  if(compteurVoie1 == 1) 
  { 
    digitalWrite(ledVoie1,HIGH); 
     aiguilleA1.writeMicroseconds(2000); 
  }
  if(compteurVoie1 == 0) 
  { 
    digitalWrite(ledVoie1,LOW);
     aiguilleA5.writeMicroseconds(1000);
     aiguilleA6.writeMicroseconds(1000);
     aiguilleA7.writeMicroseconds(1000);
     aiguilleA8.writeMicroseconds(1000);
     }
    if(compteurVoie2 == 1) 
  { 
    digitalWrite(ledVoie2,HIGH); 
     aiguilleA1.writeMicroseconds(1000); 
     aiguilleA2.writeMicroseconds(2000);
      }
   if(compteurVoie2 == 0) 
  { 
    digitalWrite(ledVoie2,LOW); 
     aiguilleA5.writeMicroseconds(2000); 
     aiguilleA6.writeMicroseconds(1000);
     aiguilleA7.writeMicroseconds(1000);
     aiguilleA8.writeMicroseconds(1000);
  }
   if(compteurVoie3 == 1) 
  { 
    digitalWrite(ledVoie3,HIGH); 
     aiguilleA1.writeMicroseconds(1000); 
     aiguilleA2.writeMicroseconds(1000);
     aiguilleA3.writeMicroseconds(2000);
       }
   if(compteurVoie3 == 0) 
  { 
    digitalWrite(ledVoie3,LOW); 
     aiguilleA6.writeMicroseconds(2000);
     aiguilleA7.writeMicroseconds(1000);
     aiguilleA8.writeMicroseconds(1000);
  }
   if(compteurVoie4 == 1) 
  { 
    digitalWrite(ledVoie4,HIGH); 
     aiguilleA1.writeMicroseconds(1000); 
     aiguilleA2.writeMicroseconds(1000);
     aiguilleA3.writeMicroseconds(1000);
     aiguilleA4.writeMicroseconds(2000);
  }
   if(compteurVoie4 == 0) 
  { 
    digitalWrite(ledVoie4,LOW); 
     aiguilleA7.writeMicroseconds(2000);
     aiguilleA8.writeMicroseconds(1000);
  }
   if(compteurVoie5 == 1) 
  { 
    digitalWrite(ledVoie5,HIGH); 
     aiguilleA1.writeMicroseconds(1000); 
     aiguilleA2.writeMicroseconds(1000);
     aiguilleA3.writeMicroseconds(1000);
     aiguilleA4.writeMicroseconds(1000);
  }
   if(compteurVoie5 == 0) 
  { 
    digitalWrite(ledVoie5,LOW); 
     aiguilleA8.writeMicroseconds(2000);
  }}

donc il y a problème de quelque chose que c'est pas normal de deux ordres sur le même servo.
STOP!
pause calmants :mort:

Petitrain
Bavard
Messages : 72
Enregistré le : ven. 04 juil. 2014, 12:09
Echelle pratiquée : HO
Prénom : Gérard
Club : CMMF Mouans-Sartout
Localisation : Haut-Var
Âge : 68

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

Message par Petitrain » ven. 15 déc. 2017, 17:19

J'ai pas compris grand chose à ton problème de led.
tu écris :
boolean compteurVoie1 = 2;
boolean compteurVoie2 = 2;
boolean compteurVoie3 = 2;
boolean compteurVoie4 = 2;
boolean compteurVoie5 = 2;
un booleen ne pas prendre que 2 valeurs 0 et 1.
si les leds restent allumées comme tu le soulignes, il suffit de les eteindre avec digitalWrite(led x, LOW);
Par exemple:
tu viens d'appuyer sur le boutonVoie1( une fois ou deux) ton boulean compteurVoie1 va prendre la valeur 1 ou 0 (et jamais 2)
Tu dis après if(compteurVoie1 == 0) ou if(compteurVoie1 == 1) j'allume telle LED.
Puis tu passes à un autre itinéraire ; il faut éteindre toutes les leds qui ne sont pas consernées par digitalWrite(ledVoiex,LOW) ; apparemment c'est ce que tu fais , donc tu ne peux pas avoir 2 leds allumées en même temps.
Pourquoi tu t'acharnes à employer
aiguilleA1.writeMicroseconds(2000);
je me demande si ce n'ai pas ça qui fout le b....
Sur mon réseau, j'emploie la bibliothèque VarSpeedServo.h et, à chaque fois, dans loop() j'appelle la fonction .atach() puis .write() et enfin detach.
et je n'ai pas de problème. J'ai essayé avec la bibliothèque Servo.h mais ça ne marche pas.
Essaie de charger cette bibliothèque , enlèves les attach() du setup et dans chaque if ---> .atach() puis .write() et enfin detach.
Choisir, c'est déjà renoncer!

Avatar du membre
Le Garandiere
Messages : 25
Enregistré le : mar. 07 nov. 2017, 20:49
Echelle pratiquée : HO
Prénom : yannick

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

Message par Le Garandiere » ven. 15 déc. 2017, 17:29

OUF je me suis calmer, j'ai enfin réussi a faire selon mon idée,
question bête toutefois
pourquoi dans le cas ci dessous,je n'ai plus d'asservissement du tout:
alors que si j’enlève la ligne #détach# le servo fonctionne normalement mais reste asservi (et resonne dans la structure en bois du reseau) c'est pour cela que je tiens a couper sa PWM.

Code : Tout sélectionner

if(boutonVoie1.vientDEtreEnfonce())
{digitalWrite(ledVoie1,HIGH);
aiguilleA1.writeMicroseconds(2000);
aiguilleA1.detach();}


Répondre