Les 11 (blink without delay)

Alleen lezen

Moderator: pe1br

Post Reply
pe1br
Posts: 66
Joined: Thu Apr 14, 2016 3:37 am

Les 11 (blink without delay)

Post by pe1br »

In de vorige lessen hebben we vaak de functie delay gebruikt.
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);
  }
}
Klik op de upload button.
We zien nu de leds beide knipperen op verschillende snelheden.
Attachments
les-11-1_bb.jpg
(662.67 KiB) Not downloaded yet
Post Reply