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 :

Nano: Utilisation des pins Analogiques comme pins digitales


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut Nano: Utilisation des pins Analogiques comme pins digitales
    Bonjour,

    Pour un de mes projets, j'ai besoin de 13 pins digitales et du bus I2C:
    • une pour le récepteur Infrarouge (câblé en dur vers D12, non modifiable dans mon cas particulier)
    • six pour commander un ensemble E1 de six relais
    • six autres pour commander un autre ensemble E2 de six autres relais
    • deux pins analogiques pour SDA et SCL (bus I2C)



    Jusqu'à présent j'utilisais des cartes MEGA Pro Mini CH340G, mais celles-ci sont chères (leur prix vient d'augmenter de > 50%) et la fabrication chinoise n'est pas un modèle de fiabilité loin s'en faut.

    Pour mes projets plus simples, j'utilise des Nano dont les pins digitales sont numérotées D2 à D13, et où SDA et SCL sont sur A4 et A5: voir fichier joint.
    Nom : pinout_makersguide.com.JPG
Affichages : 8468
Taille : 71,5 Ko

    Je croyais que je ne pouvais pas utiliser les pins analogiques A0 à A7 comme pins digitales et donc que je ne pouvais pas utiliser de Nano pour ce projet.

    Mais je suis tombé sur le fichier joint (chez makersguide.com), où les pins analogiques sont marquées A0/D14, ..., A7/D21, ce qui me laisse penser qu'elles sont probablement utilisables aussi comme pins digitales.

    Si c'est vrai, quelqu'un peut-il me dire comment faire pour les utiliser comme pins digitales, et quelles déclarations faut-il faire dans le code Arduino ?

    Mille mercis,

  2. #2
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 908
    Par défaut
    un digitalRead(A0) va fonctionner très bien, ce sont des pins comme les autres

    mais pas A6 et A7 qui ne peuvent servir que pour une lecture analogique (ADC)

  3. #3
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Bonsoir,

    https://docs.arduino.cc/hardware/nano

    tu peux utiliser pinMode, digitalRead et digitalWrite sur les voies analogiques (sauf A6 et A7 comme Jay l'a indiqué) et les considérer comme des E/S numériques.
    Juste te rappeler également que sur D13 il y a la LED et que par conséquent il n'est pas conseillé d'utiliser cette voie comme entrée :
    https://www.arduino.cc/en/Tutorial/F...ns/DigitalPins

  4. #4
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Merci les amis, je vais étudier ça de près demain, mais il semble que la solution était sous mes yeux depuis des mois...

    un digitalRead(A0) va fonctionner très bien, ce sont des pins comme les autres

    mais pas A6 et A7 qui ne peuvent servir que pour une lecture analogique (ADC)
    Je ne les utiliserai qu'en OUTPUT: est-ce que A6 et A7 peuvent alors être utilisées en digital output ? avec un pinMode(A6, OUTPUT) ou un digitalWrite(A6, HIGH) par exemple ?

    Juste te rappeler également que sur D13 il y a la LED et que par conséquent il n'est pas conseillé d'utiliser cette voie comme entrée :
    j'ai à nouveau la même remarque: je n'ai besoin que d'outputs: est-ce qu'utiliser D13 en sortie est OK ?

    Ensuite il faut voir si le programme va rentrer dans la mémoire de la Nano : un chausse-pied sera peut-être nécessaire

    Mille mercis

  5. #5
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Citation Envoyé par grizzli06 Voir le message
    j'ai à nouveau la même remarque: je n'ai besoin que d'outputs: est-ce qu'utiliser D13 en sortie est OK ?
    oui, mais attention, la led consomme du courant, il faut en tenir compte quand tu vas brancher ton matériel sur cette voie

  6. #6
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    oui, mais attention, la led consomme du courant, il faut en tenir compte quand tu vas brancher ton matériel sur cette voie
    OK je vois... il y aurait un relais Reed derrière qui consomme bien moins que les 40mA autorisés, mais si je peux éviter de l'utiliser...

    D'où ma question sur la possibilité d'utiliser A6 et A7 en digital OUTPUT ??? mais en furetant sur des forums anglais, il semble que non: uniquement analogiques il me semble...

    Pour l'affectation des valeurs haut et bas des sorties digitales habituelles, j'utilise un code du style:
    int relai_lambda=13;
    puis
    digitalWrite(relai_lambda, LOW); // si par exemple je veux le passer à LOW
    et le compilateur sait que "relais lambda" représente la pin digitale D13.

    Mais je n'ai jamais utilisé de pins analogiques sur les Arduino, est-ce que je peux associer (par exemple) A0 à un nom (par exemple relai_truc) pour ne pas avoir à écrire "A0" dans une instruction digitalWrite(A0, LOW) ??

    Edit de 11h58:
    J'ai trouvé, désolé d'avoir dérangé (!), il y a la correspondance suivante:
    D14 is A0
    D15 is A1
    D16 is A2
    D17 is A3
    D18 is A4
    D19 is A5
    donc je sais comment adresser ce truc là !
    Merci et sorry,

  7. #7
    Membre éprouvé
    Homme Profil pro
    Retraité de l'électronique analogique
    Inscrit en
    Avril 2021
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité de l'électronique analogique

    Informations forums :
    Inscription : Avril 2021
    Messages : 50
    Par défaut
    Citation Envoyé par grizzli06 Voir le message
    Je ne les utiliserai qu'en OUTPUT*: est-ce que A6 et A7 peuvent alors être utilisées en digital output ? avec un pinMode(A6, OUTPUT) ou un digitalWrite(A6, HIGH) par exemple ?
    Mille mercis
    Non c'est impossible parce que A6 et A7 ne sont pas reliées à un port numérique.
    Voir le synoptique de la datasheet.

    A0 à A5 sont reliés à un port numérique, le port C, et à des entrées du multiplexeur analogique.
    Le port C est alors complet alors qu'il reste deux entrées disponibles sur le multiplexeur analogique.
    A6 et A7 sont donc reliées uniquement à ce multiplexeur.

    Il y a eu une évolution de l'atmega328p, l'atmega 328pB, avec un port numérique suplémentaire qui permettait de rendre A6 et A7 également numériques plus une deuxième interface série.
    La société Arduino SA n'a pas jugé utile d'y adapter ses bibliothèques.

  8. #8
    Membre confirmé
    Homme Profil pro
    Coach
    Inscrit en
    Novembre 2019
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Coach

    Informations forums :
    Inscription : Novembre 2019
    Messages : 228
    Par défaut
    Mille mercis JayM: comme toujours tu es limpide !

    Et si je fais un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	int relai_toto=14; // puisque c'est la pin A0 (appelée D14) qui commande le relai N°6
     
    puis 
            void activerToto() {
                 digitalWrite(relai_toto,HIGH); // active le Relais "toto" correspondant au relais N°6
            }
    ça marcherait aussi ? ou bien suis-je obligé d'utiliser "A0" au lieu de "14" ?

  9. #9
    Expert confirmé

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

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 908
    Par défaut
    Mais je n'ai jamais utilisé de pins analogiques sur les Arduino, est-ce que je peux associer (par exemple) A0 à un nom (par exemple relai_truc) pour ne pas avoir à écrire "A0" dans une instruction digitalWrite(A0, LOW) ??
    généralement il est de bon ton effectivement de nommer ses pins de manières parlante en début de code plutôt que d'utiliser leur numérotation

    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
    const byte pinRelaiPompe = A0;
    ...
     
    void activerPompe() {
      digitalWrite(pinRelaiPompe, LOW);
    }
     
    void desactiverPompe() {
      digitalWrite(pinRelaiPompe, HIGH);
    }
     
    bool laPompeEstActive() {
      return (digitalRead(pinRelaiPompe) == LOW) ? true : false;
    }
     
    void setup() {
      pinMode(pinRelaiPompe, OUTPUT);
      ...
    }
     
    void loop() {
      ...
      if (laPompeEstActive()) desactiverPompe() ;
    }

    'où ma question sur la possibilité d'utiliser A6 et A7 en digital OUTPUT
    Non comme vous l'avez lu, ces pins sont physiquement connectées aux entrées de l'ADC donc ne peuvent servir qu'à lire une tension.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/01/2015, 21h47
  2. [XL-2007] Utiliser des données saisies comme nom d'objet
    Par Tchebichef dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/09/2014, 22h53
  3. Utiliser des fichiers XML comme "bdd"
    Par Shirraz dans le forum XQUERY/SGBD
    Réponses: 6
    Dernier message: 28/04/2009, 17h37
  4. Réponses: 22
    Dernier message: 03/01/2008, 22h42
  5. [VB.NET][Excel] utiliser des fonction Excel comme xlToRight
    Par Alexj51 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/03/2006, 12h10

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