logo idehack

Le starter kit Arduino Officiel

Pour débutant – Manuel en Français

Apprenez l’Arduino et l’électronique de façon pratique

La fonction millis() avec Arduino

Déc 3, 2022 | Les fonctions | 0 commentaires

Alors que la fonction delay() est bloquante. Elle peut parfois engendrer des problèmes de sorties de fonctions par exemple. La suite du code ne peut s’exécuter tant que le délais défini n’est pas terminé. millis() elle nous permettra le multitâche lors du fonctionnement de notre code Arduino.

Cette fonction renvoie le nombre de millisecondes écoulées depuis que la carte Arduino a commencé à exécuter le programme en cours. Elle se réinitialisera (remise à zéro) après environ 50 jours.

Ce dont vous aurez-besoin

Programmer un timer avec millis()

Pour comprendre le fonctionnement voici un petit timer simple et commenté.

int secondes = 0; // Initialisation de la variable "secondes"
int minutes = 0; // Initialisation de la variable "Minutes"
unsigned long timer;

void setup() {
   Serial.begin(9600); // Initialisation de la communication "Serie"
   timer = millis();
}

void loop() {
   if (millis() - timer > 995) {
      timer = millis();
      secondes = secondes + 1;
      // si 995 millisecondes se sont écoulées - une seconde est ajoutée à la variable "secondes"
      if (secondes > 60) { secondes = 1; minutes = minutes + 1; }
      // si 60 secondes se sont écoulées,  une minute est ajoutée à la variable "minutes".
      Serial.println(String(minutes) + " : " + String(secondes ));
   }
}

Ouvrez le moniteur série pour visionner le résultat qui ne sera rien d’autre qu’un minuteur (Minutes à gauche, secondes à droite)

Faire clignoter une LED sans delay()

Dans ce très bon article Blink without delay il nous est expliqué comment programmer un code identique à celui de blink (dans son fonctionnement) mais cette fois-ci à l’aide de la fonction millis().

Connectez une led à votre Arduino comme ci-dessous.

Téléversez ensuite ce code:

const int ledPin = LED_BUILTIN;  // là où le numéro du port ou la LED est connectée

int ledState = LOW;  // Défini l'état de la led sur LOW par défaut

unsigned long previousMillis = 0;  // Stockage des millisecondes écoulées

const long interval = 1000;  // interval entre chaques clignotements

void setup() {
  // Défini la pin en tant que sortie
  pinMode(ledPin, OUTPUT);
}

void loop() {

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // Si la led est sur off allume là et vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // Défini l'état de la led dans la variable ledState
    digitalWrite(ledPin, ledState);
  }
}

Aller plus loin avec la fonction millis()

Le code ci-dessous illustre parfaitement la non-interruption du code. Nous allons dans un même temps presser sur un bouton pour allumer une led connectée à la pin 8 de l’Arduino. Pendant que la LED connectée à la pin 13 de l’Arduino clignote à l’aide de la fonction millis().

Connectez le bouton, les leds et les résistances comme ci-dessous:

Et téléversez ce code sur votre Arduino

const int ledPin = LED_BUILTIN;  // là où le numéro du port ou la LED est connectée

int ledState = LOW;  // Défini l'état de la led sur LOW par défaut

unsigned long previousMillis = 0;  // Stockage des millisecondes écoulées

const long interval = 1000;  // interval entre chaques clignotements

const int buttonPin = 2;  // Pin ou le bouton est connecté
const int ledPinbtn = 8;    // Pin ou la LED (Pour le bouton est connectée)
int buttonState = 0;  // Etat du bouton

void setup() {
  // Défini la pin en tant que sortie
  pinMode(ledPin, OUTPUT);
  pinMode(ledPinbtn, OUTPUT);
  pinMode(buttonPin, INPUT);
}

void loop() {
  
    // Lecture de l'état du bouton
  buttonState = digitalRead(buttonPin);

  // S'il est pressé on allume la led
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPinbtn, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPinbtn, LOW);
  }

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // Si la led est sur off allume là et vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // Défini l'état de la led dans la variable ledState
    digitalWrite(ledPin, ledState);
  }

0 commentaires

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Derniers Articles

DFPlayer mp3-tf-16p et Arduino

DFPlayer mp3-tf-16p et Arduino

Jouer des fichier audio avec votre Arduino grâce au DFPlayer mp3-tf-16p Le module MP3-TF-16P, également connu sous le nom de DFPlayer Mini MP3 Player pour Arduino, est un petit dispositif conçu pour la lecture de fichiers audio au format MP3. Intégrant un lecteur de...

Réalisation d’un chenillard LED avec l’Arduino

Réalisation d’un chenillard LED avec l’Arduino

Dans cet article, découvrez comment réaliser un chenillard LED avec Arduino, un projet idéal pour les débutants en électronique et en programmation. À travers cette réalisation simple, vous explorerez les bases de la programmation Arduino et l'utilisation de...

Comment utiliser un module relais avec l’Arduino

Comment utiliser un module relais avec l’Arduino

Que ce soit pour faire de la domotique, contrôler une lampe ou tout autre appareil fonctionnant en 220Volts, le module relais est fait pour çà. En effet, à l'aide d'une broche/pin de commande, il va être possible depuis notre Arduino de faire commuter le relais (et...

Découvrez comment utiliser l’écran ST7789 135*240 avec Arduino

Découvrez comment utiliser l’écran ST7789 135*240 avec Arduino

Le module d’écran LCD pour Arduino ST7789 135*240 est un écran SPI couleur qui offre des possibilités intéressantes pour vos projets. Voici un résumé de ses caractéristiques et de son utilisation : Résolution : Il a une résolution de 135 x 240 pixels 1....

Utiliser l’écran NFP1315-45A avec Arduino

Utiliser l’écran NFP1315-45A avec Arduino

Découvrez comment utiliser l'écran ic:NFP1315-45A avec Arduino Le module d’écran LCD pour Arduino TFT 0.96 pouces SSD1306 est un afficheur dans ce cas-ci jaune et bleu. Voici un résumé de ses caractéristiques et de son utilisation : Résolution : Il a une...