Arduino ~05 : Hello World (sans délai)

Dans le guide précédent, nous avons vu comment faire le Hello World avec notre Arduino, mais nous avons vu également qu’à chaque fois que le programme se met en attente (entre un allumage et une extinction de la LED), l’Arduino ne pouvait plus rien faire d’autre qu’attendre. Nous allons voir ici comment y remédier.

Prérequis

Matériel requis

  • une carte Arduino
  • une LED
  • une résistance de 220 ohms

Circuit

On utilisera exactement le même circuit que dans le guide Arduino ~04 : Hello World.

Code

/* Clignoter sans délai

 Allume et éteint une LED connectée à la pin numérique 13, sans utiliser 
 la fonction delay(). Cela signifie que du code pourra etre éxécuté en
 meme temps que le code de la LED.

 Le circuit :
 * une LED est connectée à la pin 13 et au ground avec une résistance de 
220 ohms
 * note : sur la plupart des Arduinos, une LED interne est connectée à la
pin 13, donc dans le principe, seul l'Arduino est nécessaire.
*/

// On donne un nom à notre pin LED :
const int ledPin =  13; // une constante (const) ne changera jamais

// Ces variables peuvent changer, par contre :
int ledState = LOW;             // on initialise le premier état de la LED
long previousMillis = 0;        // cette variable stockera quand la LED a 
                                // changé d'état pour la dernière fois

// La variable suivante est de type 'long' car le temps, mesuré en millisecondes,
// pourrait très rapidement devenir un nombre plus grand que ce que permet une variable 'int'
long interval = 1000;           // intervalle de temps entre deux changement d'état

void setup() {
  // configurer la pin de la LED en sortie :
  pinMode(ledPin, OUTPUT);      
}

void loop()
{
  // Ici on va vérifier si il est temps de faire clignoter la LED :
  // si la différence entre l'heure actuelle et la dernière fois que 
  // la LED a clignoté est plus grande que l'intervalle que nous désirons
  // entre 2 clignotements
  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {
    // enregistrer la dernière fois que la LED a clignoté
    previousMillis = currentMillis;  

    // si la LED est allumée on l'éteint et vice-versa
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // on applique l'état à notre LED
    digitalWrite(ledPin, ledState);

    // on peut sans problème rajouter des taches, qui continueront
    // sans interférer avec la LED
  }
}

Explication du code

Vous devriez maintenant être capable, pour les choses simples, de vous référer aux commentaires dans le code pour trouver des explications…

Cet article fait partie d’une série de petits guides concernant Arduino. Le sommaire se trouve ici.

About Captain Stouf

Spécialiste en systèmes informatiques, Développeur matériel et logiciel, Inventeur, Maker : électronique, Systems on Chip, micro-controlleurs, Internet of Things, Modélisation / Scan / Impression 3D, Imagerie...

Laisser un commentaire