IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

[débutant] Interférences des boutons


Sujet :

Arduino

  1. #1
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut [débutant] Interférences des boutons
    Bonjour,

    J'ai réalisé un petit montage qui en gros fonctionne bien mais voilà (sans mais, je ne serais pas là). Dans mon loop principale je scrute un potentiomètre et un bouton. Quand j'actionne les autre boutons (fin de course) ça agit comme si je tournais le potentiomètre mais sans changer la valeur (un coup plus un coup moins).
    Du coup ça pollue mon programme.

    Comment, puis-je faire pour que cela ne se produise plus et pourquoi est que ça réagit comme cela j'ai fais une erreur ?


    Merci d'avance pour votre aide

    Voici mon montage (qui n'est pas fini, je n'ai pas le servomoteur ni l'écran et je n'ai qu'un seul potentiomètre celui pour le mouvement du plateau)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
    // ################################################################
    // VARIABLES / CONSTANTES
    // ################################################################
    int position = 0;
    int resistance = 0;
    long positionMax = 9999.0;
    float RMax = 1024.0;
    float Ratio = 0.390625;
    const int step= 12;
    const int dir = 11;
    const int servomoteur = 10;
    const int depart = 9;
    const int ledMesure = 8;
    const int ledAttenteAction = 7;
    const int finCourseMaxi = 6;
    const int finCourseMini = 5;
    const int ledPret = 4;
     
    // ################################################################
    // INITIALISATION
    // ################################################################
    void setup() {
       Serial.begin(9600);  
       Ratio = positionMax/RMax;
       Serial.println("Départ");
     
       pinMode(step, OUTPUT);
       pinMode(dir, OUTPUT);
       pinMode(servomoteur, OUTPUT);
       pinMode(depart, OUTPUT);
       pinMode(finCourseMini, OUTPUT);
       pinMode(finCourseMaxi, OUTPUT);
     
       pinMode(ledMesure, OUTPUT);
       pinMode(ledAttenteAction, OUTPUT);
       pinMode(ledPret, OUTPUT);
     
       position=0;
       resistance=0;
       int sensorValue = analogRead(A0);
       zero(); // <====================
    }
    // ################################################################
    // ################################################################
    //                         BOUCLE PRINCIPALE
    // ################################################################
    // ################################################################
    void loop() {
      int start = digitalRead(depart);
      if (start == HIGH) {
        digitalWrite(ledPret, LOW);
        photographies(); // <====================
      }
      digitalWrite(ledPret, HIGH);
      int sensorValue = analogRead(A0);
      if (abs(resistance-sensorValue)>2){ 
        positionPlateau(sensorValue); // <====================
      }
    }
    // ################################################################
    // CALCUL POSITION DESIREE DU PLATEAU SUITE ACTION POTENTIOMETRE
    // ################################################################
    void positionPlateau(int R){
        int newPosition=(R-resistance)*Ratio;    
        int p = newPosition-position;
        Serial.println("");
     
        tourne(p); // <====================
        resistance = R;
        position=newPosition;  
    }
    // ################################################################
    // DEPLACE CHARIOT DE nb TOURS ET VERIFIS LES FINS DE COURSES
    // ################################################################
    void tourne(int nb){
      boolean plus = HIGH;
      int pinFinCourse = finCourseMini;
      if (nb>0) {
        plus=LOW;
        pinFinCourse = finCourseMaxi;
        }
      nb=abs(nb);
      digitalWrite(dir, plus);
      int x=0;
      while (x < nb){
          int fincourse = digitalRead(pinFinCourse);
          if (fincourse == HIGH) { x = nb; }
          digitalWrite(step, HIGH);
          delayMicroseconds(500);
          digitalWrite(step, LOW);
          delayMicroseconds(500);
          fincourse = digitalRead(pinFinCourse);
          if (fincourse == HIGH) { x = nb; }
          x = x + 1;
        }      
    }
    // ################################################################
    // CYCLES POUR LES PHOTOS
    // ################################################################
    void photographies(){
      Serial.println("Action Photographier");
      digitalWrite(ledMesure, HIGH);
      int x = 0;
      int nx = position / 100;
      while (x<100){
        x = x + 1;
        tourne(-nx); // <====================
     
        // ici photo, pas de servomoteur à ma disposition ce jour
        delay(1000);
        digitalWrite(ledMesure, LOW);    
        Serial.print("Photo ... n°");
        Serial.print(x, DEC);
        Serial.print(" / ");
        Serial.println(100, DEC);
        delay(1000);
        digitalWrite(ledMesure, HIGH);
      }
      digitalWrite(ledMesure, LOW);
      Serial.println("Action Photographier TERMINE");
      zero(); // <====================
    }
    // ################################################################
    // MET AU POINT ZERO LE CHARIOT
    // ################################################################
    void zero(){
       digitalWrite(ledAttenteAction, HIGH);
       tourne(-positionMax); // <====================
       while (analogRead(A0)>0){
          Serial.println("Mettre à la position 0 !");
       }
       Serial.println("Le plateau est à la position 0");
       digitalWrite(ledAttenteAction, LOW);
       digitalWrite(ledPret, HIGH);
    }
    Nom : photo_macro v2_bb.png
Affichages : 100
Taille : 486,4 Ko

  2. #2
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour Speed41
    Citation Envoyé par Speed41 Voir le message
    Comment, puis-je faire pour que cela ne se produise plus et pourquoi est que ça réagit comme cela j'ai fais une erreur ?
    Sur le schéma, dès que l'on ferme un des fin de course, sa LED est alimentée directement, sans résistance!
    et
    les 2 entrées de ces 2 contacts sont déclarées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	 pinMode(finCourseMini, OUTPUT);
    	 pinMode(finCourseMaxi, OUTPUT);
    ce serait pas mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	 pinMode(finCourseMini, INPUT);
    	 pinMode(finCourseMaxi, INPUT);


    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  3. #3
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Merci d'avoir regardé.

    Au début je n'avais pas les led pour les fins de courses et ça donnait le même résultat. Je vais corriger en mettant une résistance (220 ohms)

    Ok demain je vais tester sans les led et en mettant input au lieu de output

    Merci pour ces infos

  4. #4
    Membre actif Avatar de Speed41
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    718
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 718
    Points : 210
    Points
    210
    Par défaut
    Bonjour,

    J'ai modifié en INPUT, et corrigé 2 - 3 trucs en plus j'ai encore un bouton qui parfois fais modifier la résistance mais ce n'est pas à tous les coups (pin 6)
    Je vais tester en changeant de pin

    merci pour ton aide

Discussions similaires

  1. [Labview 7.1]Débutant : action sur des boutons
    Par azerty-30 dans le forum LabVIEW
    Réponses: 7
    Dernier message: 02/06/2009, 10h03
  2. Réponses: 3
    Dernier message: 11/03/2007, 21h50
  3. [débutant] Une zone de dessin et des boutons
    Par mavina dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/02/2006, 12h51
  4. proprietes des boutons
    Par DALI EDY dans le forum MFC
    Réponses: 2
    Dernier message: 14/02/2004, 08h22
  5. Réponses: 2
    Dernier message: 31/08/2002, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo