HOWTO · Arduino

Faire un compteur en Arduino

On peut faire un compteur en utilisant une boucle dans Arduino.

Sur cette page

Pour créer un compteur avec Arduino, reliez un bouton à une entrée numérique et à GND, détectez chaque pression une seule fois, incrémentez une variable et affichez sa valeur dans le Moniteur série. L’exemple ci-dessous est conçu pour une carte compatible Uno et remet le compteur à zéro lorsqu’il atteint une limite configurable. Une LED intégrée ou externe peut signaler les pressions ; elle n’affiche pas la valeur numérique.

Fonctionnement d’un compteur Arduino

Un compteur est une variable qui mémorise un nombre et évolue lorsqu’un événement se produit. Dans ce projet, l’événement est l’appui sur un bouton. Arduino exécute loop() en continu, vérifie l’entrée et incrémente le compteur une seule fois lorsque le bouton passe de l’état relâché à l’état enfoncé. Un court délai d’antirebond filtre les variations électriques rapides qui peuvent se produire à la fermeture d’un interrupteur physique.

Une boucle peut aussi répéter un nombre fixe d’opérations. Par exemple, une boucle for peut faire clignoter une LED cinq fois, puis s’arrêter : c’est une boucle finie, tandis que la fonction loop() d’Arduino continue de s’exécuter. Le programme principal de cet exemple utilise cette boucle continue pour surveiller le bouton.

Câbler le bouton et la LED

Avec INPUT_PULLUP, reliez une borne du bouton-poussoir à la broche numérique 2 et l’autre à GND. La résistance de tirage interne de la carte maintient l’entrée à l’état HIGH lorsque le bouton est relâché ; lorsqu’on appuie dessus, la broche est reliée à GND et lit LOW. Ce câblage ne nécessite pas de résistance de tirage externe.

Pour une LED externe, reliez la broche numérique 13 à l’anode de la LED (patte longue) par l’intermédiaire d’une résistance de limitation de courant, puis reliez sa cathode (patte courte) à GND. Sur l’Uno, la LED intégrée est généralement reliée à la broche 13 ; pour les autres cartes, vérifiez leur brochage. Le programme utilise LED_BUILTIN afin d’employer la broche définie par la carte pour sa LED intégrée. Respectez les limites de courant des broches de la carte.

Écrire et téléverser un programme de compteur à bouton

Le code C++ complet ci-dessous fonctionne comme un programme Arduino dans l’IDE Arduino. Lors d’une compilation C++ sur ordinateur, le banc d’essai inclus fournit trois appuis sur le bouton afin de rendre visible la logique du compteur. Réglez resetAt sur la première valeur à laquelle le compteur doit revenir à zéro ; le délai d’antirebond est de 30 millisecondes.

#ifdef ARDUINO
#include <Arduino.h>
#else
// Desktop harness for a deterministic button sequence.
#include <iostream>
using byte = unsigned char;
const int HIGH = 1, LOW = 0, INPUT_PULLUP = 2, OUTPUT = 3;
const int LED_BUILTIN = 13;
unsigned long mockNow = 0;
void pinMode(byte, int) {}
void digitalWrite(byte, int) {}
unsigned long millis() { return mockNow; }
int digitalRead(byte) {
  bool pressed = (mockNow >= 10 && mockNow < 50) ||
                 (mockNow >= 100 && mockNow < 140) ||
                 (mockNow >= 190 && mockNow < 230);
  return pressed ? LOW : HIGH;
}
struct MockSerial {
  void begin(int) {}
  void println(int value) { std::cout << value << '\n'; }
  void println(const char* value) { std::cout << value << '\n'; }
} Serial;
#endif

const byte buttonPin = 2;
const byte ledPin = LED_BUILTIN;
const unsigned long debounceMs = 30;
const int resetAt = 3;

int counter = 0;
int lastRawReading = HIGH;
int stableReading = HIGH;
unsigned long lastChangeTime = 0;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int reading = digitalRead(buttonPin);
  unsigned long now = millis();

  if (reading != lastRawReading) {
    lastRawReading = reading;
    lastChangeTime = now;
  }

  if (now - lastChangeTime >= debounceMs && reading != stableReading) {
    stableReading = reading;
    if (stableReading == LOW) {
      counter++;
      digitalWrite(ledPin, HIGH);
      Serial.println(counter);
      if (counter >= resetAt) {
        counter = 0;
        Serial.println("Counter reset");
      }
    } else {
      digitalWrite(ledPin, LOW);
    }
  }
}

#ifndef ARDUINO
int main() {
  setup();
  for (mockNow = 0; mockNow <= 230; mockNow += 10) loop();
}
#endif
1
2
3
Counter reset

Dans le banc d’essai pour ordinateur, les trois appuis prévus atteignent resetAt ; le comportement décrit prévoit donc l’affichage de chaque valeur, suivi du message de réinitialisation. Les éléments fournis ne permettent pas de confirmer que cet exemple a été exécuté. Le libellé Counter reset du bloc de sortie reste en anglais.

Dans l’IDE Arduino, sélectionnez la carte connectée et le port, téléversez le programme, puis ouvrez Outils > Moniteur série et réglez le débit en bauds sur 9600. Appuyez sur le bouton puis relâchez-le une fois pour chaque incrément. D’après le comportement décrit, le moniteur affiche 1, 2 et 3 ; après le troisième appui, il affiche Counter reset, puis affiche 1 au prochain appui. La LED reste allumée tant que le bouton est enfoncé de façon stable et s’éteint après son relâchement. Sur la carte, setup() et loop() s’appuient sur le cœur Arduino ; le banc d’essai pour ordinateur fournit une séquence d’entrées fixe pour la même logique de compteur.

Afficher et réinitialiser le compteur

Dans cet exemple, le Moniteur série sert d’affichage numérique. Une LED seule peut signaler qu’un appui a été pris en compte, mais elle ne peut pas indiquer la valeur du compteur. Pour afficher des chiffres sur l’appareil, utilisez un afficheur à 7 segments ou un écran LCD, avec le câblage et la bibliothèque nécessaires ; ces afficheurs ne sont pas pris en charge par ce programme.

La réinitialisation se fait automatiquement à resetAt : le programme affiche la valeur seuil, remet le compteur mémorisé à zéro et continue. Modifiez resetAt pour choisir une autre limite positive. Le code n’utilise pas de bouton de réinitialisation distinct. Si vous en ajoutez un, prévoyez une entrée dédiée et définissez clairement son câblage et son fonctionnement au lieu de compter sur une broche inutilisée.

FAQ

De quels composants ai-je besoin ?

Une carte compatible Uno, un bouton-poussoir, des fils de raccordement et un câble USB suffisent pour compter les appuis et les afficher sur un ordinateur. Utilisez la LED intégrée ou ajoutez une LED externe avec une résistance de limitation de courant pour obtenir un signal visuel.

Puis-je utiliser un autre type d’afficheur ?

Oui. Un écran LCD ou un afficheur à 7 segments peut montrer la valeur numérique, mais chacun nécessite des branchements adaptés et du code dédié. L’exemple ci-dessus envoie le nombre au Moniteur série et utilise sa LED uniquement comme témoin d’appui.

Comment modifier la limite de réinitialisation ?

Modifiez resetAt près du début du programme. Le compteur se réinitialise juste après l’affichage de la valeur qui atteint cette limite.

Le compteur peut-il décrémenter ?

Oui. Pour obtenir un compteur décroissant, soustrayez un à chaque appui accepté et définissez ce qui doit se passer lorsque la valeur minimale est atteinte. Cette modification ne fait pas partie du programme ci-dessus.

Puis-je ajouter d’autres boutons ?

Oui. Attribuez une broche à chaque bouton supplémentaire, configurez son entrée et associez-lui une action distincte, comme décrémenter le compteur ou le réinitialiser manuellement. Câblez chaque bouton selon le mode d’entrée choisi ; l’exemple principal ne gère qu’un seul bouton.