Les 11 (blink without delay)

Alleen lezen

Les 11 (blink without delay)

Berichtdoor pe1br » ma okt 23, 2017 2:01 am

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: Selecteer alles
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.
Bijlagen
les-11-1_bb.jpg
(662.67 KiB) Nog niet gedownload
pe1br
 
Berichten: 56
Geregistreerd: do apr 14, 2016 3:37 am

Keer terug naar archief workshop oktober 2017

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron