Stap 1: Van BlinkWithoutDelay tot een enkele functie
Hier is een kort voorbeeld van de standaard schets die gebruikmaken van millis() in plaats van 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 } }
En dit is hoe we het kunt comprimeren in een functie, met nog enigszins worden ingeperkt.
#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)); }
Met deze functie we hoeven niet te verklaren eventuele variabelen behalve de led pin en ze verschillende interval kunnen hebben maar wij deze niet gebruiken voor meer dan één geleid. Elke led moet hebben zijn eigen functie, behoorlijk vervelend:
#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)); } }
In de volgende stap die we zullen proberen om het schrijven van een enkele functie die kan worden gebruikt met meerdere leds.