Paso 1: De BlinkWithoutDelay a una sola función
Aquí está un breve ejemplo del bosquejo estándar que utilizan millis() en vez 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 } }
Y esto es cómo podemos comprimirla en una función, con cierta limitación todavía.
#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)); }
Con esta función no es necesario declarar las variables excepto el pin led y pueden tener diferentes intervalo pero no podemos utilizarlo para más de uno llevó. Cada led debe tener su propia función, bastante molesto:
#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)); } }
En el siguiente paso a intentar escribir una sola función que puede utilizarse con varios leds.