Lire et écrire avec Arduino Uno (digitalRead et digitalWrite)
Après que nous avons réalisé une première activité intitulée "Commande séquentielle de 4 diodes LED avec Arduino Uno", nous vous proposons de piloter l'allumage d'une diode LED depuis un bouton poussoir et non plus depuis un code C++ que nous réalisons avec une carte Arduino Uno. Pour cela, nous allons vous expliquer comment configurer les différentes entrées/sorties numériques, coder et compiler votre programme C++ sous Arduino IDE et le simuler sous la solution de simulation SimulIDE.
Nous découvrons également durant cette activité les deux fonctions :
- digitalRead() : permet de lire l'état d'une broche numérique. La sortie de cette fonction est 1 (soit HIGH d'après le framework d'Arduino) si une tension de 5V ou de 3.3V est reçue à cette broche, sinon la valeur sera 0 (soit la valeur LOW)
- digitalWrite() : permet d'écrire à la sortie d'une broche numérique (appelée aussi broche ou pin) la valeur 1 ou la valeur 0 logique, soit la valeur 5V ou 3.3V pour la valeur HIGH d'après le framework d'Arduino et la valeur LOW pour 0V).
Pour commander la diode led via un bouton poussoir, nous allons modéliser le montage ci-dessous sous la solution de simulation SimulIDE :

Il est à noter que cette simulation vous permet de vérifier le bon fonctionnement de votre montage avant de le réaliser dans sa vraie grandeur si vous souhaitez le tester avec une carte Arduino.
Modélisation "Lire et écrire avec Arduino Uno" sous SimulIDE
Comme vous le montre la capture ci-dessus, vous pouvez créer le même montage sous la solution SimulIDE :

Comme nous le constatons, pour réaliser ce montage, nous aurons besoin des composants suivants :
- deux résistances d'une valeur de 330Ω et 10kΩ,
- une diode LED,
- une carte Arduino Uno (dotée du microcontrôleur ATmega328P) avec son câble USB,
- un bouton poussoir, et,
- une masse (GND).
Pour cela, nous allons identifier ensemble ces différents composants depuis la bibliothèque des composants de la solution de simulation SimulIDE. Ce qui vous permettra de retrouver facilement chaque composant lors de la création de votre projet tel que :
- deux résistances électriques que nous allons utiliser pour configurer la première à une valeur de 330Ω pour protéger la diode LED contre le courant fort qui la traverse et une pour éliminer les rebonds lorsqu'on appuie sur le bouton poussoir (en pratique, il est recommandé d'ajouter un condensateur pour atténuer encore les microcoupures). Ce composant est disponible sous le nom "Resistance" dans la sous-catégorie "Resistors", comme nous le présente cette capture ci-dessous :

- une diode led pour visualiser l'état de la sortie de la broche 13 : soit la valeur logique du bouton poussoir, soit ouvert soit fermé comme nous l'avons décrit dans la description de ce montage. Ainsi, ce composant nous le retrouvons sous le nom "led" comme nous le montre la capture ci-dessous :

- une carte Uno de la famille des cartes Arduino. Ce composant est disponible sous le nom "Uno" dans la catégorie "Arduino". L'image ci-dessous nous présente son icône :

- un bouton poussoir que nous allons relier à une source d'alimentation d'une valeur de 5V. Nous retrouvons ce composant sous le nom "Bouton poussoir". L'image ci-dessous nous présente son icône :

- une alimentation électrique de 5V pour alimenter le bouton poussoir. Cette source est disponible sous le nom "Fixed Voltage". La figure ci-dessous illustre son icône :

- Enfin, une mise à la masse (GND). Pour modéliser le point de référence de notre circuit 0V, une mise à la masse est requise. Pour cela, nous ajoutons à notre circuit le composant "Masse (0 V)" disponible sous la catégorie "Sources". Son icône est représentée dans la capture suivante :

Une fois que vous avez modélisé le montage proposé ci-dessus, qui ne représente que la partie matérielle de notre conception (appelée aussi la partie physique), il convient d'écrire un petit programme en C++ permettant d’associer l’état du bouton poussoir à l’action souhaitée suivante :
- le bouton poussoir est ouvert, soit l'état logique 0 → la diode led est éteinte, ce qui représente l'état logique 0, et,
- le bouton poussoir est fermé, soit l'état logique 1 → la diode led est allumée, ce qui représente l'état logique 1.
Une fois compilé sous Arduino IDE, ce code sera injecté dans la carte Arduino pour assurer la commande de la diode depuis le bouton. Pour ce faire, nous allons utiliser les deux fonctions digitalRead() et digitalWrite(). Écrivons alors ensemble le code ci-dessous sous la solution Arduino IDE afin de le compiler et exporter ensuite son fichier .hex :
int LedPin = 13; // la diode LED est connectée à la broche 13
int entryPin = 8; // le bouton poussoir est connecté à la broche 8
int vbin = 0; // ajoutons une variable pour stocker l'état lu
void setup() {
pinMode(LedPin, OUTPUT); // définissons la broche 13 pour une sortie numérique
pinMode(entryPin, INPUT); // définissons la broche 8 comme une entrée numérique
}
void loop() {
vbin = digitalRead(entryPin); // lecture de l'état de l'entrée (HIGH ou LOW)
digitalWrite(LedPin, vbin); // Écriture de l'état lu sur la diode LED
}
Une fois que vous avez saisi ce code, l'interface d'Arduino IDE ressemblera à l'image ci-dessous :

Ainsi, une fois que nous avons écrit notre code sous Arduino IDE et SimulIDE, nous pouvons le vérifier dans un premier temps via le bouton "vérifier" pour confirmer qu'aucune erreur ne s'est glissée, puis le compiler afin d'exporter le fichier binaire compilé que nous utiliserons ultérieurement comme firmware de la carte programmable. Pour cela, nous vous proposons de suivre les étapes ci-dessous pour pouvoir générer le fichier requis pour notre microcontrôleur ATmega328P :
- Depuis l'éditeur Arduino IDE, cliquez sur "Vérifier/Compiler" que nous le retrouvons dans le menu Croquis :

- Une fois vérifié et qu'aucune erreur ne nous bloque, exportons les fichiers binaires de notre programme en choisissant Exporter les binaires compilés depuis le même menu Croquis. Cela nous permettra de créer les fichiers machines dont nous allons récupérer le fichier .hex pour le charger sur la carte Arduino sous SimulIDE :

- Ensuite, localisez le fichier .hex que nous retrouvons dans le répertoire build de notre projet (pour info : par défaut, les projets Arduino sont sauvegardés dans le dossier Documents sous Windows). Une fois identifié, copiez son chemin d'accès absolu pour le charger ensuite sous SimulIDE :

- Enfin, charger ce fichier .hex comme firmware sous la solution SimulIDE. Pour cela, faites un clic droit sur votre carte Arduino et choisissez le menu "Charger le firmware". La capture ci-dessous nous montre cela :

Si vous souhaitez vérifier que le fichier .hex est correctement configuré dans votre carte Arduino, vous pouvez ouvrir les propriétés de la carte pour vérifier que le fichier est correctement configuré tel que nous le montre l'image ci-dessous :

Maintenant que tout est correctement modélisé et configuré, vous pouvez lancer la simulation en temps réel sous SimulIDE pour tester ce montage.
Simulation en temps réel sous SimulIDE
Pour lancer le simulateur, vous pouvez démarrer la simulation depuis le bouton "Start Simulation" disponible dans la barre des menus rapides de l'application. Ainsi, depuis ce menu, nous avons deux boutons :
- bouton "Start/Stop" : pour lancer ou arrêter le mode simulation, et
- bouton "Pause" : pour mettre en pause le simulateur en temps réel.
L'image ci-dessous nous explique tout cela. Nous retrouvons aussi un indicateur de l'état du simulateur :

Pour rappel : Si vous exécutez le simulateur alors que votre projet présente une erreur, un message d'erreur s'affichera automatiquement dans la fenêtre "Output" et le simulateur s'arrêtera automatiquement.
Exécution du code et visualisation du résultat
En appliquant toutes les consignes pour réaliser cette activité, et si aucune erreur ne bloque la bonne exécution de notre simulateur sous SimulIDE, la diode LED s'allume lorsque vous appuyez sur le bouton poussoir et s'éteint quand vous relâchez le bouton poussoir. La vidéo ci-dessous vous présente l'exemple que nous avons réalisé pour cette activité :
Conclusion
Nous avons réalisé sous la solution SimulIDE une solution complète pour commander une diode led via un bouton poussoir en programmant une carte Arduino Uno.
Dans le cadre de cette activité, nous avons vérifié et compilé le programme proposé à l’aide de l’environnement Arduino IDE, puis exporté le fichier binaire au format .hex. Ce fichier a ensuite été chargé en tant que firmware dans la carte Arduino Uno sous SimulIDE afin de tester et de valider le bon fonctionnement du concept proposé.
Une fois que cette activité terminée, vous pouvez :
- réaliser le montage et le tester sur une vraie carte Arduino Uno disponible sur le marché des DIY (DIY pour Do It Yourself; pour l'abréviation en français, fais-le toi-même).
- Modifiez le code pour ajouter un temporisateur qui laisse la diode led allumée un temps supplémentaire une fois que le bouton poussoir est relâché.