Discussions Générales > Discussions ouvertes

Cde Servos

<< < (2/9) > >>

ferdi68:
bonjour,
tout cela est ok et je viens de charger la biblio de Modeleisenbahn N concernant la commande du servo avec un bouton poussoir et ca fonctionne bien
ce que j'aimerais savoir c'set
1. comment ralentir le mouvement du servo
2. que dois-je faire maintenant pour rajouter d'autres servos avec leurs boutons correspondant?
Merci de votre aide

ferdi68:
#include <Servo.h>
 
const byte SERVO_A_ANGLE_MIN = 0;
const byte SERVO_A_ANGLE_MAX = 1;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX = 2;
const byte SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN = 3;
 
const int angleMin = 900;
const int angleMax = 1750;
 
Servo monServo;
int vitesse = 0;
int angle = angleMin;
byte etatServo = SERVO_A_ANGLE_MIN;
 
const int pinBouton = 0; /* le bouton est connecté à la broche A0 */
 
const boolean PRESSE = true;
const boolean RELACHE = false;
 
boolean etatBouton = RELACHE;
 
const byte AUCUN_EVENEMENT = 0;
const byte EVENEMENT_PRESSE = 1;
const byte EVENEMENT_RELACHE = 2;
 
/*
 * fonctions de gestion du poussoir
 */
boolean lirePoussoir()
{
    boolean resultat = RELACHE;
    if (analogRead(pinBouton) > 512) {
        resultat = PRESSE;
    }
    return resultat;
}
 
byte lireEvenement()
{
    byte evenement;
    boolean nouvelEtat = lirePoussoir();
    if (nouvelEtat == etatBouton)
        evenement = AUCUN_EVENEMENT;
    if (nouvelEtat == PRESSE && etatBouton == RELACHE)
        evenement = EVENEMENT_PRESSE;
    if (nouvelEtat == RELACHE && etatBouton == PRESSE)
        evenement = EVENEMENT_RELACHE;
    etatBouton = nouvelEtat;
    return evenement;
}
 
/*
 * La fonction setup() est exécutée 1 fois
 * au démarrage du programme
 */
void setup()
{
  monServo.attach(2);
}
 
/*
 * La fonction loop() est exécutée
 * répétitivement
 */
void loop()

{
    /* actualisation de l'angle du servo */
    monServo.writeMicroseconds(angle);
 
    angle = angle + vitesse;
 
    if (angle > angleMax) {
        angle = angleMax;
        vitesse = 0;
        etatServo = SERVO_A_ANGLE_MAX;
    }
    else if (angle < angleMin) {
        angle = angleMin;
        vitesse = 0;
        etatServo = SERVO_A_ANGLE_MIN;
    }
 
    /* lecture de la commande de l'utilisateur */
    byte evenement = lireEvenement();
 
    if (evenement == EVENEMENT_PRESSE) {
        switch (etatServo) {
            case SERVO_A_ANGLE_MIN:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
                vitesse =  1;
                etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX;
                break;
            case SERVO_A_ANGLE_MAX:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
                vitesse = -1;
                etatServo = SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN;
                break;
        }
    }
 
    delay(3);

ceci est le programme actuel qui fonctionne
j'aimerais commander mes 10 portes de dépot alors que dois je faire
Cordialement
Fernand

Jean-Luc:
Bonjour,

Oui c'est moi qui ait écrit ce programme.

Ceci dit entretemps de l'eau a coulé sous les ponts et quasiment tout ce qui est dans ce programme a été mis dans un bibliothèque qui offre plus de possibilités. Notamment un mouvement avec phase d'accélération, décélération et amortissement pour simuler un mouvement de porte.

Cette bibliothèque, SlowMotionServo, est disponible via le gestionnaire de bibliothèques de l'IDE. Allez dans Croquis > Inclure une bibliothèque > Gérer les bibliothèques. Dans la case Filtrez votre recherche, tapez SlowMotionServo.

Vous avez donc 5 remises, 10 portes, 10 servos et 5 boutons poussoir ?

ferdi68:
Bonjour et merci de votre reponse
J'ai en fait une remise avec 5 portes, donc 10 demi-portes a commander
je vais de ce pas chercher votre nouvelle biblio
merci
Fernand

Jean-Luc:
Je suis en train de préparer l'article explicatif

Navigation

[0] Index des messages

[#] Page suivante

[*] Page précédente

Utiliser la version classique