Étape 1: De BlinkWithoutDelay à une seule fonction
Voici un court exemple de l’esquisse standard qui utilisent des millis() au lieu de Delay().
#define blueLed 3 unsigned long previousMillis = 0; // stores last time Led blinked long interval = 100; // interval at which to blink (milliseconds) void setup() { // set the digital pin as output: pinMode(blueLed, OUTPUT); } void loop() { if (millis() - previousMillis >= interval) { // save the last time you blinked the LED previousMillis = millis(); digitalWrite(blueLed, !digitalRead(blueLed)); //change led state } }
Et voilà comment nous pouvons compresser dans une fonction, avec une certaine limitation encore.
#define blueLed 3 void setup() { pinMode(blueLed, OUTPUT); //pin3 Output } void loop() { BlinkBlue(200); //the led will blink every 200ms } void BlinkBlue (int interval){ static long prevMill=0; //prevMill stores last time Led blinked if (((long)millis() - prevMill) >= interval){ prevMill= millis(); //stores current value of millis() digitalWrite(blueLed, !digitalRead(blueLed)); }
Avec cette fonction nous n’avez pas besoin de déclarer toutes les variables sauf la broche led et qu’ils peuvent avoir à intervalle différent mais nous ne pouvons pas l’utiliser pour plus d’un conduit. Chaque conduit doit avoir sa propre fonction, assez ennuyeux :
#define blueLed 3 #define greenLed 2 void setup() { pinMode(blueLed, OUTPUT); //pin3 Output pinMode(greenLed, OUTPUT); //pin2 Output } void loop() { BlinkGreen(100); BlinkBlue(200); } void BlinkBlue (int interval){ static long prevMill = 0; if (((long)millis() - prevMill) >= interval){ prevMill = millis(); digitalWrite(blueLed, !digitalRead(blueLed)); } } void BlinkGreen (int interval){ static long prevMill = 0; if ((millis() - prevMill) >= interval){ prevMill = millis(); digitalWrite(greenLed, !digitalRead(greenLed)); } }
Dans l’étape suivante, nous allons essayer d’écrire une fonction unique qui peut être utilisée avec plusieurs del.