Go Down

Topic: Commande servo-moteur avec deux bouton poussoir (Read 2741 times) previous topic - next topic

sanonc

Bonjour,

Je suis sur un projet pour commander un servo-moteur avec deux boutons poussoir, je m'explique:

- Lorsque j'appuie sur un des bouton poussoir le servo-moteur tourne de 180° et quand je relache il revient à la position initiale(0°).
-Et lorsque  j'appuie sur l'autre bouton poussoir le servo-moteur tourne à -180° et quand je relache il revient à la position initiale (0°).



et voici mon code :


#include <Servo.h>
     
    const byte SERVO_A_ANGLE_MIN = -1;
    const byte SERVO_A_ANGLE_MAX = 1;
    const byte SERVO_EN_NEUTRE = 0;

     
    const int angleMin = -1750;
    const int angleNeutre = 0;
    const int angleMax = 1750;
     
    Servo monServo1;

    int vitesse = 0;
    int angle = angleNeutre;
    byte etatServo = SERVO_EN_NEUTRE;
     
    const int pinBouton = 0; /* le bouton est connecté à la broche A0 */
    const int pinBouton1 = 1; /* le bouton est connecté à la broche A1 */

     
    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;
        boolean resultat = PRESSE;
        if (analogRead(pinBouton) > 1023) {
            resultat = RELACHE;
        boolean resultat = RELACHE;
        if (analogRead(pinBouton1) > 512) {
            resultat = PRESSE;
        boolean resultat = PRESSE;
        if (analogRead(pinBouton1) > -1023) {
            resultat = RELACHE;
        }
        return resultat;
    }
     
    byte lireEvenement()
    {
        byte evenement;
        boolean nouvelEtat = lirePoussoir();
       
        if (nouvelEtat == etatBouton)
            evenement = AUCUN_EVENEMENT;
        if (nouvelEtat == PRESSE && etatBouton)
            evenement = EVENEMENT_PRESSE;
        if (nouvelEtat == RELACHE && etatBouton)
            evenement = EVENEMENT_RELACHE;
        etatBouton = nouvelEtat;
        return evenement;
               
   
        if (nouvelEtat == etatBouton1)
            evenement = AUCUN_EVENEMENT;
        if (nouvelEtat == PRESSE && etatBouton1)
            evenement = EVENEMENT_PRESSE1;
        if (nouvelEtat == RELACHE && etatBouton1)
            evenement = EVENEMENT_RELACHE1;
        etatBouton1 = nouvelEtat;
        return evenement;
    }
     
    /*
     * La fonction setup() est exécutée 1 fois
     * au démarrage du programme
     */
    void setup()
    {
      monServo1.attach(2);

    }
     
    /*
     * La fonction loop() est exécutée
     * répétitivement
     */
    void loop()
{
    /* actualisation de l'angle du servo */
    monServo1.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 (etatServo1) {
            case SERVO_A_ANGLE_MIN:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MIN:
                vitesse =  1;
 
    if (evenement == EVENEMENT_PRESSE1) {
        switch (etatServo1) {
            case SERVO_A_ANGLE_MIN:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
                vitesse =  1;

    if (evenement = AUCUN_EVENEMENT;) {
        switch (etatServo1) {
            case SERVO_A_ANGLE_MIN:
            case SERVO_EN_MOUVEMENT_VERS_ANGLE_MAX:
                vitesse =  1;

           
        }
    }
 
    delay(3);
}

sanonc

Et j'aimerai un peu d'aide pour le code...

Je vous remercie d'avance

bilbo83


Une erreur ?
Code: [Select]
if (evenement = AUCUN_EVENEMENT;)
Au lieu de:
if (evenement == AUCUN_EVENEMENT)

 

Go Up