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.
if(inte == 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 }
La variable inte permet de récupérer la valeur de l’entrée associée. Cette variable est de type entier, et 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
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(BUTTON1); // 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 BUTTON1 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(BUTTON1); DigitalOut led(LED1); int main() { while(1) { led = !bouton; } }
Tutoriel lié
MInE Prototyper Prototyper avec Nucleo et MBED