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 :

De nouveau problème cornélien dans mon code


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Par défaut De nouveau problème cornélien dans mon code
    Bonjour tout le monde,

    Je reviens vers vous de nouveau avec un code que j'ai précédemment présenté. Il fonctionne très bien mais j'ai l'impression qu'il fonctionne sur un bug. Je m'explique.

    Bien qu'ayant une dizaine de LED reliée à mon ULN2308 et à mon I2C, je cherche dans un premier temps à interagir avec seulement 3 d'entre elles.

    - La 1ère clignote pendant que les deux autres sont éteintes. Je presse un bouton poussoir qui fait cesser ses clignotements, la rend fixe (lumineuse en continu) et engendre le clignotement de la seconde qui était éteinte.
    - Je presse un bouton poussoir qui est dédiée à la seconde et qui la rend à son tour lumineuse en continu. Enfin, cet appui engendre le clignotement de la 3eme.

    Ca fonctionne très bien ! Mais... Si les clignotements s'enchainent à l'issu de mes appuis ce n'est pas sans condition car je veux sauvegarder mes appuis pour ne pas à avoir le doigt appuyé en continu sur le BP. Les voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    etat == LOW;
       if(etat==HIGH) { 
        compteur++;
       }
     
    etat1 == LOW;
       if(etat1== HIGH) { 
        compteur1++; 
      }
    Et voici le code complet qui permet les clignotements:

    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
    etat == LOW;
       if(etat==HIGH) { 
        compteur++;
       }
     
     
    etat1 == LOW;
       if(etat1== HIGH) { 
        compteur1++; 
      }
     
     
     if (clignotement) {
      Millisactuel = millis();
      if ((unsigned long)(Millisactuel - Millisprecedent) >= Intervaldeclignotement) {
       mcp.digitalWrite(9, !mcp.digitalRead(9));
       Millisprecedent = Millisactuel; 
      }
     } else {
      mcp.digitalWrite(9, HIGH);
     }
     
     int lecturebouton = mcp1.digitalRead(7);
     delay(50); 
     
     if (lecturebouton==LOW){
      clignotement=false;
      compteur++;
       }
     
     
     if (clignotement1) {
      Millisactuel1 = millis();
       if (((unsigned long)(Millisactuel1 - Millisprecedent1) >= Intervaldeclignotement1) && (compteur>=1)) {
       mcp.digitalWrite(10, !mcp.digitalRead(10)); 
       Millisprecedent1 = Millisactuel1; 
      }
     } else {
      mcp.digitalWrite(10, HIGH);
     
      }
     
     int lecturebouton1 = mcp1.digitalRead(8);
     delay(50); 
     
     if ((lecturebouton1==LOW) && (compteur>=1)){
      clignotement1=false;
      compteur1++;
       }
    Pour moi, cette condition me parait erronée car si je demande à ma LED de clignoter quand compteur est uniquement = à 1 (ligne 34) plus rien ne fonctionne. J'ai l'impression qu'il génère une incrémentation à l'infini car seul le signe >=1 rend le tout fonctionnel... Est-ce normal ?

    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 282
    Par défaut
    Bonjour

    Tu as une très mauvaise interpretation de ton code.
    De 1: L'extrait de ton code ne fait rien, sauf mettre etat et etat1 à false (Low est un alias de false en Arduino). Comme cela est juste avant les tests si vrai, les incrémentations dans les if ne seront jamais exécutées. Et comme etat et etat1 ne sont pas utilisés par la suite, le compilateur fait la même réflexion que moi et supprime très probablement cette partie.

    De 2: Le problème est juste dans la lecture des boutons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     int lecturebouton = mcp1.digitalRead(7);
     delay(50); 
     
     if (lecturebouton==LOW){
      clignotement=false;
      compteur++;
       }
    Le compteur est incérementé à chaque boucle quand le bouton est pressé, et vu que la boucle est très rapide (il n'y a que deux delais de 50ms, et pas beaucoup d'instructions qui prennent du temps, donc probablement une durée de 150ms au grand maximum) même une pression brève par un humain va induire une incrémentation multiple du compteur.

    Idem pour le compteur1.

    Va lire le tuto que l'on a traduit et plus précisément le chapitre 9. Les entrées numériques.

    Bonne suite

    Delias

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2017
    Messages : 41
    Par défaut
    Merci Delias pour ta réponse !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Etrange problème rencontré dans mon code.
    Par bernardmichel dans le forum VBA Access
    Réponses: 8
    Dernier message: 17/09/2015, 05h13
  2. Problème inconnu dans mon code
    Par mouchT8 dans le forum C
    Réponses: 5
    Dernier message: 17/05/2008, 20h52
  3. Réponses: 13
    Dernier message: 17/10/2006, 15h35
  4. [Upload] Problème pour uploader un fichier dans mon code
    Par Peuplarchiste dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2006, 09h48
  5. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 10h53

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