Comment récupérer une information numérique ?

NIVEAU 1

Objectifs

  • Configurer une broche du microcontroleur en entrée numérique
  • Utiliser une broche du microcontroleur en entrée numérique

Pré-requis

Limitations de la carte Nucléo

La tension d’alimentation de la carte (via la prise USB) et donc du microcontroleur est de 3.3V.
Cette carte n’admet donc aucune tension négative ou supérieure à 3.3V.

Entrées numériques

Nous allons voir à travers ce tutoriel comment spécifier dans le compilateur que l’on veut utiliser telle broche en entrée sur le microcontrôleur.

Pour rappel, une entrée numérique permet de récupérer une information numérique (‘0’ ou ‘1’) provenant de l’extérieur vers l’intérieur du composant. Dans le cas de la carte Nucléo, un ‘0’ est codé par une tension de 0V et un ‘1’ est codé par une tension de 3.3V.

Déclaration

L’ensemble des classes et des fonctions permettant de réaliser des opérations sur les entrées/sorties de la carte se trouvent dans la bibliothèque “mbed.h (ou “mbed-os.h“). Il est donc indispensable d’avoir au préalable inclut cette bibliothèque :

#include "mbed.h"

La première étape est la déclaration au compilateur de cette broche en entrée. Il faut la placer après la déclaration des ressources externes (bibliothèques) et avant toute définition de fonction (voir tutoriel Tester mon premier programme sur Nucléo).

DigitalIn inte(PB_9);

Dans l’exemple précédent, on configure la broche PB_9 (du connecteur Morpho) en entrée numérique (ou digital en anglais). Dans ce code, il y a trois notions importantes :

  • DigitalIn‘, la classe qui définit le type de la broche, ici une entrée numérique
  • inte‘, le nom de la variable qui va être associée au port donné dans les parenthèses
  • PB_9‘, le nom de la broche que l’on va associer sur le composant

Utilisation

L’intérêt d’utiliser une entrée numérique est de pouvoir récupérer une information provenant de l’extérieur dans son programme.

Pour pouvoir utiliser les sorties déclarées précédemment sur la carte, on passe par les variables qu’on a associé à chacune de ces sorties. On pourra ensuite stocker cette information dans une variable interne au microcontroleur.

Par exemple, on peut utiliser le code suivant :

int a;
a = inte.read();

La fonction read() permet de récupérer la valeur de l’entrée associée. La variable a, de type entier, vaudra alors :

  • 0 si l’entrée inte (PB_9, d’après la déclaration d’avant) est à 0V
  • 1 si l’entrée inte est à 3.3V

Il est alors possible de tester la variable a pour connaitre son état et faire une action en conséquence.

int a;
a = inte.read();

if(a == 1){
    // ACTIONS A FAIRE SI L'ENTREE PB_9 EST A 3.3V / 1 LOGIQUE
}
else{
    // ACTIONS A FAIRE SI L'ENTREE PB_9 EST A 0V / 0 LOGIQUE
}

Exemple

Voici un exemple un peu plus complet d’utilisation d’une entrée numérique et d’une sortie numérique.

#include "mbed.h"
 
DigitalIn bouton(USER_BUTTON); // Déclaration du bouton comme entrée numérique
DigitalOut led(LED1); // Déclaration de la led comme sortie numérique
 
int main() { 
  while(1) {
    if (bouton == 0) { // Si le bouton est appuyé
      led = 1;         // La LED est allumée
    }
    else{              // Sinon
      led = 0;         // La LED est éteinte
    }
  }
}

Il est important ici de voir que le bouton-poussoir USER_BUTTON est à ‘1’ lorsqu’il est relâché et à ‘0’ lorsqu’on appuie dessus.

Remarque : Il est possible d’écrire le même code de façon beaucoup plus compacte. Pour cela il suffit de remarquer que la LED a toujours un état (‘0’ ou ‘1’) qui est le contraire de celui du bouton. Cela se transcrit en C par la ligne 9 du code ci-dessous.

#include "mbed.h"

DigitalIn bouton(USER_BUTTON);
DigitalOut led(LED1);

int main()
{
    while(1) {
        led = !bouton;
    }
}

Tutoriel lié

MInE Prototyper Prototyper avec Nucleo et MBED

Nucleo – Récupérer une information numérique