Help variante de "huit boutons, huit servos"

Toutes les discussions sur l'Arduino !

Modérateur : MOD

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:58

pardon Petitrain j'ai envoyer mon dernier message alors que tu venais d'écrire, pour l’histoire du bouléan c'est une erreur, j'ai revue complètement le sketch, c'est ok, je n'ai plus de mouvement intempestif des servos, j'utilise aussi #VarSpeedServo.h# (je ne trouve pas de différences avec # servo.h#), j'utilise #writeMicroseconds(x)# car le mouvement des servos est plus fuide par contre, même en enlevant les attach() du setup et dans chaque if ---> .atach() puis .write() et enfin detach. cela ne marche pas, aurais tu un exemple s'il te plais car tout ce que je vois a droite a gauche m'indique la même manier dont je procède mais sans résultat, il y à là aussi quelque chose qui m'échappe
Merci

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 : 50

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

Message par Zebulon91 » sam. 16 déc. 2017, 09:29

Juste au cas où.. Je t'invite à consulter ceci, que j'avais publié il y a un petit moment : viewtopic.php?f=63&t=79990#p1825502
Particulièrement la fonction 'void setServoPos(byte id, byte pos, byte speed)' presque à la fin du code.
J'ai près d'une trentaine de ces cartes en fonction, et aucun soucis de fonctionnement.

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. 16 déc. 2017, 12:47

bonjour, félicitation, mais je n'en suis pas encore là, je voie effectivement la fonction que tu m’indique, mais... bref, encore une autre méthode, et là je décroche.
merci

Petitrain
Bavard
Messages : 71
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 » sam. 16 déc. 2017, 14:19

Bon, apparemment ça ne marche toujours pas!!!!
tu écris:
j'utilise aussi #VarSpeedServo.h# (je ne trouve pas de différences avec # servo.h#),
Sur le github de la bibliothèque :
VarSpeedServo.h
La bibliothèque VarSpeedServo.h Arduino permet d'utiliser jusqu'à 8 servomoteurs de manière asynchrone (car elle utilise des interruptions). En outre, vous pouvez définir la vitesse d'un mouvement, éventuellement attendre (bloc) jusqu'à ce que le déplacement du servo soit terminé, et créer des séquences de mouvements qui s'exécutent de manière asynchrone.
il me semble que ça fait pas mal de différence..... :lol:
Le plus simple, quand ça ne marche pas, c'est de recommencer le code à zéro.
1 bouton, les deux leds indicatrices et un servo.(mon schémas).
J'essaye de mon coté et j'envoie le code.
Choisir, c'est déjà renoncer!

Petitrain
Bavard
Messages : 71
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 » sam. 16 déc. 2017, 16:01

Code : Tout sélectionner

#include <VarSpeedServo.h>  //on se sert de cette bibliothèque.

 VarSpeedServo aiguilleA1;  // on crée un objet servo pour controler notre servo que l'on attachera à la broche 7. 
                            // un maximum de 8 objets peuvent être créer.
#include <simpleBouton.h>   // bibliothéque qui gère les boutons

simpleBouton boutonVoie1(2); // Création d'un objet bouton sur la broche 2.

const byte ledVoie1 = 19; // On attache la broche A5 à une variable ledVoie1.

boolean compteurVoie1 = 0; // cette variable va passer de 0 à 1 à chaque appui sur le bouton
void setup() {
    pinMode(ledVoie1,OUTPUT);  // on initialise la broche en sortie

}

void loop() {
/***************************GESTION DES BOUTONS******************************************/
/*on lit l'état du bouton et si on a un appui on passe la variable de 0 à 1 et inversement.*/
  boutonVoie1.actualiser();
    if(boutonVoie1.vientDEtreEnfonce()) { compteurVoie1=!compteurVoie1; }
/**************************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);  //on allume la led
     aiguilleA1.attach(7);        // on attache le servo
     aiguilleA1.write(110,15,true);  // ici, 3 arguments : l'angle à atteindre,la vitesse de déplacement( de 0 à 255) 
                                // pour le 3ème:true signifie qu'il faut finir le déplacement avant de faire autre chose
     aiguilleA1.detach();       // on dettache le servo
  }
  if(compteurVoie1 == 0)
  {
    digitalWrite(ledVoie1,LOW);
     aiguilleA1.attach(7);
     aiguilleA1.write(70,15,true);
     aiguilleA1.detach();
  }
}
Voilà, chez moi ça marche impeccable!!!
J'essaie avec deux servos, j'en ai retrouvé un!!!
Choisir, c'est déjà renoncer!

Petitrain
Bavard
Messages : 71
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 » sam. 16 déc. 2017, 19:12

Code : Tout sélectionner

#include <VarSpeedServo.h>  //on se sert de cette bibliothèque.

 VarSpeedServo aiguilleA1;  // on crée un objet servo pour controler notre servo que l'on attachera à la broche 7. 
                            // un maximum de 8 objets peuvent être créer.
 VarSpeedServo aiguilleA2; 
                           
#include <simpleBouton.h>   // bibliothéque qui gère les boutons

simpleBouton boutonVoie1(2); // Création d'un objet bouton sur la broche 2.
simpleBouton boutonVoie2(3);

const byte ledVoie1 = 19; // On attache la broche A5 à une variable ledVoie1.
const byte ledVoie2 = 18;

void setup() {
    pinMode(ledVoie1,OUTPUT);  // on initialise la broche en sortie
    pinMode(ledVoie2,OUTPUT);

}

void loop() {
/***************************GESTION DES BOUTONS******************************************/
/*on lit l'état du bouton et si on a un appui on passe la variable de 0 à 1 et inversement.*/
  boutonVoie1.actualiser();
  boutonVoie2.actualiser();
  
/**************************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(boutonVoie1.vientDEtreEnfonce())        // on appelle l'itinéraire Voie1
  {
    digitalWrite(ledVoie1,HIGH);     //on allume la ledVoie1 déviée
    digitalWrite(ledVoie2,LOW);      // on allume la ledVoie2 droite
     aiguilleA1.attach(7);           // on attache le servo
     aiguilleA1.write(130,15,true);  // ici, 3 arguments : l'angle à atteindre(110=deviée),la vitesse de déplacement( de 0 à 255) 
                                     // pour le 3ème:true signifie qu'il faut finir le déplacement avant de faire autre chose
     aiguilleA1.detach();            // on dettache le servo
     
     aiguilleA2.attach(8);
     aiguilleA2.write(50,15,true);  // 70 = droite
     aiguilleA2.detach();
  }
  
  if(boutonVoie2.vientDEtreEnfonce())       // on appelle l'itinéraire Voie 2
  {
    digitalWrite(ledVoie1,LOW);
    digitalWrite(ledVoie2,HIGH);  
     aiguilleA1.attach(7);        
     aiguilleA1.write(50,15,true);                                   
     aiguilleA1.detach();
       
     aiguilleA2.attach(8);        
     aiguilleA2.write(130,15,true);                                   
     aiguilleA2.detach();       
  }
  
}
Voilà un code pour deux servos donc 2 itinéraires.
Je l'ai testé, ça marche très bien, je pense que c'est pareil pour tes 5 itinéraires.
J'ai fait un petit dessin pour mieux préciser ma pensée.
Attention, il faut des bouton-poussoirs momentanés, les leds dessinent l'itinéraire sur le T.C.O.
J'ai enlevé les booleans car inutiles.
Bon courage, tiens-nous au courant.
Image
Fichiers joints
Itinéraire.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 » sam. 16 déc. 2017, 21:23

ça y est! ça fonctionne! :applause: en fait il me manquais l'argument #true# pour pouvoir détacher, mais si on le dit pas, on peu pas l'inventer,
merci Arduino, Railenbois, Plume, Zebulon91, ET SURTOUT :applause: Petit train :applause: pour tes interventions précises rapide et sans agacements.
à ben pour avoir ouvert une autre page pour n'oublier aucun intervenants, je viens de voir que ton sketch est exactement le même que le miens sauf que je mets la vitesse à 50 car c'est une gare cachée donc on ne voie pas les mouvements.
MISSION ACCOMPLIE et a bientôt cette foi pour mes réalisations.
NOYEU JOEL :noel:

Petitrain
Bavard
Messages : 71
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. 17 déc. 2017, 13:23

Bravo à toi surtout,
tu vois, il vaut mieux utiliser des bibliothèques bien faites que de réinventer la roue.
Joyeuses Fêtes et bon train
Choisir, c'est déjà renoncer!

Répondre