La fonction digitalWrite() sur Arduino : contrôler vos sorties numériques

Une fois qu'une broche numérique sur une carte Arduino est définie comme une sortie à l'aide de la fonction pinMode() dans la section setup(), vous pouvez contrôler son état logique grâce à la fonction pinMode(). Cette fonction est l'une des fonctions les plus utilisées en code Arduino puisqu'elle permet de commander des composants simples tels que des diodes LED, des relais, des buzzers ou même encore des transistors ou des étages de puissance pour une utilisation plus avancée.

Nous rappelons que l’état logique d’une sortie, appelée aussi pin ou broche ne peut prendre que deux valeurs logiques possibles, d'après le framework Arduino :

  • la valeur 1; soit donc la valeur HIGH, et,
  • la valeur 0; soit donc la valeur LOW.

Dans la suite de ce cours, nous allons étudier comment cette commande fonctionne, sa syntaxe, ses états logiques ainsi que quelques applications pratiques en électronique embarquée destinée à la robotique.

Syntaxe de la fonction digitalWrite()

Comme nous l'avons défini ci-dessous, cette fonction permet de définir l'état de sortie d'une broche numérique. Pour l'utiliser, nous devons respecter une syntaxe exacte, d'après le framework Arduino, et ce-ci est comme suit :

digitalWrite(pin, état);

tels que les paramètres communiqués dans cette fonction sont comme suit :

  • pin : numéro de la sortie, appelée aussi broche, pin ou connecteur, et,
  • value : la valeur logique souhaitée.

tel que le paramètre état ne peut prendre que deux valeurs possibles :

  • LOW : pour le niveau logique bas, soit la valeur logique 0 (ce niveau correspond aussi à la valeur 0V), et,
  • HIGH : pour définir le niveau logique haut, soit donc la valeur logique 1 (ce niveau correspond à la valeur électrique 5V généralement, elle peut correspondre à d'autres valeurs comme la 3.3V ou autre, cela dépend de la référence de la carte Arduino).

Il est à noter que cette fonction ne fonctionne que si la broche a été configurée en mode OUTPUT via la fonction pinMode().

Comment fonctionne digitalWrite() électriquement ?

Lorsqu'une sortie est en configurée en mode OUTPUT, la fonction digitalWrite() permet de configurer en la codant la valeur de la sortie en l'une des deux valeurs logiques : HIGH ou LOW. Ce qui donne l'ordre au microcontrôleur de configurer la sortie électriquement à 5V (aussi 3.3V ou autre) ou à 0V

Cette valeur électrique reste limitée en vue de la limite du courant fourni par le microcontrôleur; par exemple la valeur limite du courant fourni est de 20 mA maximal par broche sur une carte Arduino Uno. Cette limite ne permet donc pas de faire fonctionner certains équipements qui demandent une charge électrique importante tels que les moteurs, les relais, etc.

A ne pas faire

Parmi les erreurs les plus fréquentes, quand on débute dans la programmation Aruino, les deux mauvaises écritures ci-dessous :

La sortie n'est pas configurée

Quand on oublie de configurer le mode du port comme sortie à l'intérieur de la fonction setup(), l'exécution de notre code ne sera pas garantie et le comportement de la sortie n'est pas garanti. Donc le code ci-dessous n'est pas complet :

void setup() {
  // placez ici votre code d'initialisation, à exécuter une seule fois.
}

void loop() {
  digitalWrite(9, HIGH);
}

Par défaut, toutes les E/S numériques dans une carte Arduino sont prédéfinies à des INPUT dès que le microcontrôleur fonctionne.

La sortie n'est pas correctement configurée

Lorsque nous déclarons une E/S depuis la fonction loop(), l'exécution de notre code sera ralentie puisque nous répétons initialement, et d'une manière cyclique, une ligne de code pour rien.

void setup() {
  // placez ici votre code d'initialisation, à exécuter une seule fois.
}

void loop() {
  pinMode(9, OUTPUT); // Cette ligne doit être déclarée dans la fonction setup()
  digitalWrite(9, HIGH);
}

La bonne pratique est donc de déclarer toujours la fonction pinMode() à partir de la fonction setup().

Exemples pratiques avec la fonction digitalWrite()

Allumer une diode LED

Pour allumer une diode LED à la continue, il nous suffit juste de configurer une broche numérique à une sortie à l'aide de la fonction pinMode() puis l'activer en utilisant la fonction digitalWrite(). Le code ci-dessous nous présente un code type :

void setup() {
  pinMode(8, OUTPUT);
}

void loop() {
  digitalWrite(8, HIGH);
}

Comme vous le remarquez, nous avons opté pour le port 8 pour cette connexion numérique sur notre carte Arduino.

Eteindre une diode LED

Pour éteindre une diode LED déjà allumée dans un code existant, il est donc nécessaire de faire passer la sortie numérique correspondante, déjà allumée, à la valeur logique 0 soit donc à la valeur LOW, d'après le framework Arduino. La ligne de code suivante est un exemple, si nous prenons le même port 8 que l'exemple précédent; allumer une diode LED :

  digitalWrite(8, LOW);

Clignotter une diode LED

Et pour faire clignoter une diode LED, il nous suffit maintenant juste d'allumer puis éteindre la diode LED tout en espaçant le passage de la valeur HIGH à LOW et de LOW à HIGH de quelques secondes en utilisant la fonction delay(). Par exemple, nous allons appliquer un temps d'attente de 3 secondes (soit 3000 millisecondes puisque la fonction delay() prend comme paramètre des millisecondes)

Le code sera donc le suivant pour réaliser cette activité :

void setup() {
  pinMode(8, OUTPUT);
}

void loop() {
  digitalWrite(8, HIGH);
  delay(3000);
  digitalWrite(8, LOW);
  delay(3000);
}
Information

Faire clignoter une diode LED avec une carte Arduino NANO

Pour débuter avec Arduino et la fonction digitalWrite(), electro-robot vous propose une activité de découverte à réaliser sous SimulIDE (cette activité ne nécessite l'achat d'aucun matériel; carte, plaque, etc) :

Le feu tricolore

Dans le même principe, vous pouvez également réaliser un feu tricolore à l'aide de 3 diodes LED de couleurs différentes; soit vert, jaune et rouge. Pour cela, il vous suffit juste de jouer sur l'ordre de l'allumage et l'extinction des 3 diodes LED pour réaliser un feu tricolore.

Le code que nous vous proposons est le suivant (extrait de l'activité Réalisation d'un feu tricolore avec Arduino UNO) :

//Déclaration des constantes
const int ledRouge = 13; //Définir la constante LedRouge pour désigner le pin 13
const int ledJaune = 12; //Définir la constante LedJaune pour désigner le pin 12
const int ledVert = 11;  //Définir la constante LedVert pour désigner le pin 11

void setup() {
  // Initialisation des 3 pins utilisés 13,12 et 11
  pinMode(ledRouge, OUTPUT);
  pinMode(ledJaune, OUTPUT);
  pinMode(ledVert, OUTPUT);
}

void loop() {
  digitalWrite(ledVert, HIGH);  // Allumer la LED Verte
  delay(3000);                 // Attendre 3 seconde
  digitalWrite(ledVert, LOW);   // Éteindre la LED Verte
  digitalWrite(ledJaune, HIGH);  // Allumer la LED Jaune
  delay(500);                 // Attendre 0.5 seconde
  digitalWrite(ledJaune, LOW);   // Éteindre la LED Jaune
  digitalWrite(ledRouge, HIGH);  // Allumer la LED Rouge
  delay(1000);                 // Attendre 1 seconde
  digitalWrite(ledRouge, LOW);   // Éteindre la LED Rouge
  delay(100);                // Attendre 0.1 seconde
}
Information

Ralisation d'un feu tricolore avec une carte Arduino

Comme vous le remarquez en lisant le code Arduino ci-dessous, nous réalisons un feu tricolore à l'aide d'une carte Arduino, trois diodes LED de couleurs différentes et de quelques autres composants électriques. Pour réaliser cette activité, nous vous invitons à vous référer à la page suivante :


📝 La dernière modification de cette page a été faite le 25 August 2026 par Electro & Robot