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é: 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
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 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.
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é: 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
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 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: 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é: 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: 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é: 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
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é: 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:
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 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!
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

Précédent

Retour vers Arduino

Qui est en ligne ?

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