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é: 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!
Petitrain
Bavard
 
Messages: 57
Inscrit le: Ven 04 Juil 2014, 11: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, 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...
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 20:49
Echelle pratiquée: HO
Prénom: yannick

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

Publié: Jeu 23 Nov 2017, 18:53 
:applause: YES!!!!!
On attend les photos.
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 57
Inscrit le: Ven 04 Juil 2014, 11: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, 21:20 
hello, vous avez un échantillon de mon 1er réseau avec mon avatar, je peu poster là?
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 20:49
Echelle pratiquée: HO
Prénom: yannick

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

Publié: 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
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 20:49
Echelle pratiquée: HO
Prénom: yannick

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

Publié: 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
Plume
Bavard
 
Messages: 54
Inscrit le: Jeu 02 Juil 2015, 21:18
Localisation: Nevers
Echelle pratiquée: HO
Club: UAICF Nevers Vauzelles

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

Publié: 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: 57
Inscrit le: Ven 04 Juil 2014, 11: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 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.... :?
Choisir, c'est déjà renoncer!
Petitrain
Bavard
 
Messages: 57
Inscrit le: Ven 04 Juil 2014, 11: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é: 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);
  }}

Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 20:49
Echelle pratiquée: HO
Prénom: yannick

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

Publié: 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!
Petitrain
Bavard
 
Messages: 57
Inscrit le: Ven 04 Juil 2014, 11: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 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.
Zebulon91
Bavard
 
Messages: 83
Inscrit le: Dim 16 Mars 2014, 17:39
Localisation: Villebon sur Yvette (91)
Âge: 50
Echelle pratiquée: HO
Prénom: Michel
Club: AMF Villebon/Yvette

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

Publié: 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 de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 20:49
Echelle pratiquée: HO
Prénom: yannick

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

Publié: 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:
Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 20:49
Echelle pratiquée: HO
Prénom: yannick

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

Publié: 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!
Petitrain
Bavard
 
Messages: 57
Inscrit le: Ven 04 Juil 2014, 11: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é: 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();}

Avatar de l’utilisateur
Le Garandiere
 
Messages: 25
Inscrit le: Mar 07 Nov 2017, 20:49
Echelle pratiquée: HO
Prénom: yannick

PrécédentSuivant

Retour vers Arduino

Qui est en ligne ?

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