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 :

Fonctionne sur UNO mais pas sur NANO : je désespère !


Sujet :

Arduino

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2021
    Messages : 4
    Par défaut Fonctionne sur UNO mais pas sur NANO : je désespère !
    Bonjour,
    Opérant mes premiers pas avec ARDUINO, j'ai maquetté un petit automatisme sur UNO. Certainement pas optimisé mais qui me satisfait. Je souhaite le pérenniser sur une carte NANO (officielle) mais damned il ne fonctionne plus !
    En essayant d'isoler le problème, celui-ci semble tenir à mon écriture de conditions pour activer ou non les broches de sortie.
    Plus je cherche, plus je butte, moins j'ai de capacité d'analyse. Merci de m'apporter votre éclairage.

    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
    // ========================= 1. ENTETE DECLARATIVE ======================================================
     
    boolean A = 0; // Soit 6 variables pouvant prendre un état logique 0 ou 1
    boolean B = 0;
    boolean C = 0;
    boolean D = 0;
    boolean E = 0;
    boolean F = 0;
     
     
    // ========================== 2. FONCTION SETUP = CODE D'INITIALISATION =================================
     
    void setup() {
     
      // ------- Broches en sorties numériques -------  
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);
     
     
    } // fin de la fonction void setup()
     
     
     
     
    //============================= 3. FONCTION LOOP = BOUCLE SANS FIN = COEUR DU PROGRAMME ==================
     
    void loop()
    {   
                    // Première écriture
                    if (A + B + C) {digitalWrite(6,HIGH) ;} // Si l'une ou l'autre des variables A B ou C est vraie j'allume la pin 6
                    else {digitalWrite(6,LOW);} 
                    // En réalité la broche se met à l'état 1 (alors que 0 attendu dans le cas présent). Why ?
     
                    // Deuxième écriture 
                    if ((D==1) || (E==1) || (F==1)) {digitalWrite(7,HIGH) ;} // Si l'une ou l'autre des variables D E ou F =1 j'allume la pin 6
                    else {digitalWrite(7,LOW);} 
                    // En réalité là également la broche se met à l'état 1. Why?
     
           delay(2000);
     
     
    }
    // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
     
     
    // ================================== FIN DU PROGRAMME ===================================
    Et pourquoi diable ça fonctionne sur UNO et pas sur NANO ?

  2. #2
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    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 017
    Par défaut
    Bonjour j-loup
    Citation Envoyé par j-loup Voir le message
    Et pourquoi diable ça fonctionne sur UNO et pas sur NANO ?
    J'ai essayé ton programme sur un Nano et il fonctionne.
    Quel défaut as-tu constaté lors du passage au Nano?

    Cordialement
    jpbbricole

  3. #3
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Bonjour j-loup

    le code tel qu'il est écrit fixe les valeurs de A,B,C,D,E et F de manière définitive à faux (0 est convertit en false).

    le compilateur est malin et est capable de calculer les conditions à la compilation et donc de voir quelles branches prendre dans les ifs

    il doit donc génèrer du code comme si vous aviez écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void setup() {
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);
    }
     
    void loop()
    {   
      digitalWrite(6,LOW);
      digitalWrite(7,LOW);
      delay(2000);
    }
    comment avez vous vérifié que les pin 6 et 7 étaient à HIGH? il n'y a pas de raison.

  4. #4
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2021
    Messages : 4
    Par défaut
    Merci de vos réponses.

    Mes broches 6 et 7 commandent une carte relais 2 canaux) comportant 2 LED matérialisant la présence ou non du 5 Volts de commande desrelais (donc de sortie des pins 6 et 7).

    Dans l'état des lignes ci-dessus mes variables sont systématiquement à 0. Les sorties sont donc attendues à 0 et non pas 1 comme constaté.
    J'y perd mon (peu de) latin ! Je cherche encore...

    Si je crée une variable à inversion d'état (bascule = 1 - bascule) et teste la variable à chaque changement d'état, mon digitalWrite() fonctionne bien. Je fume !!!

  5. #5
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    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 017
    Par défaut
    Bonjour j-loup
    Citation Envoyé par j-loup Voir le message
    Si je crée une variable à inversion d'état (bascule = 1 - bascule) et teste la variable à chaque changement d'état, mon digitalWrite() fonctionne bien. Je fume !!!
    Pourrais-tu mettre le code complet qui contient cette inversion d'état?

    PS: Lors du transfert de UNO à Nano, est-ce-que la GND a bien été reconnecté?

    Cordialement
    jpbbricole

  6. #6
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2021
    Messages : 4
    Par défaut
    Voilà le bout de prg de test :
    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
    // ========================= 1. ENTETE DECLARATIVE ======================================================
     
    boolean bascule = 0 ;
     
     
    // ========================== 2. FONCTION SETUP = CODE D'INITIALISATION =================================
     
    void setup() {
     
      // ------- Broches en sorties numériques -------  
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);
     
     
    } // fin de la fonction void setup()
     
     
     
     
    //============================= 3. FONCTION LOOP = BOUCLE SANS FIN = COEUR DU PROGRAMME ==================
     
    void loop()
    {   
     
                    if (bascule) {digitalWrite(6,HIGH) ;} // Si bascule = 1 j'allume la pin 6
                    else {digitalWrite(6,LOW);} 
     
     
     
                    if (bascule !=1 ) {digitalWrite(7,HIGH) ;} // Si bascule = 0 j'allume la pin 7
                    else {digitalWrite(7,LOW);} 
     
     
           delay(2000);
           bascule = 1-bascule ;
     
     
    }
    // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
     
     
    // ================================== FIN DU PROGRAMME ===================================
    J'ai suffisamment torturé ma NANO.
    Je vais défaire mes soudures, la réinstaller sur breadboard, éventuellement la remplacer, et reprendre pas à pas

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Vous avez des LEDs au bout des pins pour voir les changements toutes les 2 secondes? avez vous mis une résistance de limitation de courant par LED? (sinon comment vérifiez vous la valeur des pins? oscilloscope?)

    Le mieux c'est quand même de respecter les types. un booléen c'est vrai ou faux. ce n'est pas un entier.

    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
    boolean bascule = false ;
     
    void setup() {
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);
    }
     
    void loop()
    {   
      if (bascule) {digitalWrite(6,HIGH) ;} // Si bascule est vrai j'allume la pin 6
      else {digitalWrite(6,LOW);} 
     
     if (!bascule) {digitalWrite(7,HIGH) ;} // Si bascule est faux j'allume la pin 7
     else {digitalWrite(7,LOW);} 
     
      delay(2000);
      bascule = ! bascule ; // on inverse la bascule ! est l'opérateur NOT
    }
    On voit dans ce code que l'on fait quelque chose suivant bascule, mais on fait deux tests sur la bascule -> On peut regrouper

    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
    boolean bascule = false ;
     
    void setup() {
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);
    }
     
    void loop()
    {   
      if (bascule) { // bascule est vrai
        digitalWrite(6,HIGH) ;  // j'allume la pin 6
        digitalWrite(7,LOW);    // j'éteins la pin 7
      } else { // bascule est faux
        digitalWrite(6,LOW);
        digitalWrite(7,HIGH) ;
      } 
      delay(2000);
      bascule = ! bascule ; // on inverse la bascule ! est l'opérateur NOT
    }

  8. #8
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2021
    Messages : 4
    Par défaut
    Merci à Jay M d'avoir su me mettre le doute :

    Lors de mon prototypage j'avais matérialisé l'état de mes sorties par des LED.
    Lors mon implantation définitive sur NANO j'ai raccordé ces sorties à un module 2 relais équipé de LED matérialisant l'état de ces relais et me fiais à ces LED.
    Je viens de vérifier au voltmètre l'état des broches de sortie qui est OK.

    C'est donc mon module 2 relais qui inverse l'état !
    Ce sont des relais inverseurs, donc simple à corriger.
    Le problème semble donc résolu.

    Merci de m'avoir accompagné et d'avoir su me poser les bonnes questions.
    J-Loup

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    les relais ont souvent 2 broches, une NO et une NC. Suivant celle retenue effectivement vous avez un comportement inverseur

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

Discussions similaires

  1. [MooTools] AJAX fonctionne en local mais pas sur serveur
    Par LionL dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 07/12/2007, 22h52
  2. AJAX : Fonctionne en local mais pas sur serveur distant ?
    Par jejefeds dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 19/06/2007, 14h26
  3. [2.0] connexion qui fonctionne chez moi mais pas sur un autre pc
    Par Lorenzeb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 13/09/2006, 17h47
  4. Réponses: 4
    Dernier message: 14/03/2006, 10h04
  5. Réponses: 2
    Dernier message: 23/11/2005, 17h10

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