LES 4: for loop

Deze les is een voortzetting van de vorige. Makkelijk want dan heb je geen andere spullen nodig.
In de vorige opdracht moest je de extra opdracht (Zorg ervoor dat de rode LEDS MINIMAAL 5* knipperen als het knopje word ingedrukt)maken.
Kijk in je werkboek na hoe je dat hebt gedaan.
We gaan nu een “loop” maken. Het worden er zelfs drie.
Iedere loop (vertaal dit woord als herhaling) is een stukje code welke telkens opnieuw uitgevoerd wordt, zo vaak als je maar wenst.

Opdracht 1: laat de rode led op pin 5 10x knipperen
Hiervoor is weer extra codetaal nodig.
for = een herhaalblok, uiteraard begint en eindigt dat met accolades {  }

(int i=0; i<10;i++) = hier staat dat je begint met i=0
zolang i kleineris dan 10 gaat er iets gebeuren (aan uit van led)
na iedere knipper wordt er opgeteld dat is i++
als er 10x is geknipperd dan stopt de loop

Zet de schets op de Arduino en verander de i waarde ook eens, zet er bijvoorbeeld 5 neer

NODIG (zelfde als in opdracht 3)

  • 1 groene LED
  • 2 rode LEDs
  • drukknop
  • 1x 10 kiloΩ weerstand (bruin-zwart-zwart-rood)
  • 3x 220 Ω eerstanden (rood-rood-zwart-zwart)

FILMPJE

SCHETS
/*
Les 4   THEORIE: FOR LOOP / DELAY
Na druk op knop knippert led 10 keer.
*/

// Gebruik de variabele switchstate om de stand
// van de drukknop in op te slaan.
int switchstate = 0;

void setup(){
  // definieer de LED PIN als OUTPUT
  pinMode(5,OUTPUT);

  // definieer de drukknop PIN als INPUT 
  pinMode(2,INPUT);
}

void loop()
{
  // vraag de waarde van de drukknop
  // digitalRead() checkt of er spanning
  // op de pin staat 
  switchstate = digitalRead(2);

  // als de drukknop niet wordt ingedrukt
  // laat LED 10 x knipperen:
  if (switchstate == LOW) {
    digitalWrite(5, LOW);  // zet de rode LED op pin 5 uit
  }

  // deze ‘else” is onderdeel van het if() statement.
  // als de drukknop is niet LOW (dus de drukknop is ingedrukt)
  //  laat de rode LEDs 10x knipperen
  else {
    for (int i=0; i<10;i++) {
      // zet de LED op pin 5 aan
      digitalWrite(5, HIGH);
      // wacht een kwart seconde
      delay(250);
      // zet de LED op pin 5 uit
      digitalWrite(5, LOW); 
      // wacht weer een kwart seconde
      delay(250);
    }
  }
}


Opdracht 2:
de rode led laten dimmen
In deze opdracht gaan er meerdere dingen tegelijkertijd gebeuren.
Als je op de knop drukt gaat de groene led uit.
Blijf je drukken dan dimt het rode ledje ook.

DIMMEN
De led op een Arduinobordje kan eigenlijk niet dimmen. De reden is simpel, een led gaat uit en gaat aan. Gelukkig zien onze ogen dat snelle geknipper niet.
We gaan werken met if—-else, als dan! Als je dit wel of niet doet dan gebeurd er dit. Dat kun je ze vaak herhalen als je wil. Een loop dus.

Verder gaan we werken met dimmen.
Dimmen werkt op de Arduino uitgangen met een ~, dat zijn ook analoge uitgangen. Die uitgangen kun je sturen. Er zijn 255 stapjes.
Wil je een stapje zien dan moet je er wel een beetje vertraging in meenemen.

Een  fade of dim-actie ziet er als volgt uit ( we gaan er vanuit dat je pin 5 gebruikt, maar 3,6,9,10 of 11 kan ook) :

analogWrite(led, brightness); 
brightness = brightness + fadestep; 
if (brightness == 0 || brightness ==255) { fadestep = -fadestep;}
delay(50);
// zet de helderheid van de led op pin 5 op volledig aan
// verander de helderheid voor de volgende loop
// keer de richting van de fade om aan het einde van de fade

// wacht 50 ms om het dimeffect te kunnen zien

                                                          
SCHETS

/*
   THEORIE: FOR LOOP
   Drukknop los: groen aan,
   Drukknop ingeduwd: groene led uit en rode led fade met behulp van delay
  
*/

// Gebruik de variabele switchstate om de stand
// van de drukknop in op te slaan.
int switchstate = 0;
int brightness = 0;
int fadestep = 5;
int led = 5;

void setup(){
  // definieer de LED PIN’s als OUTPUT
  pinMode(3,OUTPUT); //groen
  pinMode(4,OUTPUT); //rood 1
  pinMode(5,OUTPUT); //rood 2

  // definieer de drukknop PIN als INPUT 
  pinMode(2,INPUT);
}

void loop(){
  // vraag de waarde van de drukknop
  // digitalRead() checkt of er spanning
  // op de pin staat 
  switchstate = digitalRead(2);

  // als de drukknop niet wordt ingedrukt
  // zet LED groen AAN en LED’s rood UIT
  if (switchstate == LOW) {
    digitalWrite(3, HIGH); // zet de groene LED op pin 3 aan
    digitalWrite(4, LOW);  // zet de rode LED op pin 4 uit
    digitalWrite(led, HIGH);  // zet de rode LED op pin 5 aan
  }
  // deze ‘else” is onderdeel van het if() statement.
  // als de drukknop is niet LOW (dus de drukknop is ingedrukt)
  // zet de groene LED uit en laat de rode LEDs om en om knipperen
  else {
    digitalWrite(3, LOW);  // zet groene led uit
    analogWrite(led, brightness); // zet de helderheid van led op pin 5
    brightness = brightness + fadestep; // verander de helderheid voor de volgende loop
    if (brightness == 0 || brightness ==255) {
      fadestep = -fadestep; // keer de richting van de fade om aan het einde van de fade
    }
    delay(50); // wacht 50 ms om het dimeffect te kunnen zien
  }
}

Advertenties