Deze functie is in sommige gevallen erg handig maar delay kan ook erg lastig zijn als je bijvoorbeeld 2 dingen "tegelijk" wilt doen.
Stel je voor dat je 1 led wilt laten knipperen met een tussenpauze van 100ms en de andere met een tussenpauze van een seconde.
Wanneer je een delay gebruikt zal de arduino elke keer een seconde staan wachten en krijg je de 2de led nooit op een snelheid van 100ms.
De Arduino beschikt ook over een interne klok, hiermee kunnen we dus vergelijken en bepalen wanneer er een seconde voorbij en is wanneer er 100ms voorbij zijn.
Les11-1:
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:
Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over of kopieer deze naar de arduino ide:
Code: Select all
const int led1Pin = 8; //set led1 naar pin 8
const int led2Pin = 12; //set led2 naar pin 12
int led1 = LOW; //status van led1 is uit
int led2 = LOW; //status van led1 is uit
long previousMillisled1 = 0; //container om op te slaan wanneer led1 voor het laatst gewisseld is
long previousMillisled2 = 0; //container om op te slaan wanneer led2 voor het laatst gewisseld is
long intervalled1 = 1000; //knipper interval led1
long intervalled2 = 100; //knipper interval led2
void setup() {
pinMode(led1Pin, OUTPUT); //set led1 als output pin
pinMode(led2Pin, OUTPUT); //set led2 als output pin
}
void loop() {
if(millis() - previousMillisled1 > intervalled1) { //vergelijk de huidige tijd - de laatste wisseltijd en kijk of die groter is dan de interval
previousMillisled1 = millis(); //zet de laatste wisseltijd naar de huidige tijd
if (led1 == LOW) led1 = HIGH; //als de led uit is schakel deze aan
else led1 = LOW; //anders schakel de led uit
digitalWrite(led1Pin, led1); //set de output pin van de led
}
if(millis() - previousMillisled2 > intervalled2) { //herhaal hetzelfde voor led2
previousMillisled2 = millis();
if (led2 == LOW) led2 = HIGH;
else led2 = LOW;
digitalWrite(led2Pin, led2);
}
}
We zien nu de leds beide knipperen op verschillende snelheden.